Skip to main content

An asynchronous framework for building your own Telegram Bot

Project description


Build Status codecov

An asynchronous framework for building your own Telegram Bot over API.


aio-telegram-bot requires Python 3.5.3+ and is available on PyPI:

$ pip install aio-telegram-bot

*Compatible with PyPy3.5-6.0.0+


Polling example

import asyncio
import os

from aiotelegrambot import Bot, Client, Content, Message
from aiotelegrambot.rules import Contains

async def hi(message: Message):
    await message.send_message("Hello!", True)

async def run(bot: Bot):
    await bot.initialize()
    while True:
        await asyncio.sleep(1)

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    client = Client(os.environ["TELEGRAM_BOT_TOKEN"])
    bot = Bot(client)
    bot.add_handler(hi, content_type=Content.TEXT, rule=Contains("hi"))

    except KeyboardInterrupt:


$ export TELEGRAM_BOT_TOKEN=12345678:replace-me-with-real-token
$ python3

Webhook example

Example of how to generate ssl certificate: openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout domain_srv.key -out domain_srv.crt

import argparse
import json
import os
import ssl

from aiohttp import web
from async_generator import async_generator, yield_

from aiotelegrambot import Bot, Client, Content, Handlers, Message
from aiotelegrambot.rules import Contains

handlers = Handlers()

HOST = os.environ["TELEGRAM_BOT_HOST"]
PORT = 8443

parser = argparse.ArgumentParser()
parser.add_argument("files", metavar="N", type=str, nargs="+")
SSL_PUBLIC_KEY, SSL_PRIVATE_KEY = parser.parse_args().files

@handlers.add(content_type=Content.TEXT, rule=Contains("hi"))
async def hi(message: Message):
    await message.send_message("Hello!")

async def webhook_handle(request):
    bot =["bot"]
    data = await request.text()
    await bot.process_update(json.loads(data))
    return web.Response()

async def init_bot(app: web.Application):
    bot = Bot(Client(TOKEN), handlers)
    await bot.initialize(webhook=True)
    await bot.client.set_webhook("https://{}:{}/{}".format(HOST, PORT, TOKEN), certificate=SSL_PUBLIC_KEY)

    app["bot"] = bot

    await yield_()

    await bot.client.delete_webhook()
    await bot.close()
    await bot.client.close()

app = web.Application()
app.router.add_post("/{}".format(TOKEN), webhook_handle)

context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(SSL_PUBLIC_KEY, SSL_PRIVATE_KEY)

web.run_app(app, host="", port=PORT, ssl_context=context)


$ export TELEGRAM_BOT_TOKEN=12345678:replace-me-with-real-token
$ export
$ python3 domain_srv.crt domain_srv.key


aio-telegram-bot is offered under the MIT license.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aio-telegram-bot-1.0.0.tar.gz (10.3 kB view hashes)

Uploaded source

Built Distribution

aio_telegram_bot-1.0.0-py3-none-any.whl (11.6 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page