Анти-спам команд для дискорд бота
Я хочу сделать чтобы каждый пользователь мог использовать 1 команду раз в 10 секунд. Сначала, я хотел через таймер но у меня не получилось, через DateTime как видно сразу берется 2 дейтайма из двух методов и получается что прошла 1 секунда, то есть команда обработается, а мне нужно чтобы команда не обрабатывалась, а вылазил текст со временем сколько пользователю осталось времени КД команды, через базу данных это легко сделать, но я не хочу мне бы хотелось без неё как-то. библиотека discord.net
public static bool CoolDown(ulong channelid, DateTime last_time)
{
var time = DateTime.Now;
if ((time - last_time).Seconds > 10)
{
return false;
}
else
{
return true;
}
}
private async Task OnMessageReceivedAsync(SocketMessage s)
{
var msg = s as SocketUserMessage;
if (msg == null) return;
if (msg.Author.Id == _discord.CurrentUser.Id) return;
var context = new SocketCommandContext(_discord, msg);
int argPos = 0;
if (msg.HasStringPrefix(_config["prefix"], ref argPos) || msg.HasMentionPrefix(_discord.CurrentUser, ref argPos))
{
var result = await _commands.ExecuteAsync(context, argPos, _provider);
var time = DateTime.Now;
if (result.IsSuccess && !CoolDownCommands.CoolDown(context.Channel.Id, time))
{
await msg.Channel.SendMessageAsync("Вы можете использовать 1 команду раз в 10 сек.");
}
else
{
if (!result.IsSuccess)
await context.Channel.SendMessageAsync(result.ToString());
}
}
}