我想要一个不和谐音乐机器人,当它离开语音通道时,它会从命令和日志中清除文本通道。但问题是它需要太多时间(最多1-3分钟)。我看到其他机器人能够在更短的时间内完成同样的事情,那么我如何使我的代码更好呢?
这是我的代码,它确实有效,但我想让机器人更快地删除消息:
} else if (msg.content.trim().toLowerCase() == _CMD_LEAVE) {
const channel = msg.channel;
const messageManager = channel.messages;
messageManager.fetch({ limit: 100 }).then((messages) => {
messages.forEach((message) => {
if ((message.author.id == 0123456789) || (message.content.startsWith(PREFIX))) {
message.delete();
}
});
});
if (guildMap.has(mapKey)) {
let val = guildMap.get(mapKey);
if (val.voice_Channel) val.voice_Channel.leave()
if (val.voice_Connection) val.voice_Connection.disconnect()
if (val.musicYTStream) val.musicYTStream.destroy()
guildMap.delete(mapKey)
msg.reply("Disconnected.")
} else {
msg.reply("Cannot leave because not connected.")
}
}
Discord.js有一个功能,可以删除大量消息。
首先,您获取频道中直到某一点的所有消息(例如,最新的100条消息),然后根据您的条件过滤它们。然后,使用channel.bulkDelete(messages)
立即删除所有消息。遗憾的是,这只适用于小于14天的邮件,但它比手动删除邮件要高效得多。代码可能看起来像这样:
//fetch 100 most recent messages
channel.messages.fetch({limit: 100}).then(messages => {
//filter the messages to only delete messages by a certain user
messages = messages.filter(m => m.author.id === useridhere)
//bulk delete the messages
channel.bulkDelete(messages)
})