我在我的机器人中运行以下代码,作为删除cuss单词的命令。但是,它似乎会让机器人删除任何无论发送的消息!帮助!
bot.on('message', message => {
if (message.content.includes == 'bannedWord1' ||'bannedWord2' || 'bannedWord3' || 'bannedWord4') {
message.delete(1);
message.channel.send("That word's not appropriate!");
}
});
答案 0 :(得分:3)
问题是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_]
)+
量词 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)\S+
\S+
匹配任何空格字符(等于[\r\n\t\f\v ]
)+
量词 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)[^\s\w]+
[^\s\w]+
+
量词 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)\ s匹配任何空格字符(等于[\r\n\t\f\v]
)答案 1 :(得分:1)
因为你试图将指针与函数与表达式进行比较
string OR string OR string
总是如此,所以为每条新消息执行if
答案 2 :(得分:0)
这就是我所拥有的..随便看看吧!
extension CMTime: Strideable {
public func distance(to other: CMTime) -> TimeInterval {
return TimeInterval((Double(other.value) / Double(other.timescale)) - (Double(self.value) / Double(self.timescale)))
}
public func advanced(by n: TimeInterval) -> CMTime {
var retval = self
retval.value += CMTimeValue(n * TimeInterval(self.timescale))
return retval
}
}