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

如何通过python-telegram-bot获取机器人管理/参与的所有聊天?

获取Telegram机器人参与的所有聊天(python-telegram-bot实现)

首先明确:python-telegram-bot 没有直接提供获取机器人所有参与聊天的内置方法,本质是因为 Telegram 官方 Bot API 本身就不支持主动拉取机器人加入的全部聊天列表——Telegram 不会主动向机器人推送所有历史或当前参与的聊天信息,只能通过运行过程中的事件来记录。

可行解决方案

1. 主动记录消息触发的聊天

在机器人的消息处理逻辑中,每次收到消息时提取当前聊天对象,存入集合(避免重复),逐步积累所有有交互的聊天:

from telegram import Update
from telegram.ext import ApplicationBuilder, MessageHandler, filters

# 用集合存储唯一的聊天ID,防止重复
active_chats = set()

async def track_chats(update: Update, context):
    chat = update.effective_chat
    active_chats.add(chat.id)
    # 这里可以添加你的消息处理逻辑

if __name__ == "__main__":
    app = ApplicationBuilder().token("你的机器人Token").build()
    # 监听所有类型的消息,用于记录聊天
    app.add_handler(MessageHandler(filters.ALL, track_chats))
    app.run_polling()

之后可以遍历 active_chats,通过 context.bot.get_chat(chat_id) 获取完整的聊天对象信息。

2. 监听机器人被加入聊天的通知

通过 ChatMemberHandler 监听机器人的成员状态变化,当机器人被邀请加入新聊天时,直接记录该聊天ID:

from telegram import Update, ChatMemberUpdated
from telegram.ext import ChatMemberHandler

async def handle_new_chat(update: Update, context):
    chat_member_update = update.chat_member
    # 判断是否是机器人自身的状态变化
    if chat_member_update.new_chat_member.user.id == context.bot.id:
        # 机器人被加入聊天,记录ID
        active_chats.add(chat_member_update.chat.id)

# 将处理器添加到应用
app.add_handler(ChatMemberHandler(handle_new_chat, ChatMemberHandler.CHAT_MEMBER))

注意事项

  • 以上方法只能记录机器人启动后接触到的聊天,历史聊天无法回溯获取,因为 Telegram Bot API 不支持该功能。
  • 可以将聊天ID持久化到文件(如JSON)或数据库中,避免机器人重启后丢失记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:03:03