mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-10 17:28:27 -04:00
36 lines
1.1 KiB
C#
36 lines
1.1 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace NadekoBot.Common.Attributes;
|
|
|
|
[AttributeUsage(AttributeTargets.Method)]
|
|
public sealed class RatelimitAttribute : PreconditionAttribute
|
|
{
|
|
public int Seconds { get; }
|
|
|
|
public RatelimitAttribute(int seconds)
|
|
{
|
|
if (seconds <= 0)
|
|
throw new ArgumentOutOfRangeException(nameof(seconds));
|
|
|
|
Seconds = seconds;
|
|
}
|
|
|
|
public override Task<PreconditionResult> CheckPermissionsAsync(
|
|
ICommandContext context,
|
|
CommandInfo command,
|
|
IServiceProvider services)
|
|
{
|
|
if (Seconds == 0)
|
|
return Task.FromResult(PreconditionResult.FromSuccess());
|
|
|
|
var cache = services.GetRequiredService<IDataCache>();
|
|
var rem = cache.TryAddRatelimit(context.User.Id, command.Name, Seconds);
|
|
|
|
if (rem is null)
|
|
return Task.FromResult(PreconditionResult.FromSuccess());
|
|
|
|
var msgContent = $"You can use this command again in {rem.Value.TotalSeconds:F1}s.";
|
|
|
|
return Task.FromResult(PreconditionResult.FromError(msgContent));
|
|
}
|
|
} |