【问题标题】:How to fetch a message from the entire guild如何从整个公会获取消息
【发布时间】:2019-02-06 15:43:09
【问题描述】:

我想知道如何从整个公会而不是当前频道中找到带有 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 为 479658126858256406 的名为 #qotd-suggestions 的频道,然后在那里找到消息,然后发送消息的内容。

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

【问题讨论】:

  • 您可以简单地在所有渠道中进行for循环并找到消息

标签: discord.js


【解决方案1】:

使用Guild 方法无法做到这一点,但您可以简单地遍历通道并为每个通道调用TextChannel.fetchMessage()
为了做到这一点,你可以使用Collection.forEach(),但如果你想使用vars,那会有点复杂,所以我建议你将Guild.channels转换为ArrayCollection.array()

这是一个例子:

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 */});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 2011-05-26
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多