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

如何在discord.py中逐个运行多个Discord令牌 发送X条消息后切换下一个

Discord多令牌循环发送消息后主动终止客户端解决方案

核心原理

discord.py的client.run()是阻塞式调用,要在完成发送任务后退出阻塞继续下一个令牌的处理,只需要在任务完成后主动调用client.close()方法断开当前客户端连接即可。

实现步骤

  • 每个令牌单独初始化客户端实例,避免不同令牌之间的状态污染
  • 设置计数变量统计单令牌已发送消息数量,达到预设阈值X后终止发送
  • 发送任务完成后主动调用await client.close()退出当前客户端的阻塞运行
  • 补充异常捕获逻辑,避免单令牌运行出错导致整个循环终止

可运行示例代码

import discord
from discord import Intents

# 自定义配置
SINGLE_TOKEN_SEND_LIMIT = X  # 替换为单令牌需要发送的目标用户数X
tokens = ["token1", "token2", "token3", "...", "token100"]  # 替换为你的实际令牌列表
target_user_ids = [123456789, 987654321, "..."]  # 替换为你要发送消息的用户ID列表

for idx, token in enumerate(tokens):
    current_sent = 0
    # 每个令牌重新初始化客户端
    intents = Intents.default()
    # 根据实际需要开启对应权限,比如获取消息、获取用户等
    intents.members = True
    client = discord.Client(intents=intents)

    @client.event
    async def on_ready():
        global current_sent
        print(f"当前使用第{idx+1}个令牌,已登录账号:{client.user}")
        for user_id in target_user_ids:
            if current_sent >= SINGLE_TOKEN_SEND_LIMIT:
                break
            try:
                user = await client.fetch_user(user_id)
                await user.send("你需要发送的消息内容")
                current_sent += 1
                print(f"已发送成功:{current_sent}/{SINGLE_TOKEN_SEND_LIMIT}")
            except Exception as e:
                print(f"向用户{user_id}发送失败:{str(e)}")
        # 任务完成,关闭当前客户端
        await client.close()
    
    try:
        client.run(token)
    except Exception as e:
        print(f"第{idx+1}个令牌运行异常,跳过:{str(e)}")
    # 运行到此处说明当前令牌处理完毕,自动进入下一个令牌循环

注意事项:

  • 不要复用同一个客户端实例处理多个令牌,否则会出现会话冲突、状态异常问题
  • 控制发送频率,避免触发Discord反垃圾机制导致令牌被封禁
  • 可以根据需求调整异常处理逻辑,比如统计发送失败的用户后续重试

内容的提问来源于stack exchange,提问作者Raskolnikov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:09:02