如何使 Discord 机器人在指定的时间间隔和命令上清除特定频道的消息



我希望我的机器人能够在每天的特定时间清除特定不和通道中的所有消息。我还希望能够使用set命令手动执行此操作。如有任何帮助,我们将不胜感激!

提前感谢!

edit:仔细想想,我实际上不需要机器人在时间间隔上清除,只需要在命令下清除,所以不用担心时间部分。

以后,请在提出问题之前尝试解决您的问题,如果您的尝试没有成功,请在问题中详细说明您的尝试(提供您尝试的代码(。

可能的解决方案

至于清除特定通道,有许多方法可以做到这一点。你真正需要做的就是查看discord.js文档来找到答案。有两种方法可以实现这一点:textChannel.bulkDelete()textChannel.clone()。你选择使用哪个选项实际上取决于你应该多久清理一次通道。如果要清除通道中的所有消息,但该通道包含2周或2周以上发送的消息,则bulkDelete()选项将无法清除该通道中的全部消息。如果您希望能够清除通道中的每一条消息,无论经过了多少时间,都需要使用通道克隆方法。请注意,克隆方法将需要通道管理置换,因此如果这是不可能的,则需要使用bulkDelete()

示例

以下代码使用clone()方法,直接从我自己的一个discord机器人的代码中提取和修改(如果你需要一个工作示例,可以在这里找到(:

//Get the position of the channel in the channel list
var pos = message.channel.position;
//Clear channel by cloning it, and set its position to the same position
message.channel.clone().then(c => {
c.setPosition(pos).catch(err => console.log(err));
}).catch(err => console.error(err));
//Delete original channel
message.channel.delete(`Cleared channel.`)

解释

执行此代码后,将克隆原始通道(创建一个新通道,保留原始通道的所有权限和设置,但不保留消息(。然后,原始通道被删除,克隆通道的位置被设置为与原始通道相同的位置。这产生了通道已被清除的错觉,并允许您";删除";超过2周的邮件。

请注意,上面的示例旨在清除在其中执行命令的通道。如果您希望命令能够指定要清除的通道(作为其第一个参数(,则需要将所有出现的message.channel替换为类似message.guild.channels.find(channel => channel.name == args[0])的内容。如果你只想清除一个硬编码的通道,情况也是如此。然后,您需要将所有出现的message.channel替换为类似message.guild.channels.find(channel => channel.name == "channel-name")的内容。

相关资源

https://discord.js.org/#/docs/main/stable/class/TextChannel?scrollTo=bulkDeletehttps://discord.js.org/#/docs/main/stable/class/TextChannel?scrollTo=clone
我的机器人示例

最新更新