You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,提问作者Владимир

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:30:03