如何在Pyrogram发送消息出错时切换至下一个账号循环执行?
实现Pyrogram账号错误时自动切换到下一个账号
我来帮你搞定这个需求,核心思路就是在捕获发送欢迎消息的异常后,优雅停止当前账号的客户端实例,让循环自动切换到下一个账号继续执行。下面是重构后的完整代码,我会把关键部分给你解释清楚:
from pyrogram import Client, filters from pyrogram.errors import PeerFloodError, ChatWriteForbidden list_account = ['001', '002'] def run_account(session_name): app = Client(session_name) @app.on_message(filters.chat("public_link_chat") & filters.new_chat_members) def welcome(client, message): try: # 替换成你原本的欢迎消息发送逻辑 message.reply_text(f"欢迎 {message.new_chat_members[0].first_name} 加入群聊!") except (PeerFloodError, ChatWriteForbidden) as e: print(f"账号 {session_name} 发送消息出错: {str(e)},切换到下一个账号") # 停止当前客户端,触发run()方法退出 app.stop() except Exception as e: # 捕获其他意外错误,可选处理 print(f"账号 {session_name} 发生未知错误: {str(e)}") app.stop() app.run() # 循环遍历账号列表 for account in list_account: print(f"启动账号 {account} 监听群聊...") run_account(account)
关键要点说明:
- 封装账号运行逻辑:把每个账号的客户端初始化、消息监听、启动逻辑封装到
run_account函数里,这样出错后可以直接退出当前函数,回到外层循环切换账号。 - 精准捕获异常:针对Telegram常见的发送错误(比如
PeerFloodError限流、ChatWriteForbidden无发送权限)做针对性捕获,避免误判其他不影响运行的小错误。 - 优雅停止客户端:出错时调用
app.stop(),Pyrogram的app.run()方法会在客户端停止后自动退出,这样当前账号的运行就终止了,外层循环会自动启动下一个账号。 - 循环驱动账号切换:外层的for循环会依次遍历账号列表,只要前一个账号的
run_account函数退出(不管是正常停止还是出错停止),就会自动启动下一个账号。
这样就能实现你要的“发送消息触发错误时切换到下一个账号继续执行”的需求啦。
内容的提问来源于stack exchange,提问作者Владимир
相关产品推荐
相关产品推荐

