Апдейты, приходящие Телеграм-ботам
Что такое апдейты
Апдейты (они же updates, то есть обновления) — это события, о которых сервер уведомляет бота. Это может быть апдейт о входящем сообщении, апдейт о вступлении участника в группу и так далее.
@dp.message(F.photo & (F.chat.type == ChatType.PRIVATE))
async def on_private_photo(message: Message):
photo = message.photo[-1] # highest resolution
file_path = f"downloads/photo_{photo.file_id}.jpg"
await bot.download(photo, file_path)
await message.answer('Got your photo! Saved to ' + file_path)
Главная сложность разработки ботов
Апдейты — почти единственный способ для вашей программы узнать что-то о чатах и сообщениях.
Например, ваша программа не может спросить у Телеграма, каким было последнее сообщение от пользователя или в каких чатах состоит бот. Телеграм даёт такую информацию только вместе с апдейтами: например, когда пользователь присылает сообщение или бота добавляют в группу.
Если пользователь отправил боту сообщение, и вам нужно будет использовать текст сообщения позже, сохраните его.
Если вам понадобится иметь список пользователей бота, полученных сообщений и так далее — вам следует хранить эти данные. Скорее всего, для этого будет нужна база данных.
Если вы потеряете эту информацию, больше вы никак её не получите.
Telegram API
Некоторую информацию всё-таки можно запросить, используя Telegram API в обход Bot API: например, так можно получить сообщение по ID или полную информацию о пользователе. Полный список можно посмотреть в таблице.
Получение апдейтов несколько раз
Ограничения Bot API не позволяют получать одни и те же апдейты несколько раз. Если вы получили апдейт в Bot API, то второй раз вы его уже не получите.
В Telegram API такого ограничения нет. Всё потому, что Telegram API в основном предназначен для приложений: пользователь может пользоваться мессенджером через несколько приложений, каждое из которых должен получать новые сообщения. То же работает и для ботов. Если запустить несколько программ бота на Telegram API, каждая из них будет получать все апдейты.
TIP
Кроме того, в Telegram API есть возможность получить некоторые старые апдейты. Это полезно, например, чтобы получить список пользователей бота, если он не сохранялся или база данных была утеряна. Документация