[英]discord.js bot is deleting all messages
我的機器人中運行以下代碼,作為刪除俗語的命令。 但是,無論如何,它似乎都能使漫游器刪除所有已發送的消息! 救命!
bot.on('message', message => {
if (message.content.includes == 'bannedWord1' ||'bannedWord2' || 'bannedWord3' || 'bannedWord4') {
message.delete(1);
message.channel.send("That word's not appropriate!");
}
});
問題是message.content.includes == 'bannedWord1' ||'bannedWord2' || 'bannedWord3' || 'bannedWord4'
message.content.includes == 'bannedWord1' ||'bannedWord2' || 'bannedWord3' || 'bannedWord4'
message.content.includes == 'bannedWord1' ||'bannedWord2' || 'bannedWord3' || 'bannedWord4'
真正含義是(message.content.includes == 'bannedWord1') ||'bannedWord2' || 'bannedWord3' || 'bannedWord4'
(message.content.includes == 'bannedWord1') ||'bannedWord2' || 'bannedWord3' || 'bannedWord4'
(message.content.includes == 'bannedWord1') ||'bannedWord2' || 'bannedWord3' || 'bannedWord4'
。 非空字符串是真實的,因此始終如此。
另外,我假設message.content
是一個字符串。 因此,您需要處理諸如“ assumptions”之類的事情,其中包含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]
) 因為您正在嘗試將函數指針與表達式string OR string OR string
(始終為true)進行比較,所以如果對每個新消息執行了if
這就是我所擁有的..隨便看看吧!
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));
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.