跨多个渠道获取消息

Fetching messages across multiple channels

我目前正在尝试获取公会中的所有消息,但 .fetchMessages 方法仅适用于特定频道。

我已经尝试使用 .forEach 函数,但在这样做时收到了多个错误。

async function intervalFunc() {
  var mainGuild = client.guilds.get("562324876330008576");
  var messagesArray = [];
  await mainGuild.channels.forEach(channel => {
    if (channel.type == "text") {
      channel.fetchMessages({ limit: 20 }).then(msg => {
        messagesArray.push(msg);
      });
    }
  });
  console.log(messagesArray.length)
  //....
}

预期的输出至少是几百,但它却输出 0

你需要把await放在异步操作上:

async function intervalFunc() {
  var mainGuild = client.guilds.get("562324876330008576");
  var messagesArray = [];

  for(channel in mainGuild.channels) {
    if(channel.type == "text") {
      const messages = await channel.fetchMessages({limit: 20});
      messagesArray = [
        ...messagesArray,
        ...messages,
      ];      
    }
  }

  console.log(messagesArray.length);
}

所以这里会以异步的方式等待ferchMessages到return一个值,然后进行下一次迭代。