我们如何从一个不和谐频道加载所有消息?

How can we load all messages from a single discord channel?

我目前正在开发一个从频道获取所有图像然后下载它们的自助机器人:当我使用我的自助机器人时,该机器人不会获取客户端未加载的消息而且我们无法同时加载所有消息。有没有办法做到这一点?类似于从频道加载所有消息然后执行多个 .fetchMessages() 以获取所有消息的命令?

我们不能,因为它违反了服务条款。 :/(即使我认为它是一个机器人)

Self-Bots 可能违反 ToS,但据我所知,循环访问频道中的消息并非如此。所以...

这是一个片段,它将使用新的 js 异步生成器功能获取所有消息以提高效率

片段:

async function * messagesIterator (channel) {
  let before = null
  let done = false
  while (!done) {
    const messages = await channel.messages.fetch({ limit: 100, before })
    if (messages.size > 0) {
      before = messages.lastKey()
      yield messages
    } else done = true
  }
}

async function * loadAllMessages (channel) {
  for await (const messages of messagesIterator(channel)) {
    for (const message of messages.values()) yield message
  }
}

使用方法:

client.on('ready', async () => {
  const targetChannel = client.guilds.cache.first().channels.cache.find(x => x.name === 'test')

  // Iterate through all the messages as they're pulled
  for await (const message of loadAllMessages(targetChannel)) {
    console.log(message.content)
  }
})