Перейти к основному содержимому

aiogram

Async-библиотека для Python 3.9+. Самая популярная для современных Python-ботов.

Установка

pip install aiogram

Подключение к Telefon

import asyncio, os
from aiogram import Bot, Dispatcher
from aiogram.client.session.aiohttp import AiohttpSession
from aiogram.client.telegram import TelegramAPIServer

session = AiohttpSession(
api=TelegramAPIServer.from_base('https://api.telefon.chat')
)
bot = Bot(token=os.environ['BOT_TOKEN'], session=session)
dp = Dispatcher()

# ... ваш код ...

asyncio.run(dp.start_polling(bot))

TelegramAPIServer — внутренний класс библиотеки aiogram, параметризующий базовый URL. На наш сервис никак не влияет.

Типичные паттерны

Хендлеры

from aiogram import F
from aiogram.filters import Command, CommandStart
from aiogram.types import Message

@dp.message(CommandStart())
async def start(m: Message):
await m.answer('Привет!')

@dp.message(Command('help'))
async def help(m: Message):
await m.answer('Помощь')

@dp.message(F.text)
async def text(m: Message):
await m.reply(f'Эхо: {m.text}')

Inline keyboard

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

kb = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text='✅ Да', callback_data='yes'),
InlineKeyboardButton(text='❌ Нет', callback_data='no')],
])
await m.answer('Выбери:', reply_markup=kb)

@dp.callback_query(F.data == 'yes')
async def on_yes(cb):
await cb.answer('Принято!')
await cb.message.edit_text('Вы выбрали ДА')

Состояния (FSM)

from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup

class Form(StatesGroup):
name = State()
age = State()

@dp.message(Command('register'))
async def start_form(m: Message, state: FSMContext):
await state.set_state(Form.name)
await m.answer('Как тебя зовут?')

@dp.message(Form.name)
async def get_name(m: Message, state: FSMContext):
await state.update_data(name=m.text)
await state.set_state(Form.age)
await m.answer('Сколько лет?')

@dp.message(Form.age)
async def get_age(m: Message, state: FSMContext):
data = await state.get_data()
await m.answer(f"{data['name']}, {m.text} лет — записал!")
await state.clear()

Документация

aiogram.dev — официальные доки, примеры, типы. Все методы Bot API доступны как методы bot.send_message(...) / bot.send_photo(...) и т.д.

Совет

aiogram 3.x — рекомендуемая версия. Старая 2.x всё ещё работает, но устарела.