from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import InputMediaPhoto, InputMediaVideo, InputMediaDocument, ContentType
import asyncio
# Замените на свой токен
API_TOKEN = 'YOUR_BOT_TOKEN'
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
# Хранилище для временного накопления сообщений
user_data = {}
async def send_collected_media(chat_id):
data = user_data.get(chat_id)
if not data:
return
text = data.get("text")
media = data.get("media", [])
if text:
if media:
media[0].caption = text
else:
await bot.send_message(chat_id=chat_id, text=text)
if media:
await bot.send_media_group(chat_id=chat_id, media=media)
# Очистка хранилища после отправки
user_data[chat_id] = {}
async def add_to_group(message: types.Message, media_type, media):
chat_id = message.chat.id
if chat_id not in user_data:
user_data[chat_id] = {}
if "timer" in user_data[chat_id]:
user_data[chat_id]["timer"].cancel()
if media_type == "text":
user_data[chat_id]["text"] = message.text
else:
if "media" not in user_data[chat_id]:
user_data[chat_id]["media"] = []
user_data[chat_id]["media"].append(media)
# Установка таймера на отправку через 1 секунду
user_data[chat_id]["timer"] = asyncio.create_task(asyncio.sleep(1))
user_data[chat_id]["timer"].add_done_callback(lambda _: asyncio.create_task(send_collected_media(chat_id)))
@dp.message_handler(content_types=[ContentType.TEXT])
async def handle_text(message: types.Message):
await add_to_group(message, "text", None)
@dp.message_handler(content_types=[ContentType.PHOTO])
async def handle_photo(message: types.Message):
photo = message.photo[-1]
media = InputMediaPhoto(media=photo.file_id)
await add_to_group(message, "photo", media)
@dp.message_handler(content_types=[
ContentType.VIDEO ])
async def handle_video(message: types.Message):
video =
message.video media = InputMediaVideo(media=video.file_id)
await add_to_group(message, "video", media)
@dp.message_handler(content_types=[ContentType.DOCUMENT])
async def handle_document(message: types.Message):
document = message.document
media = InputMediaDocument(media=document.file_id)
await add_to_group(message, "document", media)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Как это работает:
- Когда пользователь отправляет сообщения, они накапливаются в user_data.
- После каждого сообщения запускается таймер на 1 секунду.
- Если в течение этой секунды приходит новое сообщение, таймер сбрасывается.
- Если новых сообщений нет, через 1 секунду срабатывает таймер и вызывается функция send_collected_media, которая отправляет все накопленные сообщения.
Помогите пж, не могу найти нужную информацию