aiogram
#
Danger
This version still in development!
aiogram modern and fully asynchronous framework for Telegram Bot API written in Python 3.8 with asyncio and aiohttp.
It helps you to make your bots faster and simpler.
Danger
Breaking News:
aiogram 3.0 has breaking changes.
It breaks backwards compatibility by introducing new breaking changes!
Features#
Asynchronous (asyncio docs, PEP 492)
Supports Telegram Bot API 5.3
Telegram Bot API integration code was autogenerated and can be easy re-generated when API was updated
Updates router (Blueprints)
Finite State Machine
Middlewares (incoming updates and API calls)
Provides Replies into Webhook
Integrated I18n/L10n support with GNU Gettext (or Fluent)
Warning
Before start using aiogram is highly recommend to know how to work with asyncio.
Also if you has questions you can go to our community chats in Telegram:
Simple usage#
import logging
from typing import Any
from aiogram import Bot, Dispatcher, types
from aiogram.types import Message
TOKEN = "42:TOKEN"
dp = Dispatcher()
logger = logging.getLogger(__name__)
@dp.message(commands={"start"})
async def command_start_handler(message: Message) -> None:
"""
This handler receive messages with `/start` command
"""
# Most of event objects has an aliases for API methods to be called in event context
# For example if you want to answer to incoming message you can use `message.answer(...)` alias
# and the target chat will be passed to :ref:`aiogram.methods.send_message.SendMessage` method automatically
# or call API method directly via Bot instance: `bot.send_message(chat_id=message.chat.id, ...)`
await message.answer(f"Hello, <b>{message.from_user.full_name}!</b>")
@dp.message()
async def echo_handler(message: types.Message) -> Any:
"""
Handler will forward received message back to the sender
By default message handler will handle all message types (like text, photo, sticker and etc.)
"""
try:
# Send copy of the received message
await message.send_copy(chat_id=message.chat.id)
except TypeError:
# But not all the types is supported to be copied so need to handle it
await message.answer("Nice try!")
def main() -> None:
# Initialize Bot instance with an default parse mode which will be passed to all API calls
bot = Bot(TOKEN, parse_mode="HTML")
# And the run events dispatching
dp.run_polling(bot)
if __name__ == "__main__":
main()
Contents#
- Installation
- Bot API
- Handling events
- Utils
- Changelog
- 3.0.0b1 (2021-12-12)
- 3.0.0a18 (2021-11-10)
- 3.0.0a17 (2021-09-24)
- 3.0.0a16 (2021-09-22)
- 3.0.0a15 (2021-09-10)
- 3.0.0a14 (2021-08-17)
- 2.14.3 (2021-07-21)
- 2.14.2 (2021-07-26)
- 2.14 (2021-07-27)
- 2.13 (2021-04-28)
- 2.12.1 (2021-03-22)
- 2.12 (2021-03-14)
- 2.11.2 (2021-11-10)
- 2.11.1 (2021-11-10)
- 2.11 (2021-11-08)
- 2.10.1 (2021-09-14)
- 2.10 (2021-09-13)
- 2.9.2 (2021-06-13)
- 2.9 (2021-06-08)
- 2.8 (2021-04-26)
- 2.7 (2021-04-07)
- 2.6.1 (2021-01-25)
- 2.6 (2021-01-23)
- 2.5.3 (2021-01-05)
- 2.5.2 (2021-01-01)
- 2.5.1 (2021-01-01)
- 2.5 (2021-01-01)
- 2.4 (2021-10-29)
- 2.3 (2021-08-16)
- 2.2 (2021-06-09)
- 2.1 (2021-04-18)
- 2.0.1 (2021-12-31)
- 2.0 (2021-10-28)
- 1.4 (2021-08-03)
- 1.3.3 (2021-07-16)
- 1.3.2 (2021-05-27)
- 1.3.1 (2018-05-27)
- 1.3 (2021-04-22)
- 1.2.3 (2018-04-14)
- 1.2.2 (2018-04-08)
- 1.2.1 (2018-03-25)
- 1.2 (2018-02-23)
- 1.1 (2018-01-27)
- 1.0.4 (2018-01-10)
- 1.0.3 (2018-01-07)
- 1.0.2 (2017-11-29)
- 1.0.1 (2017-11-21)
- 1.0 (2017-11-19)
- 0.4.1 (2017-08-03)
- 0.4 (2017-08-05)
- 0.3.4 (2017-08-04)
- 0.3.3 (2017-07-05)
- 0.3.2 (2017-07-04)
- 0.3.1 (2017-07-04)
- 0.2b1 (2017-06-00)
- 0.1 (2017-06-03)