-1

現在、Twitch のボットをコーディングしています。
ここで、各メッセージの特殊文字をチェックし、特殊文字が 20% を超えるメッセージを検出したいと考えています。

メッセージ自体は変数var msgであり、メッセージに 20% を超える特殊文字が含まれている必要がある場合は、コマンドを使用してユーザーをタイムアウトにする必要があります。

これはリッスンする必要があるイベントです。

event.on("chat", function(user, channel, message) {
        var msg = message.toLowerCase();
        var args = msg.split(" ");

        console.log("<"+user.color+" | "+user.username+" | "+user.special+"> <"+channel+"> "+message)
    });

誰でも私を助けてくれることを願っています。これは、多かれ少なかれ、JavaScript で本格的に取り組んだ初めてのプロジェクトです。

4

1 に答える 1

1

tl;dr Jsfiddle

さて、あなたが特殊文字を何と呼んでいるかはわかりませんが、通常のテキストに表示されるもの以外の何かであるとしましょう:

//Regular expression that matches everything except specified
var regexp = /[^a-z0-9 ',\.:!\?]/ig;
//Get number of matches
var num_match = message.match(regexp);
num_match = num_match!=null?num_match.length:0;
//Percentage of unwanted characters:
var perctent_spec;
if(num_match!=null)
   perctent_spec = (num_match/message.length)*100; 
else 
   percent_spec = 0;

もちろん、代わりに 2 つの配列をループすることもできます。

var chars = message.split("");
var allowed = ["a", "b", "c" ... ];
var count = 0;
for(var i=0,l=chars.length; i<l; i++) {
    count++;
    for(var j=0,l2 = allowed.length; j<l2; j++) {
        if(chars[i]==allowed[i]) {
          count--;
          break;
        }
    }
}

しかし、組み込み関数をすぐに使用する正規表現よりも、ループ アプローチの方が遅くなるのではないかと私は強く疑っています。

于 2014-09-09T23:39:41.760 に答える