aiogram
#
Danger
This version is still in development!
aiogram is a modern and fully asynchronous framework for Telegram Bot API written in Python 3.8 using asyncio and aiohttp.
Make your bots faster and more powerful!
Danger
Breaking News:
aiogram 3.0 has breaking changes.
It breaks backward 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 easily re-generated when API gets updated
Updates router (Blueprints)
Has Finite State Machine
Middlewares (incoming updates and API calls)
Provides Replies into Webhook
Integrated I18n/L10n support with GNU Gettext (or Fluent)
Warning
It is strongly advised that you have prior experience working with asyncio before beginning to use aiogram.
If you have any questions, you can visit our community chats on Telegram:
Simple usage#
import logging
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) -> None:
"""
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.0b3 (2022-04-19)
- 3.0.0b2 (2022-02-19)
- 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)