Индикатор активности в чате⚓︎
Пока бот обрабатывает запрос, можно показывать в чате его статус: например, что он набирает сообщение.
Разовое событие активности⚓︎
Используйте bot.send_chat_activity(...), чтобы отправить одно событие активности:
from trueconf.enums import ChatActivity
await bot.send_chat_activity(
chat_id="chat_id",
activity_type=ChatActivity.TYPING,
)
Доступные типы активности перечислены в enum ChatActivity:
ChatActivity.TYPING— бот набирает текст;ChatActivity.CHOOSING_STICKER— бот выбирает стикер;ChatActivity.UPLOADING_FILE— бот загружает файл.
Индикатор истекает
Сервер показывает индикатор лишь короткое время. Для длительных операций отправку нужно повторять — используйте ChatActivitySender, описанный ниже.
Удержание индикатора видимым⚓︎
ChatActivitySender — это асинхронный контекст-менеджер, который периодически переотправляет активность в фоне, пока выполняется операция:
from trueconf.utils.chat_activity import ChatActivitySender
async with ChatActivitySender.typing(bot=bot, chat_id=chat_id):
result = await generate_text_answer()
Сендер переотправляет активность с темпом, который возвращает сервер: каждый ответ содержит retryAfter в миллисекундах, и сендер ждёт не меньше этого времени перед следующей отправкой.
ChatActivitySender также принимает универсальный аргумент activity, поэтому можно использовать любое значение из enum ChatActivity: