1

チャット クライアントがスパムを処理する方法についていくつかの異なるスレッドを読みましたが、この問題を処理するためのどのパスが最良の結果をもたらすかはまだわかりません。

私はこのスレッドから見てきました: C# チャット クライアントのチャット スパム自動ブロックは、DateTime のタイム スタンプを使用し、それらを間隔で比較すると、非常に優れたスパム フィルターを作成できることを示しています。ただし、私は決して熟練したプログラマーではなく、以前の DateTime スタンプと Timer 間隔を比較するという概念を理解するのに苦労しています。または、要点を見逃している可能性があります。

これを念頭に置いて、いくつかの C# コードに手を出しました。タイマー、DateTime スタンプ、またはその両方を使用してこのアイデアを構築するためのより良い方法をお勧めします...

    private void Post()
    {
        string time = DateTime.Now.ToString("HH:mm:ss");
        string data = UserInput.Text;
        _GetData(time + " " + lUser + PROMPT + data);
        ChatWindow.SetSelected(ChatWindow.Items.Count - 1, true);
        ChatWindow.SetSelected(ChatWindow.Items.Count - 1, false);
        UserInput.Clear();
    }

    System.Timers.Timer resetTimer = new System.Timers.Timer();
    private int MessageCount { get; set; }
    private bool isSpam { get; set; }

    private void SpamEvent(object source, ElapsedEventArgs e)
    {
        if (MessageCount <= 2)
        {
            MessageCount -= 1;
            isSpam = false;
        }
        else
        {
            isSpam = true;
        }
    }

    private void ResetTimer(object source, ElapsedEventArgs e)
    {
        MessageCount = 0;
        btnEnter.Enabled = true;
    }

    private void btnEnter_Click(object sender, EventArgs e)
    {
        MessageCount += 1;
        System.Timers.Timer localtimer = new System.Timers.Timer();
        localtimer.Elapsed += new ElapsedEventHandler(SpamEvent);
        localtimer.Interval = 1000;
        localtimer.Enabled = true;

        if (isSpam == false)
        {
            Post();
        }
        if (isSpam == true)
        {
            MessageBox.Show("No spamming please");
            btnEnter.Enabled = false;
            resetTimer.Interval = 5000;
            resetTimer.SynchronizingObject = this;
            resetTimer.Enabled = true;
            resetTimer.Elapsed += new ElapsedEventHandler(ResetTimer);
        }
    }

または次のようなもの:

        List<DateTime> myMessage = new List<DateTime>();

        DateTime local = new DateTime();
        local = DateTime.Now;
        myMessage.Add(local);

        int Messages = myMessage.Count;
        System.Timers.Timer localtimer = new System.Timers.Timer();

私は現在、学校で別のフルロードのクラスを受けています。仕事、ガールフレンド、クラス、家族の義務の間で、頭が混乱しています。

4

2 に答える 2

0
  1. localTimer をクラスのプライベート メンバーにして、名前を「spamTimer」などに変更します (nomen est omen)。

  2. btn_click メソッドで、resetTimer が開始され、まだ実行中 (まだ経過していない) かどうかを最初に確認します。もしそうなら、それは私たちがスパムペナルティの遅延にあることを意味します. MessageBox を表示しますが、それ以上の処理は行いません。

  3. resetTimer を確認した後、spamTimer が開始されているかどうかを確認します。まだ開始していない場合は、開始します。ただし、spamTimer がすでに実行中 (まだ経過していない) で、メッセージ数が 2 を超える場合は、スパムが検出されるため、Post を実行しないでください。それに応じて isSpam フラグを設定し、リセット タイマーを開始します。MessageBox を表示しますが、それ以上の処理は行いません...

  4. spamTimer を確認した後、メッセージを投稿します。もちろん、メッセージカウンターをインクリメントします...

  5. resetTimer が経過したら、isSpam フラグと messageCount をリセットします。

于 2013-10-20T22:07:09.020 に答える