Aiogram Есть ли возможность вывода текста ботом через симуляцию печатания человеком?
Чуть более нормальная формулировка: Нужно, что бы у пользователя сверху появлялась надпись о том, что бот печатает, а через какое-то время (секунды 3 например) всё тому же пользователю приходило сообщение. Такое есть в aiogram ? Или можно это как-то другим способом реализовать, но что-бы главной библиотекой оставался aiogram ?
Ответы (3 шт):
Автор решения: MyZik
→ Ссылка
Да, это реализуется с помощью метода API sendChatAction. В aiogram выглядеть это будет так:
import asyncio
from aiogram.types import ChatActions
...
await bot.send_chat_action(message.chat.id, ChatActions.TYPING)
await asyncio.sleep(3)
await bot.send_message(message.chat.id, "Test message")
Автор решения: Developer Tony
→ Ссылка
Да, это реализуется, но для версии aiogram 3 и выше выглядеть это будет так ?
await bot.send_chat_action(chat_id=msg.from_user.id, action="typing")
Автор решения: Konard
→ Ссылка
Если нужно чтобы это было дольше 5 секунд, то нужно делать вот так:
async def keep_typing_while(chat_id, func):
cancel = { 'cancel': False }
async def keep_typing():
while not cancel['cancel']:
await bot.send_chat_action(chat_id, 'typing')
await asyncio.sleep(5)
async def executor():
await func()
cancel['cancel'] = True
await asyncio.gather(
keep_typing(),
executor(),
)
А вызывать вот так:
answer = {}
async def openai_caller():
local_answer = await get_openai_completion(user_context.get_messages())
answer['role'] = local_answer['role']
answer['content'] = local_answer['content']
await keep_typing_while(message.chat.id, openai_caller)