javascript - 自动删除特定频道中的消息
问题描述
我有一个建议频道,我这样做是为了让用户只允许在其中发布链接,机器人能够对他们发布的内容做出反应。我已经对链接进行了自动反应,但我无法让机器人删除不是链接的内容。所以我想删除所有不是链接的东西。
bot.on('message', message => {
// whenever a message is sent
if (bot.id === '514484773171757061') {
return;
}
if (message.channel.id === "508606903740268545" ){
if (message.content.includes('playrust.io/')) {
message.react('✅').then( () =>{
message.react('❌')});
} else if (message.delete()) {
message.channel.sendMessage('Message has been Deleted ' + message.author)
}
}
});
这是一种很好的工作,但不是很好。它会删除不是链接的消息一百万次并发送一百万次通知:/我猜问题出在else if
部分
解决方案
我认为问题在于您正在创建一种无限循环。在您的代码中,您首先检查消息发送是否在特定通道中,然后检查它是否包含链接。如果没有,您会向同一频道发送一条消息,说“我没有找到链接”。
当您发送此消息时,您的机器人将再次被触发,因为已发送了一条新消息。它检查它是否在一个特定的频道中,以及它是否包含一个链接,但它没有,因此循环重复。
它可以通过一个简单的语句来修复,这在创建机器人时也恰好是一个非常好的实践。要修复它,您需要包含一些代码来检查消息是否已由机器人发送。看下面的例子:
bot.on('message', message => {
// Ignore messages from all bots
if (message.author.bot) return;
/* All your other code here */
推荐阅读
- python - 在使用 ctypes 测试自定义 python 包装器期间,发生“OSError:异常:访问冲突读取”
- linux - 在 CentOS 上找不到新安装的 svn 版本
- html - 为什么我的字体属性会导致删除部分代码并应用于非预期部分的错误?
- python - 评估嵌套的 For 循环
- objective-c - iOS NSRegularExpression 文本
- xcode - 如何在 react-native 应用程序(Xcode)中编辑/更新启动屏幕文本
- amazon-web-services - 不清楚在 aws cloudformation yaml 模板中添加 --conf spark.jars.packages=org.apache.spark:spark-avro_2.11:2.4.4 的位置
- python-3.x - 出现错误:-ValueError:“b'Feb 1978, 2, 1975 总访问时间(以分钟为单位):\n'”的格式编号 1 无法识别
- javascript - excel、javascript、python和html的链接
- jquery - div 内容加载完成后,如何删除占位符?