2016-11-07 44 views
0

我剛剛開始編碼c#,我正在爲我的不和服務器製作一個Bot。我最近添加了一個命令!meme,它會從大約100張不同的圖片中隨機拉出來發送聊天內容。第二個我實現了這個命令,每個人都完全濫用了它,因爲這個!meme垃圾郵件,每隔2秒就會有15張圖片在聊天中彈出。如何在C#中添加3秒的延遲?

我希望能夠在命令本身再次使用之前添加3秒的延遲。我嘗試使用Thread.Sleep(3000);,並沒有工作。 等待Task.Delay(3000);我在異步中使用。

 private void RegisterMemeCommand() 
    { 
     commands.CreateCommand("Meme") 
      .Do(async (e) => 
      { 
       int RandomMeme = rng.Next(MemeList.Length); 
       string memetopost = MemeList[RandomMeme]; 
       await e.Channel.SendFile(memetopost); 
      }); 
    } 
+0

你是什麼意思,它沒有工作? – Jack

+0

是的,我沒有完全粘貼它。 –

+10

記錄上次使用該命令的時間。當有人再次使用它時,將當前時間與當時時間進行比較。如果不超過三秒鐘,*不執行命令*。 –

回答

0

由於我沒有完整的代碼,從你的問題有什麼了,試試這個:

var lastSentOn=DateTime.MinValue; 
commands.CreateCommand("Meme") 
.Do(async (e) => 
{ 
    if((DateTime.Now - lastSentOn).TotalSeconds > 3) 
    { 
     int RandomMeme = rng.Next(MemeList.Length); 
     string memetopost = MemeList[RandomMeme]; 
     lastSentOn = DateTime.Now; 
     await e.Channel.SendFile(memetopost); 
    } 
}); 

您可能需要lastSentOn一些用戶ID等。字典將關聯在這種情況下有幫助。

+0

感謝@mike z,爲了放置更合適的屬性。 – TheVillageIdiot

+0

它給了我一堆錯誤。我編輯了我的帖子,添加了更多的代碼,不知道它是否會改變任何內容。說時間缺乏await操作符,說當前上下文中不存在「時間」,並且說ToString沒有等待操作符。另外,我之前在等待的工作表明,它只能用於異步方法。 –

+0

@JohnLandon好吧,請刪除該行。我已經在這個答案中做了。 「時間」的使用只在那裏,因爲你把它包含在問題中。 –