【问题标题】:C# Making a Discord bot cant figure a way to make cooldownC# 制作 Discord 机器人无法找到冷却时间
【发布时间】: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 值,然后立即检查是否超过一秒前,这显然不会是真的。所以这个方法总是会在什么都不做的情况下返回。

标签: c# discord


【解决方案1】:

由于你显然处于异步方法中,你可以使用Task.Delay 等待一定的时间,然后执行命令。

if (message.HasStringPrefix("!", ref argPos) || message.HasMentionPrefix(_client.CurrentUser, ref argPos)) {

    // will delay for 1 second
    await Task.Delay(1000);

    var context = new SocketCommandContext(_client, message);

    var result = await _commands.ExecuteAsync(context, argPos, _services);

    if (!result.IsSuccess)
        Console.WriteLine("{" + DateTime.Now.ToString() + "} - " + result.ErrorReason);
}

【讨论】:

    猜你喜欢
    • 2019-06-28
    • 2017-07-08
    • 2017-11-21
    • 1970-01-01
    • 2017-09-08
    • 2018-02-15
    • 2022-12-10
    • 1970-01-01
    • 2020-11-18
    相关资源
    最近更新 更多