我用C#编写IRC bot。我有一堆命令设置,例如!uptime和!help。我不希望人们发送垃圾邮件,因为我可能会被禁止发送垃圾邮件。当您在30秒内发送20条消息时,会发生触发。
我之前和在mirc中编写了mirc bot,您可以为每个用户设置单独的计时器,以防止他们在30秒内多次使用它。我还必须创建一个全局泛洪变量,它将所有命令绑定在30秒内不发送超过20条消息。
有人可以告诉我如何在C#中用mirc做的事情吗?
答案 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
}