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 всё ещё работает, но устарела.