【问题标题】:Is there a command to send private message to all members of a group?是否有向群组的所有成员发送私人消息的命令?
【发布时间】:2019-01-13 06:38:55
【问题描述】:

有没有办法让命令使用 discord.js 向 discord 组的所有成员发送私人消息?

例如:/private TEST

此消息将通过私人聊天而不是频道聊天发送给群组中的每个人。

【问题讨论】:

  • “组”是指公会还是DM组?因为机器人不能加入 DM 组,除非他们是自我机器人,但这可能会让你被 Discord 禁止
  • 通过公会示例 "bot.on('guildMemberAdd', member => { member.send("Olá, bem-vindo ao discord do StealMC."); " prntscr.com/kfabc0 此代码发送此私下向所有进入服务器的人发送消息,我想要一个命令,通过私下向服务器的所有成员发送消息,其功能与此相同,不同之处在于我可以键入/测试每个人都收到的消息和每个人的命令服务器将私下收到此消息。抱歉,我是巴西人,我正在使用翻译器。

标签: javascript discord discord.js


【解决方案1】:

discord.js v12 的更新代码只是将缓存添加到 forEach。

client.on('message', msg => {
  if (msg.guild && msg.content.startsWith('/private')) {
    let text = msg.content.slice('/private'.length); // cuts off the /private part
    msg.guild.members.cache.forEach(member => {
      if (member.id != client.user.id && !member.user.bot) member.send(text);
    });
  }
});

【讨论】:

  • 嗨,问题是,现在有了缓存,我想我们不是所有成员,而是所有最近发送消息的人?
  • 如果需要获取所有成员并绕过缓存,请使用GuildMemberManager#fetchguild.members.fetch().then(console.log).catch(console.error);
  • 感谢您的回答,但没有任何反应:s 您测试您的代码了吗?我什么都拿不到
  • 错误 [GUILD_MEMBERS_TIMEOUT]:成员未及时到达。在 C:\Users\User\Documents\Code\discordSendMessages\node_modules\discord.js\src\managers\GuildMemberManager.js:317:16 在 Timeout._onTimeout (C:\Users\User\Documents\Code\discordSendMessages\node_modules \discord.js\src\client\BaseClient.js:83:7) 在 listOnTimeout (internal/timers.js:549:17) 在 processTimers (internal/timers.js:492:7) { [Symbol(code)] :“GUILD_MEMBERS_TIMEOUT”}
  • 代码没有问题,您需要在discord开发者门户中关注的成员。
【解决方案2】:

您可以遍历Guild.members
当您收到以/private 开头的消息时,您会使用Guild.members.forEach() 将其发送给公会的每个成员。
这是一个简单的例子:

client.on('message', msg => {
  if (msg.guild && msg.content.startsWith('/private')) {
    let text = msg.content.slice('/private'.length); // cuts off the /private part
    msg.guild.members.forEach(member => {
      if (member.id != client.user.id && !member.user.bot) member.send(text);
    });
  }
});

这只是一个基本的实现,您显然可以在命令检查中使用这个概念,或者通过添加额外的文本等来修改它。

希望这可以为您解决问题,如果您有任何其他问题,请告诉我:)

【讨论】:

  • 嘿,你能帮我一把吗?我想创建一个示例命令“/log TEST”,我希望我输入的这个文本转到我选择的频道
  • /private 替换为/log,然后使用msg.guild.channels.find('name', 'channel_name_here') 查找您的频道。如果频道存在,您可以channel.send(text)。如果您对此还有其他问题,请打开一个新问题。如果我的回答对你有用,你可以接受它来关闭线程;)
  • 你能把代码准备好发送吗?我就这个疑问做了一个话题stackoverflow.com/questions/51753661/…
  • member.id != client.user.id 是不必要的,因为 !member.user.bot 对于机器人客户端始终为 false。
猜你喜欢
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2020-09-09
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
相关资源
最近更新 更多