簡體   English   中英

discord.js機器人正在刪除所有消息

[英]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的正則表達式說明

  1. 第一替代\\w+
    • \\w+匹配任何單詞字符(等於[a-zA-Z0-9_]
    • +量詞-匹配一次和無限次,盡可能多地匹配,並根據需要返回(貪婪)
  2. 第二替代\\S+
    • \\S+匹配任何空格字符(等於[\\r\\n\\t\\f\\v ]
    • +量詞-匹配一次和無限次,盡可能多地匹配,並根據需要返回(貪婪)
  3. 第三替代[^\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM