discord.js 机器人正在删除所有消息
Posted
技术标签:
【中文标题】discord.js 机器人正在删除所有消息【英文标题】:discord.js bot is deleting all messages 【发布时间】:2018-04-29 04:26:43 【问题描述】:我的机器人中运行了以下代码,作为删除脏话的命令。但是,无论如何,它似乎使机器人删除了任何发送的消息!帮助!
bot.on('message', message =>
if (message.content.includes == 'bannedWord1' ||'bannedWord2' || 'bannedWord3' || 'bannedWord4')
message.delete(1);
message.channel.send("That word's not appropriate!");
);
【问题讨论】:
谢谢,马克斯·沃尔默。我没有注意到我没有更改代码。 【参考方案1】:这就是我所拥有的......随意摆弄它!
bot.on('message', async message =>
//1 blacklisted words
let blacklisted = ['bannedWord1','bannedWord2,','bannedWord3','bannedWord4','bannedWord5','bannedWord6','bannedWord7','bannedWord8','bannedWord9','bannedWord10','bannedWord11'] //words
//2 looking for words
let foundInText = false;
for (var i in blacklisted) // loops through the blacklisted list
if (message.content.toLowerCase().includes(blacklisted[i].toLowerCase())) foundInText = true;
// checks casesensitive words
//3 deletes and send message
if (foundInText)
message.delete();
message.channel.send('Hey! That word is not allowed!! :rage:').then(msg => msg.delete(5000));
);
【讨论】:
【参考方案2】:问题是message.content.includes == 'bannedWord1' ||'bannedWord2' || 'bannedWord3' || 'bannedWord4'
真正的意思是(message.content.includes == 'bannedWord1') ||'bannedWord2' || 'bannedWord3' || 'bannedWord4'
。非空字符串是真的,所以这总是真的。
另外,我假设message.content
是一个字符串。因此,您需要处理包含ass
但不是坏词的“假设”之类的事情。
演示解决方案:
var badWords = [
'bannedWord1',
'bannedWord2',
'bannedWord3',
'bannedWord4'
];
var contents = [
'This is a test.',
'bannedWord1 tester.',
'bannedWord2!',
'OkaywordthatcontainsbannedWord1.'
];
var allowed = contents.filter(content =>
var words = content.toLowerCase().trim().match(/\w+|\s+|[^\s\w]+/g);
return !words.find(word =>
return badWords.includes(word);
);
);
console.log(allowed);
在你的情况下使用:
var badWords = [
'bannedWord1',
'bannedWord2',
'bannedWord3',
'bannedWord4'
];
bot.on('message', message =>
var words = message.content.toLowerCase().trim().match(/\w+|\s+|[^\s\w]+/g);
var containsBadWord = words.some(word =>
return badWords.includes(word);
);
if (containsBadWord)
message.delete(1);
message.channel.send("That word's not appropriate!");
);
来自 regex101.com 的正则表达式解释
-
第一选择
\w+
\w+
匹配任何单词字符(等于[a-zA-Z0-9_]
)
+
Quantifier — 匹配一次到无限次,尽可能多次,根据需要回馈(贪婪)
第二选择\S+
\S+
匹配任何空白字符(等于[\r\n\t\f\v ]
)
+
Quantifier — 匹配一次到无限次,尽可能多次,按需回馈(贪心)
第三选择[^\s\w]+
匹配下面列表中不存在的单个字符[^\s\w]+
+
Quantifier — 匹配一次到无限次,尽可能多次,根据需要返回(贪婪) \s 匹配任何空白字符(等于 [\r\n\t\f\v]
)
【讨论】:
谢谢!这是有道理的,而且非常有帮助。不过,我对 .match(/\w+|\S...) 部分正在做什么感到有些困惑。 我添加了一个正则表达式解释。基本上,目标是将字符串拆分为单词。这些单词可以用空格、某些标点符号等分隔。【参考方案3】:因为您试图将指向函数的指针与表达式进行比较
string OR string OR string
这总是正确的,所以 if 为每条新消息执行
【讨论】:
以上是关于discord.js 机器人正在删除所有消息的主要内容,如果未能解决你的问题,请参考以下文章