Какие библиотеки используются для работы с Telegram ботами на Python?
Что проверяют
Различаете ли вы Bot API и MTProto и понимаете ли, как устроен асинхронный бот. Следом спрашивают, polling или webhook вы бы выбрали в продакшене и где хранить состояние диалога.
Как отвечать
Сначала разведите протоколы. Bot API это HTTP-интерфейс для ботов с токеном от BotFather, MTProto это протокол клиентов Telegram, через него работают и пользовательские аккаунты.
Для Bot API:
aiogram: асинхронный фреймворк наasyncio, в третьей версии роутеры, middleware, фильтрыFи конечные автоматы (FSM) для многошаговых диалогов;python-telegram-bot: с двадцатой версии полностью асинхронный, строится вокругApplication, подробная документация;pyTelegramBotAPI(telebot): простой синхронный API для небольших ботов, есть и асинхронный вариант.
Для MTProto:
Telethon: асинхронный клиент, работает и от имени пользователя, и от имени бота. Нужен для чтения каналов, юзерботов и файлов сверх лимитов Bot API;Pyrogram: похожая библиотека, но у оригинального проекта давно нет релизов, поэтому в новых проектах чаще берутTelethon.
Дальше продакшен. Обновления приходят через long polling (getUpdates) или на webhook, одновременно оба режима не работают. Webhook поднимают на aiohttp или FastAPI за прокси с HTTPS. Состояние FSM в памяти теряется при рестарте, поэтому в aiogram берут RedisStorage. Лимиты по документации Telegram: около 30 сообщений в секунду на бота и не больше одного в секунду в один чат, при превышении приходит 429 с retry_after. Через облачный Bot API бот скачивает файлы до 20 МБ и отправляет до 50 МБ.
Где спотыкаются
Вызывают синхронный requests или блокирующий драйвер базы внутри асинхронного хендлера. Весь бот замирает, пока идёт один запрос.
Запускают два экземпляра с polling. Telegram отвечает 409 Conflict, и обновления достаются то одному, то другому процессу.
Путают инструменты: пытаются через Bot API читать чужой канал или через aiogram войти под пользователем. Это задача MTProto-клиента.