Iniciar sesión Registro
Anuncios
Tu espacio publicitario
Reserva este slot exclusivo para el periodo elegido.
Comprar publicidad →
Logotipo de la comunidad de telegram - about aiogram
Añadido 14 jul. 2024 🌐 UK

about aiogram

@about_aiogram
Número de suscriptores: 190
Fotos: 2
Videos: 1
Enlaces: 27
Descripción:
✏️ Про розробку телеграм ботів з використанням aiogram та інших бібліотек і технологій 🔍 Навігатор (inline mode) - @aiotipbot 🙃 Канал ведуть @Shaonis + @wakaree #aiogram #bots #python
Fuente

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

Logotipo de la comunidad de telegram - about aiogram about aiogram @about_aiogram
874 Vistas/Alcance 2023-11-28 21:56 Mensaje №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)

📚 Не полінися завітати в документацію!