나는 불협화음 서버에 대한 봇을 작성하고 있는데, 나는 욕설 필터 역할을하고 싶습니다. 텍스트 파일에서 잘못된 단어 목록을 읽고 배열에 저장합니다. 봇이 듣고있는 채널에서 사용자가 메시지를 보낼 때마다 봇은 해당 메시지에 하나 이상의 잘못된 단어가 포함되어 있는지 확인합니다. 이를 위해 다음 코드를 사용합니다.
badWords.each { |badword|
if content.downcase.include? badword
...
end
}
내 문제는 if 문이
true
를 반환한다는 것입니다.
메시지 내용의 잘못된 단어가 배열의 마지막 단어와 일치하는 경우에만 가능합니다. 배열의 다른 요소와 일치하면
false
를 리턴합니다.
.
Array#each
의 기능이 있습니까
내가 오해하고있다 고요?
- 답변 # 1
- 답변 # 2
코드를 작은 부분으로 나눠서 진행 상황을 더 잘 이해 한 다음 Ruby의 Enumerable 메소드 중 하나를 사용하여 간결하게 작성합니다. 또한 snake_case (
if content.downcase.include?(badword.strip)
)의 루비 규칙을 사용합시다bad_words
대신 ).먼저
badWords
를 확인합시다 array는 원하지 않는 문자를 포함하지 않습니다.bad_words
를 수정하는 것이 좋습니다 매번 각 요소를 수정하는 대신 반복하여 한 번 수집하십시오.우리는 컬렉션에 중복을 포함하지 않기 때문에 일치하는 요소를 찾기 위해 여러 번 검색하므로 Array를 Set으로 변환하여 효율성을 크게 높일 수 있습니다.
bad_words
다음에는 내용에 잘못된 단어가 포함되어 있는지 확인하는 메소드를 작성해 봅시다. 메소드 이름 끝에 물음표를 붙여 부울 값을 반환 함을 나타냅니다.
require 'set' bad_words = bad_words.map(&:strip).to_set
와이즈 비즈 다음 블록으로 전달 된 항목이
def profane?(content) bad_words.any? { |bad_word| content.include?(bad_word) } end
를 리턴하면 메소드는 true를 리턴합니다. .이제 수술 코드가
#any?
를 호출 할 수 있습니다 적절한 조치를 취하십시오 :true
메소드가
profane?
를 리턴하도록했습니다. 내용이 비속 한 경우def filter_bad_words(content) if profane?(content) bot.send_message(event.channel.id, "Sorry #{event.user.name}, this message made my profanity senses tingle!") bot.send_message(344559522003812354, "PROFANITY WARNING!!\n user: #{event.user.name}\n message: #{event.content}\n Please check if it is a cause for a warning. Use !?warn to give the user a warning.") event.message.delete true end end
를 반환합니다 내용이 부적절한 경우 기본적으로. 원하는 경우 다른 반환 값을 사용할 수 있으며 해당 응답에 따라 추가 조치를 취할 수 있습니다.true
관련 자료
- python - Selenium은 잘못된 요소를 반환하고 요소 자체를 보는 대신 첫 번째 형제 요소를 선택합니다
- Haskell에서 목록의 첫 번째 요소를 반환합니다
- javascript - svg 요소의 좌표를 가져 오면 SVGAnimatedLength가 반환됩니다
- javascript - documentquerySelector ()는 Node의 인스턴스가 아닌 요소를 반환합니다
- python - scrapy - 선택기가 get으로 전체 요소를 반환하지만 데이터를 올바르게 할당합니다
- python - 내 코드는 어떻게 내 목록에서 첫 번째 요소 만 반환합니까?
- javascript - 왜 배열의 모든 값을 이미 인쇄했지만 배열의 첫 번째 요소 만 반환합니까?
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
와이즈 비즈 시도
strip
를 가질 수 있기 때문에 나쁜 단어 결국 로그인하십시오.