聊天客户端垃圾邮件过滤器返工和建议

本文关键字:过滤器 客户端 聊天 | 更新日期: 2023-09-27 18:36:20

我已经阅读了几个关于聊天客户端应该如何处理垃圾邮件的不同线程,但我仍然不知道处理此问题的哪条路径会产生最佳结果。

我从这个线程中看到:C#聊天客户端的聊天垃圾邮件自动阻止,如果您使用DateTime的时间戳并将其与间隔进行比较,则可以制作一个非常好的垃圾邮件过滤器。然而,我无论如何都不是专家程序员,并且很难掌握将以前的日期时间戳与计时器间隔进行比较的概念;或者我可能错过了重点。

因此,考虑到这一点,我已经涉足了一些 C# 代码,并希望您推荐一种更好的方法来构建这个想法,或者只使用计时器、日期时间戳或两者......

    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();

我目前正在学校上满负荷的课程。在工作、女朋友、班级和家庭职责之间,这让我头晕目眩。

聊天客户端垃圾邮件过滤器返工和建议

  1. 使localTimer成为类的私有成员,并将其重命名为"spamTimer"或其他名称(nomen est omen)。

  2. 在btn_click方法中,首先检查 resetTimer 是否已启动且仍在运行(尚未过期)。如果是这样,这意味着我们处于垃圾邮件惩罚延迟状态。显示消息框,但不执行进一步处理。

  3. 检查
  4. 重置计时器后,检查垃圾邮件计时器是否已启动。如果尚未启动,请启动它。但是,如果 spamTimer 已在运行(尚未过期)并且邮件计数为>2,请不要执行 Post,因为检测到垃圾邮件。相应地设置 isSpam 标志并启动重置计时器。显示消息框,但不进行进一步处理...

  5. 检查垃圾邮件计时器后,发布消息。当然,还要增加消息计数器...

  6. 当重置计时器过后,重置 isSpam 标志和邮件计数。

以下内容将使用户的消息在每分钟发送超过 10 条时被丢弃。 这允许用户连续发送多条消息,只要他们总体上没有发送太多。 从概念上讲,每当来自用户的消息到达聊天服务器时,就会调用"ChatMessageReceived"。

class Message
{
    public readonly String Author;
    public readonly String Content;
    public readonly DateTimeOffset Time = DateTimeOffset.UtcNow;
    public Message(String author, String content)
    {
        Author = author;
        Content = content;
    }
}
class Chat
{
    // collection of recent messages
    private IList<Message> _recentMessages = new List<Message>();
    public void ChatMessageReceived(String author, String content)
    {
        // prune the recentMessages down to only messages in the last minute
        var oneMinuteAgo = DateTimeOffset.UtcNow - TimeSpan.FromMinutes(1);
        _recentMessages = (from message in _recentMessages where message.Time > oneMinuteAgo select message).ToList();
        // get the number of recent messages sent by this author
        var countOfRecentMessagesFromAuthor = _recentMessages.Count(message => message.Author == author);
        if (countOfRecentMessagesFromAuthor > 10)
            return;
        // add the new message to the collection of recent messages.
        _recentMessages.Add(new Message(author, content));
        // Record the chat message and display it or send it to connected clients.
    }
}