Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - about aiogram
Added 14 Jul 2024 🌐 UK

about aiogram

@about_aiogram
Number of subscribers: 187
Photos: 2
Videos: 1
Links: 27
Description:
✏️ Про розробку телеграм ботів з використанням aiogram та інших бібліотек і технологій 🔍 Навігатор (inline mode) - @aiotipbot 🙃 Канал ведуть @Shaonis + @wakaree #aiogram #bots #python
Source

about aiogram | Chat Actions #цікавеІнколи може знадобитися виконати тривалу задачу, н...

Telegram community logo - about aiogram about aiogram @about_aiogram
872 Views/Reach 2023-11-28 21:56 Message №31
💬 Chat Actions #цікавеІнколи може знадобитися виконати тривалу задачу, наприклад, надіслати файл великого розміру або дочекатися відповіді від API, щоб надіслати респонс користувачу. Щоб під час її виконання бот здавався більш "живим", а не просто наче підвисав у користувача — хорошою ідеєю буде надсилати "дію в чаті". 👀 Що ж це таке?

Нам відомо, що коли юзер щось друкує, надсилає фото тощо — ми бачимо відповідний статус під його іменем. Це дає зрозуміти, що співрозмовник не просто проігнорував твоє повідомлення, а збирається відповісти. Так само і з ботом — щоб показати користувачу, що на його стороні щось відбувається, ми використовуєм аналогічний метод sendChatAction. Даний метод буде відображати вказаний розробником статус до п'яти секунд.

🤔 А якщо на виконання задачі мені потрібно більше, ніж п'ять секунд?

Це також передбачено фреймворком. Він забезпечує утиліту ChatActionSender. Простий приклад:@router.message(Command("generate_photo"))async def generate_photo(message: Message, bot: Bot) -> Any: async with ChatActionSender.upload_photo(bot=bot, chat_id=message.chat.id): # Do something for a long time to get result result = await generate_photo(...) await message.answer_photo(photo=result)
⚒️ Є також спосіб забезпечити використовування chat action у всіх обробниках.

Спочатку потрібно зареєструвати ChatActionMiddleware (що таке мідлварі?) на подію message:<router або dispatcher>.message.middleware(ChatActionMiddleware())
Тепер замість створення ChatActionSender у обробникуgenerate_photo ми можемо повісити мітку на обробник:@router.message(Command("generate_photo"))@flags.chat_action(ChatAction. UPLOAD_PHOTO)async def generate_photo(message: Message) -> Any: # Do something for a long time to get result result = await generate_photo(...) await message.answer_photo(photo=result)
За потребою можна змінювати й конфігурацію ChatActionSender, а не тільки тип дії, що надсилаємо:@router.message(Command("generate_photo"))@flags.chat_action(initial_sleep=2, action=ChatAction. UPLOAD_PHOTO, interval=3)async def generate_photo(message: Message) -> Any: # Do something for a long time to get result result = await generate_photo(...) await message.answer_photo(photo=result)
📚 Не полінися завітати в документацію!