在我的
MessageRecieved
事件处理程序中,我有代码处理用户发送到 Discord 文本通道中的关键字文本。如果文本中存在某些关键字,它将返回与消息中找到的关键字相对应的 GIF 链接。例如,“敏捷的棕色狐狸跳过了懒狗”。如果“fox”和“dog”是我的关键字列表的一部分,则该事件将在 Discord 中返回狐狸 GIF 和狗 GIF。
当然,如果用户在 Discord 中垃圾邮件关键字并用 GIF 填充文本通道,那会非常令人讨厌,所以我想实现一个冷却功能来限制垃圾邮件(和速率限制)。
我该怎么做?
在 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;
}
尽管用户询问命令的冷却时间,但我对事件的冷却时间使用了相同的逻辑。