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

Discord.js v12:如何实现机器人给服务器所有成员发私信?

如何用Discord.js v12给服务器所有成员发送私信

嘿,我来帮你搞定这个需求!用Discord.js v12实现给服务器所有成员发私信其实不难,但有几个关键细节要注意,不然机器人可能触发限流甚至被限制功能。下面一步步给你讲清楚:

首先确认权限

机器人需要在目标服务器拥有SEND_MESSAGES和VIEW_CHANNEL权限,另外要知道:无法给关闭了私信的用户发消息,这种情况会触发错误,咱们后面会处理。

核心实现代码

我直接给你写好可复用的函数,还有调用示例,你可以直接套进你的机器人代码里:

// 定义一个异步函数,负责给指定服务器的所有成员发私信
async function sendDMToAllMembers(guild, messageContent) {
  try {
    // 强制从Discord API拉取所有成员(避免缓存不全)
    const members = await guild.members.fetch({ force: true });
    
    let successCount = 0;
    let failCount = 0;

    // 遍历所有成员
    for (const [_, member] of members) {
      // 跳过所有机器人,没必要给机器人发私信
      if (member.user.bot) continue;

      try {
        // 发送私信
        await member.send(messageContent);
        successCount++;
        console.log(`✅ 成功给 ${member.user.tag} 发送私信`);
      } catch (error) {
        failCount++;
        console.error(`❌ 无法给 ${member.user.tag} 发送私信:`, error.message);
      }
      // 关键!加1秒延迟,避免触发Discord的速率限制
      await new Promise(resolve => setTimeout(resolve, 1000));
    }

    console.log(`\n📊 发送完成:成功 ${successCount} 条,失败 ${failCount} 条`);
  } catch (error) {
    console.error('❌ 获取成员列表失败:', error.message);
  }
}

// 示例:通过命令触发发送(比如输入!sendall)
client.on('message', async message => {
  // 只响应指定命令
  if (message.content.trim() === '!sendall') {
    // 检查命令发起者是否是管理员(避免随便谁都能触发)
    if (!message.member.hasPermission('ADMINISTRATOR')) {
      return message.reply('抱歉,你没有权限执行这个命令!');
    }
    // 调用发送函数,这里替换成你要发的内容
    await sendDMToAllMembers(message.guild, '这是机器人给你发送的批量私信内容哦!');
    message.reply('开始给所有成员发送私信啦,请耐心等待~');
  }
});

必须注意的几个点

  • 速率限制:Discord对API调用有严格限制,所以一定要加延迟(上面的1秒是比较保守的设置,如果你服务器成员很多,也可以适当调整,但别低于500毫秒),不然机器人会被暂时封禁发送消息的权限。
  • 错误处理:每个发送操作都加了try/catch,就算某个用户无法接收私信,也不会影响整个批量发送的流程。
  • 缓存问题:用guild.members.fetch({ force: true })强制从API拉取成员,避免缓存里只有部分在线成员的情况。
  • 跳过机器人:代码里跳过了所有机器人账号,节省资源的同时也避免不必要的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:02:34