拥有Pyrogram会话文件与账号手机号,如何接收Telegram机器人验证码
利用Pyrogram接收多账号的Telegram机器人验证码
核心逻辑
你已有的会话文件(.session)对应已完成登录验证的Telegram账号,只需通过Pyrogram加载这些会话,监听目标机器人的消息并提取验证码即可。
分步实现
1. 配置多账号会话
先整理你的账号信息,每个账号对应一个会话文件、API ID和API Hash(所有账号可共用同一套API信息,也可单独配置):
from pyrogram import Client import asyncio from pyrogram.handlers import MessageHandler # 替换为你的账号配置 accounts = [ {"session_file": "account_1.session", "api_id": 123456, "api_hash": "your_api_hash_here"}, {"session_file": "account_2.session", "api_id": 123456, "api_hash": "your_api_hash_here"}, # 添加更多账号... ]
2. 编写验证码提取与消息监听
实现消息处理器,过滤目标机器人的消息并提取验证码(根据机器人的消息格式调整提取逻辑):
def get_verification_code(text): # 示例:提取消息中的4-6位数字验证码,根据实际格式修改正则 import re code_match = re.search(r'\b\d{4,6}\b', text) return code_match.group() if code_match else None async def listen_for_bot_messages(client, message): # 替换为目标机器人的用户名(不带@) target_bot = "your_verification_bot" if message.from_user and message.from_user.username == target_bot: verification_code = get_verification_code(message.text) if verification_code: # 这里可以将验证码写入文件、数据库,或直接输出 print(f"账号 [{client.name}] 收到验证码: {verification_code}")
3. 启动多会话监听
加载所有会话文件,注册消息处理器,异步启动所有客户端并保持运行:
async def main(): clients = [] for acc in accounts: # 加载会话文件,无需再次输入手机号/验证码(会话有效时) client = Client(acc["session_file"], acc["api_id"], acc["api_hash"]) # 注册消息处理器 client.add_handler(MessageHandler(listen_for_bot_messages)) clients.append(client) # 异步启动所有客户端 await asyncio.gather(*[client.start() for client in clients]) # 保持程序运行,直到手动终止 await asyncio.Event().wait() if __name__ == "__main__": asyncio.run(main())
重要注意事项
- 会话有效性:如果会话文件过期,启动时会触发重新登录,此时需要用对应手机号接收验证码完成登录,生成新的有效会话文件。
- API信息获取:API ID和API Hash可在Telegram官方开发者平台申请,每个账号需使用正确的API信息。
- 机器人对话前置:确保目标账号已经和机器人发起过对话(Telegram默认不会推送未交互过的机器人消息)。
- 格式适配:
get_verification_code函数的正则表达式需匹配机器人发送的验证码格式,比如机器人发送“验证码:1234”,则正则可调整为r'验证码:(\d{4})'。
问题排查
- 客户端启动失败:检查会话文件路径是否正确,API ID/Hash是否匹配,账号是否被限制登录。
- 收不到机器人消息:确认机器人未被账号拉黑,且账号与机器人有过至少一次对话记录。
内容的提问来源于stack exchange,提问作者reza
相关产品推荐
相关产品推荐

