1
votes

I'm currently working on a self-bot that fetches all images from a channel and then downloads them: when I use my self-bot, the bot doesn't fetch messages that aren't loaded by the client and we can't load all of the messages simultaneously. Is there a way to do that? Something like a command to load all messages from a channel and then do multiple .fetchMessages() to get them all?

2
What do you mean by "charge messages"?James Whiteley
"working on a self-bot" I'll just tell you that if you get "caught" by using a selfbot your account might get banned from using Discord.André
Sorry i meant load instead of "charge". The messages aren't loading if i don't do it manually and when i fetch them using .fetchMessagesThalusA

2 Answers

1
votes

Self-Bots might be against the ToS, but iterating through messages in a channel is not, as far as I know. So...

Here's a snippet that will fetch all messages using the new js async generators functionality for efficiency

The snippet:

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
  }
}

How it's used:

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
votes

We can't since it's against ToS. :/ (even if it's a bot I think)