【发布时间】:2018-06-26 23:59:26
【问题描述】:
我正在尝试在命令之间进行冷却以阻止程序被垃圾邮件发送,但我不知道如何做到这一点。从理论上讲,这应该可行,至少从我的角度来看,如果有人对此有答案或有更好的方法,我将不胜感激。
if (message.HasStringPrefix("!", ref argPos) || message.HasMentionPrefix(_client.CurrentUser, ref argPos))
{
var cooldownSet = DateTime.Now;
if ((DateTime.Now - cooldownSet).Seconds >= 1)
{
var context = new SocketCommandContext(_client, message);
var result = await _commands.ExecuteAsync(context, argPos, _services);
if (!result.IsSuccess)
Console.WriteLine("{" + DateTime.Now.ToString() + "} - " + result.ErrorReason);
}
else
{
return;
}
}
【问题讨论】:
-
计时器不是更适合吗?也可能包含线程?
-
嗯。在每个“命令”上,您基本上都在执行
(DateTime.Now - DateTime.Now).Seconds。 -
好吧,您的代码设置了
cooldownSet值,然后立即检查是否超过一秒前,这显然不会是真的。所以这个方法总是会在什么都不做的情况下返回。