Search code examples
pythonbotstelegrampyrogram

Pyrogram : How to get the latest message id?


I'm currently trying to create something that needs to get the number of messages in a group/channel. The best way imo is to get the id of the latest message in this chat
As my bot will handle deleted messages, we don't care about them

I tried that :

total_messages = await Client.get_chat_history_count(chat_id)

But I get the following error :

2022-06-17 13:22:34,479 - ERROR - pyrogram.dispatcher - MainThread - Telegram says: [400 BOT_METHOD_INVALID] - The method can't be used by bots (caused by "messages.GetHistory")
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/pyrogram/dispatcher.py", line 240, in handler_worker
    await handler.callback(self.client, *args)
  File "/root/bot.py", line 117, in range
    total_mess = await teledump.get_chat_history_count(Var.idtodump)
  File "/usr/local/lib/python3.9/site-packages/pyrogram/methods/messages/get_chat_history_count.py", line 54, in get_chat_history_count
    r = await self.invoke(
  File "/usr/local/lib/python3.9/site-packages/pyrogram/methods/advanced/invoke.py", line 77, in invoke
    r = await self.session.invoke(
  File "/usr/local/lib/python3.9/site-packages/pyrogram/session/session.py", line 362, in invoke
    return await self.send(query, timeout=timeout)
  File "/usr/local/lib/python3.9/site-packages/pyrogram/session/session.py", line 332, in send
    RPCError.raise_it(result, type(data))
  File "/usr/local/lib/python3.9/site-packages/pyrogram/errors/rpc_error.py", line 91, in raise_it
    raise getattr(
pyrogram.errors.exceptions.bad_request_400.BotMethodInvalid: Telegram says: [400 BOT_METHOD_INVALID] - The method can't be used by bots (caused by "messages.GetHistory")

Any help would be appreciated !


Solution

  • To get the message ID, i encourage you to dive into Telethon and use NewMessage. This method listen to every new message and gives you all the information you need.

    https://docs.telethon.dev/en/stable/modules/events.html#telethon.events.newmessage.NewMessage

    Here is how to get started:

    https://docs.telethon.dev/en/stable/basic/installation.html

    Good luck!

    from telethon import TelegramClient, events
    chat_ids = []
    client = TelegramClient('session', api_id, api_hash)
    
    @client.on(events.NewMessage(chats=chat_ids))
    async def newMessageListener(event):
         print(event.message.id)
    

    this will give you what you need.

    EDIT:

    chat_ids is an array of the chats you want to listen for, in your case, the ID of your chat.