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

如何在discord.js中终止循环避免刷屏 实现每位成员仅接收1条消息

刷屏问题根因

你当前的代码存在嵌套遍历逻辑错误:外层遍历机器人加入的所有服务器,内层始终固定遍历触发命令的消息所在服务器的成员列表,有多少个服务器,就会给同一个成员重复发送多少次消息,最终导致刷屏。

修复方案

根据你的需求选择对应修改方案即可实现每位成员仅收到1条消息:

方案1:仅给当前触发命令的服务器成员发消息

直接删除外层的全服务器遍历即可:

message.channel.send(message.guild.name)
message.guild.members.cache.forEach(member => {
    if (member.id != client.user.id && !member.user.bot) {
        member.send(`testing`).catch(e => console.error(`Couldn't DM member ${member.user.tag}`));
    }
});

方案2:给机器人加入的所有服务器的成员发消息

将内层遍历的message.guild改为外层遍历到的当前服务器即可:

client.guilds.cache.forEach(guild => {
    message.channel.send(guild.name)
    guild.members.cache.forEach(member => {
        if (member.id != client.user.id && !member.user.bot) {
            member.send(`testing`).catch(e => console.error(`Couldn't DM member ${member.user.tag}`));
        }
    });
});

额外防重复优化

可增加去重集合彻底避免极端场景下的重复发送:

const sentMemberIds = new Set()
client.guilds.cache.forEach(guild => {
    message.channel.send(guild.name)
    guild.members.cache.forEach(member => {
        if (member.id != client.user.id && !member.user.bot && !sentMemberIds.has(member.id)) {
            sentMemberIds.add(member.id)
            member.send(`testing`).catch(e => console.error(`Couldn't DM member ${member.user.tag}`));
        }
    });
});

注意:Discord平台对批量主动私信用户的行为有严格风控限制,高频发送容易导致账号被限制功能甚至封禁,建议仅用于必要的通知场景。

内容的提问来源于stack exchange,提问作者Mr.Unknown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:57:03