如何为多个用户编写冷却计时器?

时间:2015-01-14 04:26:36

标签: c#

我用C#编写IRC bot。我有一堆命令设置,例如!uptime和!help。我不希望人们发送垃圾邮件,因为我可能会被禁止发送垃圾邮件。当您在30秒内发送20条消息时,会发生触发。

我之前和在mirc中编写了mirc bot,您可以为每个用户设置单独的计时器,以防止他们在30秒内多次使用它。我还必须创建一个全局泛洪变量,它将所有命令绑定在30秒内不发送超过20条消息。

有人可以告诉我如何在C#中用mirc做的事情吗?

1 个答案:

答案 0 :(得分:0)

一个非常基本的方法是保留一个用你的机器人执行请求的用户列表,并检查他们上次发出请求的时间。它非常基本,但对于一个简单的IRC机器人来说它应该做得很好。

    List<User> Users = new List<User>(); // list of all users

    public bool IncomingRequest(string RequestingUser)//requesting user == username of the person messaging your bot
    {
        User TempUser = Users.FirstOrDefault(User => User.Username == RequestingUser);
        if (TempUser != null)// check to see if you have handled a request in the past from this user.
        {
            if ((DateTime.Now - TempUser.LastRequest).TotalSeconds >= 30) // checks if more than 30 seconds have passed between the last requests send by the user
            {
                Users.Find(User => User.Username == RequestingUser).LastRequest = DateTime.Now; // update their last request time to now.
                return true;
            }
            else // if less than 30 seconds has passed return false.
            {
                return false;
            }
        }
        else // if no user is found, create a new user, and add it to the list
        {
            User NewUser = new User();
            NewUser.Username = RequestingUser;
            NewUser.LastRequest = DateTime.Now;
            Users.Add(NewUser);
            return true;
        }
    }

用户类

class User
{
    public string Username { get; set; }
    public DateTime LastRequest { get; set; }
}

你可以轻松添加一个计数器,只需通过迭代一个int,只要该函数返回true并检查

,就可以计算出在过去30中发生了多少请求
if (counter >20 && (Datetime.now - LastCounterReset).TotalSeconds >= 30)
{
    // reset counter and LastCounterReset 
} 
else
{
    // reject request
}