如何向每个公会的每个频道发送消息?

时间:2020-02-08 23:58:23

标签: discord discord.js

类似于this question,但是我希望能够将其发送到它可以访问的每个频道! 在通过ID和发出的命令验证我自己的身份后,我正在使用此代码:

      const listedChannels = [];
      msg.guild.channels.forEach(channel => {
      //get all channels
      client.channels.get(channel.id).send("you like bred? (message) ");
      //send a message to every channel in this guild
      });

但是我收到.send不是函数的错误...

有人告诉我在获取频道ID后要使用.send

3 个答案:

答案 0 :(得分:0)

如果要遍历所有频道,则需要将您的内容发送到已经从msg.guild.channels.forEach(channel => {//code})获得的频道。

.forEach块中的内容替换为;

channel.send("You like bred? (message)");

尽管这会发送You like bred? (message)

如果您想找回答案,也许看看this answer,它解释了如何通过对不和谐消息的反应来收集响应。

答案 1 :(得分:0)

您可以为此使用client.channels。检查频道类型是否为公会文本频道,然后尝试发送消息。

client.channels.forEach(channel => {
    if(channel.type === 'text') channel.send('MSG').catch(console.error)
})

答案 2 :(得分:0)

以下说明仅适用于v11(稳定版)。

Client.channels是您的机器人正在观看的Collection中的Channel。您只能将消息发送到文本通道,并且此收藏集还将包括DM通道。因此,我们可以使用Collection.filter()来检索行会中仅文本通道的新Collection。最后,您可以遍历通道并在每个通道上调用TextChannel.send()。因为您要处理Promise,所以建议使用Promise.all() / Collection.map()组合(请参阅超链接的文档)

例如...

// assuming "client" is your Discord Bot

const channels = client.channels.filter(c => c.guild && c.type === 'text');
Promise.all(channels.map(c => c.send('Hello, world!')))
  .then(msgs => console.log(`${msgs.length} successfully sent.`))
  .catch(console.error);