私はあなたがより良い何が起こっているかを理解することができるように小さな部分にまであなたのコードを壊し、その後、物事はより簡潔作るためにRubyのEnumerable methodsのいずれかを使用します。また、snake_caseのRubyの規約(badWords
の代わりにbad_words
)を使用しましょう。
まず、bad_words
配列に不要な文字が含まれていないことを確認します。 bad_words
コレクションは、毎回各要素を変更するのではなく、1回だけ変更することをお勧めします。
私たちのコレクションは重複を含まないであろう、と我々は要素を一致させるために、それを何度も検索することがありますから、私たちがセットに配列を変換することにより、大幅に効率を向上させることができるため、我々は、それでいる間:
require 'set'
bad_words = bad_words.map(&:strip).to_set
次に、コンテンツに悪い単語が含まれているかどうかを確認する方法を書いてみましょう。私たちは、それがブール値を返す示すために、メソッド名の末尾に疑問符をつけます:いずれかの項目には、次のブロックに戻りtrue
に渡された場合
def profane?(content)
bad_words.any? { |bad_word| content.include?(bad_word) }
end
#any?
メソッドがtrueを返します。
今、あなたの手術のコードはprofane?
を呼び出して、適切な行動とることができます。私は、メソッドの戻りtrue
コンテンツが不敬であれば作った
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
を、そしてコンテンツが不敬でない場合は、デフォルトでnil
を返します。 。必要に応じて異なる戻り値を使用することができ、その応答に基づいてさらにアクションをとることができます。
ありがとう、これは問題であるようです。 – Esgaroth
これは新しい 'content'が評価されるたびに' .strip'を各バッドワードに個別に適用します。 – moveson