如何在Pyrogram中同时运行my_account和my_bot客户端?
问题描述
同时运行my_account和my_bot两个Pyrogram客户端时功能异常,需求是用Client('my_account')执行任务,Client('my_bot')实现命令自动回复,现有代码无法实现预期效果:
import asyncio from pyrogram.handlers.message_handler import MessageHandler from pyrogram import Client, compose api_id = 12345678 api_hash = "1234567891a23456b7891234cde5f67f" bot_token = "1234567891:ABCD1EFG234HI5jKL6MNopqRSt7UVwXyz8A" async def dummy(client, message): await message.reply("heeloo") async def main(): apps = [ Client("my_account", api_id=api_id, api_hash=api_hash), Client("my_bot", api_id=api_id, bot_token=bot_token) ] await compose(apps) apps[0].add_handler(MessageHandler(dummy)) if __name__ == "__main__": asyncio.run(main())
问题分析与修复
你的代码有两个核心问题:
compose()是阻塞式调用,执行后会一直运行客户端直到停止,后续的add_handler代码永远不会被执行- 你把回复handler加到了账号客户端(
apps[0]),但需求是让bot客户端自动回复,应该加到apps[1]
修正后的代码如下:
import asyncio from pyrogram.handlers.message_handler import MessageHandler from pyrogram import Client, compose, filters api_id = 12345678 api_hash = "1234567891a23456b7891234cde5f67f" bot_token = "1234567891:ABCD1EFG234HI5jKL6MNopqRSt7UVwXyz8A" async def dummy(client, message): await message.reply("hello") async def main(): # 初始化客户端 account_app = Client("my_account", api_id=api_id, api_hash=api_hash) bot_app = Client("my_bot", api_id=api_id, bot_token=bot_token) # 给bot客户端添加消息处理handler,可加过滤器限制触发条件 # 比如只响应命令:filters.command("hello") bot_app.add_handler(MessageHandler(dummy, filters.all)) # 同时运行两个客户端 await compose([account_app, bot_app]) if __name__ == "__main__": asyncio.run(main())
关键说明
- handler添加时机:必须在调用
compose()前完成handler注册,否则客户端启动后不会加载后续添加的handler - 客户端对应关系:根据需求把自动回复逻辑绑定到bot客户端,账号客户端可单独处理其他任务
- 过滤器优化:建议通过
filters模块设置触发条件(比如命令、特定聊天对象、消息类型等),避免无差别回复所有消息
内容的提问来源于stack exchange,提问作者user22304060
相关产品推荐
相关产品推荐

