Telegram api. Получить все загруженные фотографии от media_group_id
Я отправляю своему боту-телеграмму несколько фотографий для группы. Как я могу получить file_id
все мои загруженные фотографии?
Я использую webhooks, но ответ не содержит никаких данных обо всех фотографиях, только некоторые данные о последней загруженной фотографии и media_group_id
, Как я могу получить все file_id
фотографии моей загруженной группы
3 ответа
Telegram Bot API не предоставляет вашему веб-хук никакой достоверной информации о порядке каждого элемента в медиа-группе. https://core.telegram.org/bots/api
Предложения:
Если бот находится в приватном чате, сохраните входящие
file_id
против ихmedia_group_id
. Всякий раз, когдаmedia_group_id
изменения у вас будет все, что вам нужно для использования. Вовлеките пользователя каким-либо другим способом, чтобы вы могли быстро определитьmedia_group_id
измениться и быстро отреагировать на эту обработку.Если бот находится в групповом чате, сохраните входящие
file_id
против пользователейid
так же какmedia_group_id
и аналогичным образом отслеживать изменения вmedia_group_id
и пользовательid
принять участие.
Когда решение становится слишком сложным для меня, я предпочитаю вернуться к основной причине моей потребности и, возможно, обнаружить, что мне не нужно делать то, что API не позволяет, например "Получить все загруженные фотографии по media_group_id
". Может быть, я смогу обработать их по отдельности в потоке обновлений.
Совет: если у медиа-группы есть caption
и вы заботитесь только о первом медиа-элементе в группе, а затем отслеживаете media_group_id
а также caption
входящего сообщения должно быть достаточно.
if(message.caption != null && message.media_group_id != null){
// first item in new group received
}
В Pyrogram мы можем использовать функцию get_media_group, https://docs.pyrogram.org/api/methods/get_media_group.html#pyrogram.Client.get_media_group . на мой взгляд, это намного лучше, чем использование BOT API.
Хорошо, этот способ не простой и не элегантный, но он работает.
- Нам нужно увидеть в ответе webhook
media_group_id
Элемент - это означает, что это группа СМИ. - Если первый пункт верен - сохранить данные об этом носителе на собственном сервере (данные должны содержать
media_group_id
)
пример: ["media_group_id" => [[некоторые данные о фотографии]]]
- Когда придет следующий webhook, нам нужно увидеть его
media_group_id
, если это то же самое - хорошо, добавьте его в массив...
пример: ["media_group_id" => [[некоторые данные о фотографии], [некоторые данные о фотографии]]]
если нет - хорошо, создайте новый элемент массива:
пример: ["media_group_id" => [[некоторые данные о фотографии]], "media_group_id2" => [[некоторые данные о фотографии]]]
- Итак, мы получили массив, который содержит все данные о фотографиях одной (или более) группы.
хммм... мне не нравится этот путь, но как сделать лучше?