如何通过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
相关产品推荐
相关产品推荐

