Обработка медиа
EdgeBot поддерживает все основные типы медиа Telegram. Для каждого типа есть декоратор-обработчик и метод отправки в Context.
Обработчики входящих медиа
Заголовок раздела «Обработчики входящих медиа»@bot.on_photoasync def handle_photo(ctx: Context): # ctx.photo — список объектов PhotoSize (от маленького к большому) best = ctx.photo[-1] file_id = best["file_id"] width = best.get("width", 0) height = best.get("height", 0) await ctx.send_photo(photo=file_id, caption=f"📸 {width}×{height}")@bot.on_videoasync def handle_video(ctx: Context): file_id = ctx.video["file_id"] duration = ctx.video.get("duration", 0) await ctx.send_video(video=file_id, caption=f"🎥 {duration}с")Голосовые сообщения
Заголовок раздела «Голосовые сообщения»@bot.on_voiceasync def handle_voice(ctx: Context): file_id = ctx.voice["file_id"] duration = ctx.voice.get("duration", 0) await ctx.send_voice(voice=file_id, caption=f"🎤 {duration}с")@bot.on_audioasync def handle_audio(ctx: Context): file_id = ctx.audio["file_id"] title = ctx.audio.get("title", "—") performer = ctx.audio.get("performer", "—") await ctx.send_audio( audio=file_id, caption="🎵 Аудио", title=title, performer=performer, )Стикеры
Заголовок раздела «Стикеры»@bot.on_stickerasync def handle_sticker(ctx: Context): file_id = ctx.sticker["file_id"] await ctx.send_sticker(sticker=file_id)Анимации (GIF)
Заголовок раздела «Анимации (GIF)»@bot.on_animationasync def handle_animation(ctx: Context): file_id = ctx.animation["file_id"] await ctx.send_animation(animation=file_id, caption="🎬 GIF")Документы
Заголовок раздела «Документы»@bot.on_documentasync def handle_document(ctx: Context): file_id = ctx.document["file_id"] file_name = ctx.document.get("file_name", "—") await ctx.send_document(document=file_id, caption=f"📄 {file_name}")Методы отправки
Заголовок раздела «Методы отправки»Все методы отправки медиа доступны в Context и принимают:
| Метод | Аргументы |
|---|---|
ctx.send_photo | photo, caption, reply_markup, parse_mode |
ctx.send_video | video, caption, reply_markup, parse_mode |
ctx.send_voice | voice, caption, reply_markup, parse_mode |
ctx.send_audio | audio, caption, reply_markup, parse_mode, title, performer |
ctx.send_sticker | sticker, reply_markup |
ctx.send_animation | animation, caption, reply_markup, parse_mode |
ctx.send_document | document, caption, reply_markup, parse_mode |
Первый аргумент — file_id (полученный от Telegram) или URL файла.
Отправка медиа с клавиатурой
Заголовок раздела «Отправка медиа с клавиатурой»from edgebot import InlineKeyboard
@bot.on_photoasync def photo_with_buttons(ctx: Context): kb = InlineKeyboard() kb.button("👍 Нравится", callback_data="like") kb.button("👎 Не нравится", callback_data="dislike")
file_id = ctx.photo[-1]["file_id"] await ctx.send_photo( photo=file_id, caption="Оцените фото:", reply_markup=kb.build(), )