提问者:小点点

如何用Discord bot高效删除消息


我想要一个不和谐音乐机器人,当它离开语音通道时,它会从命令和日志中清除文本通道。但问题是它需要太多时间(最多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.")
        }
    }

共1个答案

匿名用户

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)

})