2015-01-14 71 views
-1

我正在用C#編寫一個IRC bot。我有一堆命令,比如!uptime和!help。我不想讓人們發送垃圾郵件,因爲我可以禁止發送垃圾郵件。當您在30秒內發送20條消息時,觸發器發生。如何爲多個用戶編寫一個冷卻時間定時器?

我已經在mirc中編寫過mirc bot,並且可以爲每個用戶設置單獨的定時器,以防止它們在30秒內多次使用它。我還必須創建一個全局洪水變量,將所有命令聯繫起來,以便在30秒內不發送超過20條消息。

有人能告訴我如何做我在C#中使用mirc做的事情嗎?

回答

0

這樣做的一個基本方法是保存一個用戶使用你的機器人執行請求的列表,並檢查他們上次提出請求的時間。它非常基本,但對於一個簡單的IRC bot來說,它應該做得很好。

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; } 
} 

您可以輕鬆簡單地通過迭代每當函數返回true一個int並具有

檢查添加計數器,增加了多少個請求在過去30發生
if (counter >20 && (Datetime.now - LastCounterReset).TotalSeconds >= 30) 
{ 
    // reset counter and LastCounterReset 
} 
else 
{ 
    // reject request 
} 
相關問題