Я отправляю в телеграмму несколько фотографий в виде группы. Как я могу получить file_id все мои загруженные фотографии? Я использую webhooks, но ответ не содержит никаких данных обо всех фотографиях, просто некоторые данные о последней загруженной фотографии и media_group_id . Как я могу получить все file_id моих загруженных фотографий группы ответ:
спросил(а) 2018-05-04T20:13:00+03:00 5 лет назад
добавить комментарий
пожаловаться
Хорошо, этот способ не прост и не изящный, но он работает. Нам нужно увидеть элемент media_group_id в media_group_id — это означает, что это группа носителей. Если первая точка верна — сохраните данные об этом носителе на собственном сервере (данные должны содержать media_group_id )
Пример: [«media_group_id» => [[некоторые данные о фотографии]]]
Когда придет следующий webhook, нам нужно увидеть его media_group_id , если он тот же — ok, добавьте его в массив.
Fastest way to Get Telegram Channel/Group Name or ID?
Пример: [«media_group_id» => [[некоторые данные о фотографии], [некоторые данные о фотографии]]]
if not — ok, создать новый элемент массива:
Пример: [«media_group_id» => [[некоторые данные о фотографии]], «media_group_id2» => [[некоторые данные о фотографии]]]
Таким образом, мы получили массив, содержащий все данные о фотографиях одной (или более) группы. хм. Мне это не нравится, но как лучше?
Источник: progi.pro
Как получить все вложения по media_group_id?
Используя aiogram для написания эхо-бота возникла проблема: при использовании стандартных методов получения новых сообщений функция вызывается дважды при отправки, например, группы из двух изображений. Пример:
import asyncio from aiogram import Bot, types from aiogram.utils import executor from aiogram.dispatcher import Dispatcher token = » bot = Bot(token=token) dp = Dispatcher(bot) async def anything(msg: types.Message): await msg.answer(‘Basic reply’) dp.register_message_handler(anything, content_types=[‘photo’,’text’]) if __name__ == ‘__main__’: executor.start_polling(dp)
Я решил эту проблему следующим образом:
import asyncio from aiogram import Bot, types from aiogram.utils import executor from aiogram.dispatcher import Dispatcher TOKEN = » bot = Bot(token=TOKEN) dp = Dispatcher(bot) flag_group_id = None async def anything(msg: types.Message): global flag_group_id if msg.media_group_id and not flag_group_id: flag_group_id = msg.media_group_id await msg.answer(‘Получаю вложения’) await asyncio.sleep(1) #get attachments by media_group_id await msg.answer(‘Отправляю вложения’) else: if not msg.media_group_id: flag_group_id = None await msg.answer(msg.text or msg.caption or ‘Нет сообщения’) dp.register_message_handler(anything, content_types=[‘photo’,’text’]) if __name__ == ‘__main__’: executor.start_polling(dp)
И появилась следующая: как получить все медиа-вложения по media_group_id?
How To Get Channel & Group Id In Telegram | Latest Full Tutorial
Ответы (1 шт):
Спасибо еще раз!
from aiogram import Bot, types from aiogram.dispatcher import Dispatcher from aiogram.utils import executor import random bot = Bot(token = «») dp = Dispatcher(bot) photo_delivered: set[int] = set() async def say_thanks(user: types.User): if user.id in photo_delivered: return photo_delivered.add(user.id) await bot.send_message(user.id, «Спасибо, поехали дальше. «) async def photo_handler(message: types.Message): await say_thanks(message.from_user) photo = message.photo.pop() await photo.download(f’download/.jpg’) dp.register_message_handler(photo_handler, content_types=[‘photo’]) executor.start_polling(dp, skip_updates=True)
Источник: husl.ru
Telegram api. Получить все загруженные фотографии от media_group_id
Я отправляю своему боту-телеграмму несколько фотографий для группы. Как я могу получить file_id все мои загруженные фотографии?
Я использую webhooks, но ответ не содержит никаких данных обо всех фотографиях, только некоторые данные о последней загруженной фотографии и media_group_id , Как я могу получить все file_id фотографии моей загруженной группы
ответ:
user9742465 04 май ’18 в 17:13 2018-05-04 17:13
2018-05-04 17:13
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 >
Источник: stackru.com