From b849c1b734205b0ce14f221400ad39db16e74757 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 25 Aug 2018 17:28:09 +0200 Subject: [PATCH] Made reserved tags check permissions, fixed ulong to/from string differences breaking tags --- DeukBot4/Database/ReminderHandler.cs | 64 +++++++++++-------- .../CommandHandler/TagStorage.cs | 8 +++ 2 files changed, 44 insertions(+), 28 deletions(-) diff --git a/DeukBot4/Database/ReminderHandler.cs b/DeukBot4/Database/ReminderHandler.cs index 8bc33ef..3c6499d 100644 --- a/DeukBot4/Database/ReminderHandler.cs +++ b/DeukBot4/Database/ReminderHandler.cs @@ -8,7 +8,7 @@ namespace DeukBot4.Database public class ReminderHandler { public static ReminderHandler Main = new ReminderHandler(); - public static ConnectionMultiplexer Redis = ConnectionMultiplexer.Connect("127.0.0.1"); + public static ConnectionMultiplexer Redis = ConnectionMultiplexer.Connect("localhost:6379"); public async Task AddReminder(TimeSpan time, string message, ulong channel, ulong author, ulong recipient) @@ -21,10 +21,10 @@ namespace DeukBot4.Database db.SortedSetAddAsync("deukbot_reminders", (RedisValue)id, expectedTime.ToBinary()); db.HashSetAsync((RedisKey) id, new[] { - new HashEntry("channel", channel.ToString()), + new HashEntry("channel", channel.ToString("D")), new HashEntry("message", message), - new HashEntry("author", author.ToString()), - new HashEntry("recipient", recipient.ToString()), + new HashEntry("author", author.ToString("D")), + new HashEntry("recipient", recipient.ToString("D")), }); } catch (Exception e) @@ -36,34 +36,42 @@ namespace DeukBot4.Database public async Task CheckReminders() { var checkTime = TimeSpan.FromSeconds(70); - var startTime = DateTime.UtcNow; - var desiredTopScore = (startTime + checkTime).ToBinary(); - var db = Redis.GetDatabase(); - var reminders = db.SortedSetRangeByScoreWithScores("deukbot_reminders", stop: desiredTopScore); - foreach (var sortedSetEntry in reminders) + try { - var val = sortedSetEntry.Element.ToString(); - var timeLong = sortedSetEntry.Score; - var time = DateTime.FromBinary((long) timeLong); - var data = db.HashGetAll(val); - ulong channel = 0; - ulong author = 0; - ulong recipient = 0; - string message = null; - foreach (var hashEntry in data) + var startTime = DateTime.UtcNow; + var desiredTopScore = (startTime + checkTime).ToBinary(); + var db = Redis.GetDatabase(); + var reminders = db.SortedSetRangeByScoreWithScores("deukbot_reminders", start: Double.MinValue, + stop: desiredTopScore); + foreach (var sortedSetEntry in reminders) { - if (hashEntry.Name == "channel") channel = ulong.Parse(hashEntry.Value); - else if (hashEntry.Name == "message") message = hashEntry.Value; - else if (hashEntry.Name == "author") author = ulong.Parse(hashEntry.Value); - else if (hashEntry.Name == "recipient") recipient = ulong.Parse(hashEntry.Value); + var val = sortedSetEntry.Element.ToString(); + var timeLong = sortedSetEntry.Score; + var time = DateTime.FromBinary((long) timeLong); + var data = db.HashGetAll(val); + ulong channel = 0; + ulong author = 0; + ulong recipient = 0; + string message = null; + foreach (var hashEntry in data) + { + if (hashEntry.Name == "channel") channel = ulong.Parse(hashEntry.Value); + else if (hashEntry.Name == "message") message = hashEntry.Value; + else if (hashEntry.Name == "author") author = ulong.Parse(hashEntry.Value); + else if (hashEntry.Name == "recipient") recipient = ulong.Parse(hashEntry.Value); + } + + var diff = time - DateTime.UtcNow; + FireReminderAtTime((int) diff.TotalSeconds, channel, message, author, recipient); + db.KeyDelete(val); } - var diff = time - DateTime.UtcNow; - FireReminderAtTime((int) diff.TotalSeconds, channel, message, author, recipient); - db.KeyDelete(val); + + db.SortedSetRemoveRangeByScoreAsync("deukbot_reminders", Double.MinValue, desiredTopScore); + } + catch (Exception e) + { + Logger.Main.LogError(e); } - - db.SortedSetRemoveRangeByScoreAsync("deukbot_reminders", Double.MinValue, desiredTopScore); - await Task.Delay(checkTime); await CheckReminders(); } diff --git a/DeukBot4/MessageHandlers/CommandHandler/TagStorage.cs b/DeukBot4/MessageHandlers/CommandHandler/TagStorage.cs index 14f96d0..517ea9c 100644 --- a/DeukBot4/MessageHandlers/CommandHandler/TagStorage.cs +++ b/DeukBot4/MessageHandlers/CommandHandler/TagStorage.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Threading.Tasks; using DeukBot4.Database; using DeukBot4.MessageHandlers.CommandHandler.RequestStructure; +using DeukBot4.MessageHandlers.Permissions; using DeukBot4.Utilities; using Discord; using Npgsql; @@ -199,6 +200,9 @@ namespace DeukBot4.MessageHandlers.CommandHandler var first = split[0].ToLowerInvariant(); if (first == "create") { + var perms = await PermissionValidator.GetUserPermissionLevel(cmd.OriginalMessage); + if (perms < PermissionLevel.Helper) + return; var keyword = split[1]; var rest = split.Skip(2).ToArray().Join(" "); var result = serverTags.AddTag(keyword, rest); @@ -214,6 +218,10 @@ namespace DeukBot4.MessageHandlers.CommandHandler } if (first == "remove" || first == "delete") { + var perms = await PermissionValidator.GetUserPermissionLevel(cmd.OriginalMessage); + if (perms < PermissionLevel.Helper) + return; + var keyword = split[1]; var result = serverTags.RemoveTag(keyword); if (!result.success)