Telegram api. Получить все загруженные фотографии от media_group_id

Я отправляю своему боту-телеграмму несколько фотографий для группы. Как я могу получить file_id все мои загруженные фотографии?

Я использую webhooks, но ответ не содержит никаких данных обо всех фотографиях, только некоторые данные о последней загруженной фотографии и media_group_id, Как я могу получить все file_idфотографии моей загруженной группы

ответ:

3 ответа

Telegram Bot API не предоставляет вашему веб-хук никакой достоверной информации о порядке каждого элемента в медиа-группе. https://core.telegram.org/bots/api

Предложения:

  1. Если бот находится в приватном чате, сохраните входящие file_id против их media_group_id. Всякий раз, когдаmedia_group_idизменения у вас будет все, что вам нужно для использования. Вовлеките пользователя каким-либо другим способом, чтобы вы могли быстро определитьmedia_group_id измениться и быстро отреагировать на эту обработку.

  2. Если бот находится в групповом чате, сохраните входящие 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.

Хорошо, этот способ не простой и не элегантный, но он работает.

  1. Нам нужно увидеть в ответе webhook media_group_id Элемент - это означает, что это группа СМИ.
  2. Если первый пункт верен - сохранить данные об этом носителе на собственном сервере (данные должны содержать media_group_id)

пример: ["media_group_id" => [[некоторые данные о фотографии]]]

  1. Когда придет следующий webhook, нам нужно увидеть его media_group_id, если это то же самое - хорошо, добавьте его в массив...

пример: ["media_group_id" => [[некоторые данные о фотографии], [некоторые данные о фотографии]]]

если нет - хорошо, создайте новый элемент массива:

пример: ["media_group_id" => [[некоторые данные о фотографии]], "media_group_id2" => [[некоторые данные о фотографии]]]

  1. Итак, мы получили массив, который содержит все данные о фотографиях одной (или более) группы.

хммм... мне не нравится этот путь, но как сделать лучше?

Другие вопросы по тегам