3

How can I make a bot to pretend that it is typing a message?

The following text appears in the chat when the bot pretend to type:

enter image description here

I use the python aiogram framework but a suggestion for the native Telegram API would be also helpful.

Viktor Be
  • 658
  • 1
  • 11
  • 25

2 Answers2

11

I seriously suggest using the python-telegram-bot library which has an extensive Wiki. The solution for what you want is described in code snippets.

You can manually send the action:

bot.send_chat_action(chat_id=chat_id, action=telegram.ChatAction.TYPING)

Or create a decorator which can then be used on any function you wish to show that action on whilst processing:

from functools import wraps
from telegram import (ChatAction)

def send_typing_action(func):
    """Sends typing action while processing func command."""

    @wraps(func)
    def command_func(update, context, *args, **kwargs):
        context.bot.send_chat_action(chat_id=update.effective_message.chat_id, action=ChatAction.TYPING)
        return func(update, context,  *args, **kwargs)

    return command_func

@send_typing_action
def my_handler(update, context):
    pass # Will send 'typing' action while processing the request.
gotnull
  • 26,454
  • 22
  • 137
  • 203
v25
  • 7,096
  • 2
  • 20
  • 36
  • 2
    But, "typing" status goes away after few second even if processing the request isn't finished! How to get "typing" for longer time? – Yeasin Mollik May 13 '22 at 05:20
  • Yeah, it looks like the `/sendChatAction` endpoint only lasts for 5 seconds and then stays off until the bot sends a response. In other words, making additional requests doesn't turn the typing indicator back on afaict. – danneu Mar 14 '23 at 19:49
0

For aiogram module you can use types.Message built in method answer_chat_action.

from aiogram import types

async def answer(message: types.Message):
    await message.answer_chat_action("typing")
    await message.answer("Hi!")
    

Here is another action types such as upload_photo, record_video_note and so on. And here is aiogram documentation.

Radikulit
  • 48
  • 1
  • 7