2017-11-15 10 views
0

다음 코드는 내 봇에서 실행 중이며 오스를 삭제하는 명령입니다. 그러나, 그것은 상관없이 보내진 메시지를 bot이 삭제하도록 만드는 것 같습니다! 도움!discord.js 봇이 모든 메시지를 삭제합니다

bot.on('message', message => { 
    if (message.content.includes == 'shit' ||'ass' || 'fuck' || 'bitch') { 
     message.delete(1); 
     message.channel.send("That word's not appropriate!"); 
    } 
}); 

답변

0

는 표현과 기능 포인터를 비교하기 위해 노력하고 있기 때문에 각각의 새로운 메시지

1

에 대해 실행하면이 문제는 message.content.includes == 'shit' ||'ass' || 'fuck' || 'bitch' 그래서 항상 true입니다 string OR string OR string 정말 (message.content.includes == 'shit') ||'ass' || 'fuck' || 'bitch'을 의미한다. 비어 있지 않은 문자열은 사실이므로 항상 참입니다.

또한 message.content은 문자열입니다. 따라서 ass을 포함하는 '가정'과 같은 것을 처리해야하지만 나쁜 단어는 아닙니다.

데모 솔루션 : regex101.com

  1. 1 Alt 키에서

    var badWords = [ 
        'shit', 
        'ass', 
        'fuck', 
        'bitch' 
    ]; 
    
    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!"); 
        } 
    }); 
    

    정규식 설명 : 귀하의 경우

    var badWords = [ 
     
        'shit', 
     
        'ass', 
     
        'fuck', 
     
        'bitch' 
     
    ]; 
     
    
     
    var contents = [ 
     
        'This is a test.', 
     
        'Shit tester.', 
     
        'Ass!', 
     
        'Assumptions are bad.' 
     
    ]; 
     
    
     
    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);

    사용 \w+

    • \w+ 일치를 ([a-zA-Z0-9_] 동일) 단어 문자를 ernative
    • + 한정 기호 -
  2. 2 (욕심) 필요에 환원 한 무제한 시간, 가능한 한 많은 시간 사이의 일치 대체 \S+
    • \S+은 공백 문자 ([\r\n\t\f\v ]과 동일)와 일치합니다.
    • + 수량 어는 - 아래 목록에
  3. 3 대체 [^\s\w]+
    • 일치 하나의 문자없는 (욕심) 필요에 따라 다시 제공 한 무제한 번 사이에 가능한 한 많은 시간을 일치 [^\s\w]+
    • + 수량 한정자 - 가능한 한 많은 횟수로 필요한만큼 (욕심이 많음) \ s가 공백 문자 ([\r\n\t\f\v]과 동일)와 일치 함
+0

감사! 그것은 의미가 있으며 매우 도움이됩니다. 나는 .match (/ \ w + | \ S ...) 부분이하고있는 일에 혼란 스럽다. – SuperNunb

+0

정규식 설명을 추가했습니다. 기본적으로 목표는 문자열을 단어로 분리하는 것입니다. 이 단어는 공백, 특정 구두점 등으로 구분할 수 있습니다. –