如何从整个公会中获取消息

时间:2018-08-31 15:08:21

标签: discord.js

我想知道如何从整个行会中而不是从当前渠道中找到具有其ID的消息。

我尝试过

  • message.guild.channels.fetchMessage(message_ID)
  • client.channels.fetchMessage(message_ID)
  • message.channel.guild.fetchMessage(message_ID)
  • message.fetchMessage(message_ID)
  • message.guild.fetchMessage(message_ID)

我希望它查看整个行业,并按ID查找消息,然后发送消息内容。另外,我尝试过让它查找我想从中获取消息的频道,但是那也不起作用。

如果有可能使代码更具体,则应查看ID为#qotd-suggestions的名为479658126858256406的通道,然后在此处查找消息,然后发送消息的内容。

此外,fetchMessages的message_ID部分被替换为命令后的内容,因此,如果我说!send 485088208053469204,它应该发送Message content: "Wow, the admins here are so lame."

1 个答案:

答案 0 :(得分:1)

无法使用Guild方法来做到这一点,但是您可以简单地循环浏览通道并为每个通道调用TextChannel.fetchMessage()
为此,您可以使用Collection.forEach(),但是如果要使用var,那会有些复杂,因此我建议您使用{将Guild.channels转换为Array {3}}。

这是一个例子:

async function findMessage(message, ID) {
  let channels = message.guild.channels.filter(c => c.type == 'text').array();
  for (let current of channels) {
    let target = await current.fetchMessage(ID);
    if (target) return target;
  }
}

然后您可以通过传递触发命令的消息(从中获取行会)和所需的ID来使用此功能。它返回一个Promise<Message>,或者,如果找不到该消息,则返回Promise<undefined>。您可以使用awaitPromise.then()来获取消息:

let m = await findMessage(message, message_ID); // Message or undefined
// OR
findMessage(message, message_ID).then(m => {/* your stuff */});