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

时间:2018-06-11 15:42:07

标签: node.js discord.js

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

2 个答案:

答案 0 :(得分:1)

据我所知,自举可能与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)
  }
})

答案 1 :(得分:0)

我们不能,因为它违反了ToS。 :/(即使我认为它是机器人)