首页 > 解决方案 > 大规模 DM 命令不起作用(discord.js)

问题描述

这是我用来批量 dm 的代码如下:

  if (message.content === 'tdm'){

  message.guild.members.cache.forEach(member => { // Looping through each member of the guild.
    // Trying to send a message to the member.
    // This method might fail because of the member's privacy settings, so we're using .catch
    member.send("test").catch(e => console.error(`Couldn't DM member ${member.user.tag}`));
  });
}

我尝试了这个命令,并询问我的成员是否收到了机器人的消息,他们都说没有。难道我做错了什么?它在 2 周前工作。

标签: node.jsdiscorddiscord.js

解决方案


您需要更改message.guild.members.cache.forEach()(await message.guild.members.fetch()).each().

.fetch()用于代替.cache确保获取所有成员而不是仅获取缓存中的成员。

.each()使用而不是.forEach因为message.guild.members.fetch()返回 Discord 集合 ( Discord.Collection()),而不是数组。

if (message.content === 'tdm'){
  (await message.guild.members.fetch()).each(member => { // Looping through each member of the guild.
    // Trying to send a message to the member.
    // This method might fail because of the member's privacy settings, so we're using .catch
    member.send("test").catch(e => console.error(`Couldn't DM member ${member.user.tag}`));
  });
}

推荐阅读