Как получить все вложения по 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?
Ответы (1 шт):
Автор решения: Sergievsky
→ Ссылка
Решил благодаря коментарию @violet
Спасибо еще раз!
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/{str(random.randint(1,99))}.jpg')
dp.register_message_handler(photo_handler, content_types=['photo'])
executor.start_polling(dp, skip_updates=True)
