如何用Python实现Telegram机器人监听其他聊天消息?
实现Telegram机器人监听私人聊天并转发消息
可行,但Telegram Bot账号本身无法直接读取用户的私人聊天记录,必须结合你的个人Telegram账号会话(通过Telegram Client API)监听目标聊天,再将消息转发到机器人窗口或指定对话。以下是具体实现步骤:
准备工作
- 安装依赖库:推荐使用
pyrogram(异步、易用),执行命令:pip install pyrogram tgcrypto - 获取API ID和API Hash:在Telegram官方开发者页面注册账号并创建应用,即可获取这两个参数。
- 创建Telegram Bot:通过@BotFather创建机器人,获取Bot Token。
- 获取目标聊天的
chat_id:可通过临时代码打印对话ID,或在目标聊天发送消息给机器人,通过机器人更新获取ID。
核心实现代码
from pyrogram import Client, filters from pyrogram.types import Message import asyncio # 替换为你的实际参数 API_ID = 123456 # 你的API ID API_HASH = "your_api_hash_here" # 你的API Hash BOT_TOKEN = "your_bot_token_here" # 机器人Token TARGET_CHAT_ID = 123456789 # 要监听的私人聊天ID BOT_CHAT_ID = 987654321 # 你和机器人对话的聊天ID # 初始化个人账号客户端(用于监听目标聊天) user_client = Client("my_user_session", api_id=API_ID, api_hash=API_HASH) # 初始化机器人客户端(用于发送消息到机器人窗口) bot_client = Client("my_bot_session", api_id=API_ID, api_hash=API_HASH, bot_token=BOT_TOKEN) # 监听目标聊天的新消息并转发 @user_client.on_message(filters.chat(TARGET_CHAT_ID)) async def forward_message_handler(client: Client, message: Message): # 直接转发原消息到机器人窗口 await bot_client.forward_message( chat_id=BOT_CHAT_ID, from_chat_id=TARGET_CHAT_ID, message_id=message.id ) if __name__ == "__main__": # 同时启动两个客户端 loop = asyncio.get_event_loop() loop.create_task(user_client.start()) loop.create_task(bot_client.start()) loop.run_forever()
关键注意事项
- 首次运行个人账号客户端时,需输入手机号和验证码完成登录,程序会生成会话文件
my_user_session.session,后续运行无需重复登录。 - 若不知道目标聊天的
chat_id,可临时添加以下代码,发送消息到目标聊天后控制台会打印ID:@user_client.on_message() async def print_chat_id(client: Client, message: Message): print(f"当前聊天ID: {message.chat.id}, 聊天名称: {message.chat.title or message.chat.first_name}") - 遵守Telegram使用规则,避免频繁请求或违规操作导致账号受限。
- 也可直接用个人账号客户端将消息转发到你自己的账号,无需通过机器人,只需修改
BOT_CHAT_ID为你的个人ID即可。
内容的提问来源于stack exchange,提问作者NoobMaster69
相关产品推荐
相关产品推荐

