You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyrogram机器人获取群组/频道最新消息ID及报错解决方案

问题原因

get_chat_history_count 底层封装的是Telegram原生接口messages.GetHistory,该接口不对Bot类型账号开放,仅支持普通用户身份(userbot模式)调用,因此使用Bot Token启动Pyrogram客户端时调用该方法必然返回400 BOT_METHOD_INVALID错误。

解决方案
  • 方案1:通过最新消息ID实现快速统计(匹配你的初始需求,性能最优)
    Telegram群组、频道的消息ID从1开始连续递增,你不需要调用专属用户端的计数接口,直接获取聊天的最新一条消息ID即可得到有效消息总数,完全符合你不统计已删除消息的要求。
    实现代码:
    # 先做判空,避免无消息的聊天触发属性错误
    chat = await client.get_chat(chat_id)
    if chat.last_message:
        total_messages = chat.last_message.id
    else:
        total_messages = 0
    
    该方法全程使用Bot账号有权限调用的接口,不会触发权限错误,响应速度极快。
  • 方案2:精确计数方案
    如果需要完全排除已删除消息得到100%准确的计数值,可以自行维护计数逻辑:
    1. 机器人加入群组/接入频道时,通过上述方案1拿到初始消息ID作为计数基数
    2. 注册新消息监听器,每收到一条有效新消息,对应聊天的计数值加1
    3. 注册消息删除监听器,每收到消息删除事件,对应聊天的计数值减去被删除的消息条数
      该方案全程不调用受限接口,计数精度最高。
  • 方案3:使用userbot模式调用原生计数接口
    如果必须使用get_chat_history_count方法,需要将Pyrogram客户端的登录方式从Bot Token登录改为普通Telegram账号登录(使用手机号、API ID/API Hash鉴权),也就是userbot模式。注意普通用户账号受Telegram更严格的频率限制,违规操作存在账号被封禁的风险。
避坑提示

不要尝试循环调用get_chat_history翻页遍历全量消息来计数,消息量较大的群组/频道用这种方式会快速触发Telegram接口频率限制,导致机器人被临时封禁接口权限,执行效率也极低。

内容的提问来源于stack exchange,提问作者EDM115

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:27:14