up to 1 command every 0-1.3 seconds per user

This commit is contained in:
Master Kwoth 2016-02-19 08:05:22 +01:00
parent 21c1e95515
commit a0ec4db004

View File

@ -6,18 +6,34 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Discord; using Discord;
using Discord.Commands; using Discord.Commands;
using System.Collections.Concurrent;
namespace NadekoBot.Classes.Permissions { namespace NadekoBot.Classes.Permissions {
class PermissionChecker : IPermissionChecker { class PermissionChecker : IPermissionChecker {
public static readonly PermissionChecker _instance = new PermissionChecker(); public static readonly PermissionChecker _instance = new PermissionChecker();
public static PermissionChecker Instance => _instance; public static PermissionChecker Instance => _instance;
private ConcurrentDictionary<User, DateTime> timeBlackList { get; } = new ConcurrentDictionary<User, DateTime>();
static PermissionChecker() { } static PermissionChecker() { }
public PermissionChecker() { } public PermissionChecker() {
Task.Run(async () => {
while (true) {
//blacklist is cleared every 1.3 seconds. That is the most time anyone will be blocked for ever
await Task.Delay(1300);
timeBlackList.Clear();
}
});
}
public bool CanRun(Command command, User user, Channel channel, out string error) { public bool CanRun(Command command, User user, Channel channel, out string error) {
error = null; error = null;
if (timeBlackList.ContainsKey(user))
return false;
timeBlackList.TryAdd(user, DateTime.Now);
if (channel.IsPrivate) if (channel.IsPrivate)
return true; return true;