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