我如何在 Discord.Net 中实现事件或命令的冷却时间?

问题描述 投票:0回答:1

在我的

MessageRecieved
事件处理程序中,我有代码处理用户发送到 Discord 文本通道中的关键字文本。如果文本中存在某些关键字,它将返回与消息中找到的关键字相对应的 GIF 链接。例如,“敏捷的棕色狐狸跳过了懒狗”。如果“fox”和“dog”是我的关键字列表的一部分,则该事件将在 Discord 中返回狐狸 GIF 和狗 GIF。

当然,如果用户在 Discord 中垃圾邮件关键字并用 GIF 填充文本通道,那会非常令人讨厌,所以我想实现一个冷却功能来限制垃圾邮件(和速率限制)。

我该怎么做?

c# events discord.net
1个回答
0
投票

在 Discord API 服务器的

#dotnet_discord_net
频道中,我发现了 2023 年 4 月的这个示例,用于回答类似的问题。

private static readonly ConcurrentDictionary<ulong, DateTimeOffset> CommandExecutionTimestamps = new();

        [SlashCommand("example", "?")]
        public async Task ExampleCommand()
        {
            if (CommandExecutionTimestamps.TryGetValue(Context.User.Id, out var lastExecution) &&
                (DateTimeOffset.Now - lastExecution) < TimeSpan.FromSeconds(5))
            {
                await RespondAsync("Timeout", ephemeral: true);
                return;
            }
            
            await RespondAsync("Hello", ephemeral: true);
            CommandExecutionTimestamps[Context.User.Id] = DateTimeOffset.Now;
        }

尽管用户询问命令的冷却时间,但我对事件的冷却时间使用了相同的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.