diff --git a/Feature/AutoMod/AutoMod.cs b/Feature/AutoMod/AutoMod.cs index 75776bc..733cca4 100644 --- a/Feature/AutoMod/AutoMod.cs +++ b/Feature/AutoMod/AutoMod.cs @@ -1,6 +1,5 @@ using Discord.WebSocket; using Newtonsoft.Json.Linq; -using Noikoio.RegexBot.Feature.AutoMod.Responses; using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -28,12 +27,12 @@ namespace Noikoio.RegexBot.Feature.AutoMod [ConfigSection("automod")] public override async Task ProcessConfiguration(JToken configSection) { - List rules = new List(); + List rules = new List(); foreach (var def in configSection.Children()) { string label = def.Name; - var rule = new Rule(this, def); + var rule = new ConfigItem(this, def); rules.Add(rule); } if (rules.Count > 0) @@ -56,12 +55,12 @@ namespace Noikoio.RegexBot.Feature.AutoMod if (ch == null) return; // Get rules - var rules = GetConfig(ch.Guild.Id) as IEnumerable; + var rules = GetConfig(ch.Guild.Id) as IEnumerable; if (rules == null) return; foreach (var rule in rules) { - // Checking for mod bypass here (Rule.Match isn't able to access mod list) + // Checking for mod bypass here (ConfigItem.Match isn't able to access mod list) bool isMod = IsModerator(ch.Guild.Id, m); await Task.Run(async () => await ProcessMessage(m, rule, isMod)); } @@ -70,14 +69,14 @@ namespace Noikoio.RegexBot.Feature.AutoMod /// /// Checks if the incoming message matches the given rule, and executes responses if necessary. /// - private async Task ProcessMessage(SocketMessage m, Rule r, bool isMod) + private async Task ProcessMessage(SocketMessage m, ConfigItem r, bool isMod) { if (!r.Match(m, isMod)) return; // TODO make log optional; configurable await Log($"{r} triggered by {m.Author} in {((SocketGuildChannel)m.Channel).Guild.Name}/#{m.Channel.Name}"); - foreach (Response resp in r.Response) + foreach (ResponseBase resp in r.Response) { try { diff --git a/Feature/AutoMod/Rule.cs b/Feature/AutoMod/ConfigItem.cs similarity index 94% rename from Feature/AutoMod/Rule.cs rename to Feature/AutoMod/ConfigItem.cs index dd767db..776dc24 100644 --- a/Feature/AutoMod/Rule.cs +++ b/Feature/AutoMod/ConfigItem.cs @@ -2,7 +2,6 @@ using Discord.WebSocket; using Newtonsoft.Json.Linq; using Noikoio.RegexBot.ConfigItem; -using Noikoio.RegexBot.Feature.AutoMod.Responses; using System; using System.Collections.Generic; using System.Text; @@ -15,12 +14,12 @@ namespace Noikoio.RegexBot.Feature.AutoMod /// Representation of a single AutoMod rule. /// Data stored within cannot be edited. /// - class Rule + class ConfigItem { readonly AutoMod _instance; readonly string _label; readonly IEnumerable _regex; - readonly ICollection _responses; + readonly ICollection _responses; readonly FilterList _filter; readonly int _msgMinLength; readonly int _msgMaxLength; @@ -29,7 +28,7 @@ namespace Noikoio.RegexBot.Feature.AutoMod public string Label => _label; public IEnumerable Regex => _regex; - public ICollection Response => _responses; + public ICollection Response => _responses; public FilterList Filter => _filter; public (int?, int?) MatchLengthMinMaxLimit => (_msgMinLength, _msgMaxLength); public bool AllowsModBypass => _modBypass; @@ -41,7 +40,7 @@ namespace Noikoio.RegexBot.Feature.AutoMod /// /// Creates a new Rule instance to represent the given configuration. /// - public Rule(AutoMod instance, JProperty definition) + public ConfigItem(AutoMod instance, JProperty definition) { _instance = instance; @@ -123,11 +122,11 @@ namespace Noikoio.RegexBot.Feature.AutoMod { if (rsconf.Type == JTokenType.Array) { - _responses = Responses.Response.ReadConfiguration(this, rsconf.Values()); + _responses = ResponseBase.ReadConfiguration(this, rsconf.Values()); } else { - _responses = Responses.Response.ReadConfiguration(this, new string[] { rsconf.Value() }); + _responses = ResponseBase.ReadConfiguration(this, new string[] { rsconf.Value() }); } } catch (RuleImportException ex) diff --git a/Feature/AutoMod/Responses/Response.cs b/Feature/AutoMod/ResponseBase.cs similarity index 81% rename from Feature/AutoMod/Responses/Response.cs rename to Feature/AutoMod/ResponseBase.cs index 5149aed..67a9f20 100644 --- a/Feature/AutoMod/Responses/Response.cs +++ b/Feature/AutoMod/ResponseBase.cs @@ -7,19 +7,19 @@ using System.Collections.ObjectModel; using System.Diagnostics; using System.Threading.Tasks; -namespace Noikoio.RegexBot.Feature.AutoMod.Responses +namespace Noikoio.RegexBot.Feature.AutoMod { /// /// Base class for all Response classes. /// Contains helper methods for use by response code. /// [DebuggerDisplay("Response: {_cmdline}")] - abstract class Response + abstract class ResponseBase { - private readonly Rule _rule; + private readonly ConfigItem _rule; private readonly string _cmdline; - protected Rule Rule => _rule; + protected ConfigItem Rule => _rule; private DiscordSocketClient Client => _rule.Discord; public string CmdLine => _cmdline; public string CmdArg0 { @@ -33,7 +33,7 @@ namespace Noikoio.RegexBot.Feature.AutoMod.Responses /// /// Deriving constructor should do validation of incoming . /// - public Response(Rule rule, string cmdline) + public ResponseBase(ConfigItem rule, string cmdline) { _rule = rule; _cmdline = cmdline; @@ -54,23 +54,23 @@ namespace Noikoio.RegexBot.Feature.AutoMod.Responses new Dictionary(StringComparer.OrdinalIgnoreCase) { // Define all accepted commands and their corresponding types here - { "say", typeof(Say) }, - { "send", typeof(Say) }, - { "report", typeof(Report) }, - { "addrole", typeof(RoleManipulation) }, - { "grantrole", typeof(RoleManipulation) }, - { "delrole", typeof(RoleManipulation) }, - { "removerole", typeof(RoleManipulation) }, - { "revokerole", typeof(RoleManipulation) }, - { "delete", typeof(Remove) }, - { "remove", typeof(Remove) }, - { "kick", typeof(Kick) }, - { "ban", typeof(Ban) } + { "ban", typeof(Responses.Ban) }, + { "kick", typeof(Responses.Kick) }, + { "say", typeof(Responses.Say) }, + { "send", typeof(Responses.Say) }, + { "delete", typeof(Responses.Remove) }, + { "remove", typeof(Responses.Remove) }, + { "report", typeof(Responses.Report) }, + { "addrole", typeof(Responses.RoleManipulation) }, + { "grantrole", typeof(Responses.RoleManipulation) }, + { "delrole", typeof(Responses.RoleManipulation) }, + { "removerole", typeof(Responses.RoleManipulation) }, + { "revokerole", typeof(Responses.RoleManipulation) } }); - public static Response[] ReadConfiguration(Rule r, IEnumerable responses) + public static ResponseBase[] ReadConfiguration(ConfigItem r, IEnumerable responses) { - var result = new List(); + var result = new List(); foreach (var line in responses) { if (string.IsNullOrWhiteSpace(line)) @@ -84,7 +84,7 @@ namespace Noikoio.RegexBot.Feature.AutoMod.Responses if (!_commands.TryGetValue(basecmd, out rt)) throw new RuleImportException($"'{basecmd}' is not a valid response"); - var newresponse = Activator.CreateInstance(rt, r, line) as Response; + var newresponse = Activator.CreateInstance(rt, r, line) as ResponseBase; if (newresponse == null) throw new Exception("An unknown error occurred when attempting to create a new Response object."); result.Add(newresponse); diff --git a/Feature/AutoMod/Responses/Ban.cs b/Feature/AutoMod/Responses/Ban.cs index 41b7139..0cdd066 100644 --- a/Feature/AutoMod/Responses/Ban.cs +++ b/Feature/AutoMod/Responses/Ban.cs @@ -9,11 +9,11 @@ namespace Noikoio.RegexBot.Feature.AutoMod.Responses /// Bans the invoking user. /// Parameters: ban [days = 0] /// - class Ban : Response + class Ban : ResponseBase { readonly int _purgeDays; - public Ban(Rule rule, string cmdline) : base(rule, cmdline) + public Ban(ConfigItem rule, string cmdline) : base(rule, cmdline) { var line = cmdline.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (line.Length == 1) diff --git a/Feature/AutoMod/Responses/Kick.cs b/Feature/AutoMod/Responses/Kick.cs index df43cfe..48e311a 100644 --- a/Feature/AutoMod/Responses/Kick.cs +++ b/Feature/AutoMod/Responses/Kick.cs @@ -9,9 +9,9 @@ namespace Noikoio.RegexBot.Feature.AutoMod.Responses /// Kicks the invoking user. /// Takes no parameters. /// - class Kick : Response + class Kick : ResponseBase { - public Kick(Rule rule, string cmdline) : base(rule, cmdline) + public Kick(ConfigItem rule, string cmdline) : base(rule, cmdline) { // Throw exception if extra parameters found if (cmdline.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length > 1) diff --git a/Feature/AutoMod/Responses/Remove.cs b/Feature/AutoMod/Responses/Remove.cs index 7f4d949..bc9af6a 100644 --- a/Feature/AutoMod/Responses/Remove.cs +++ b/Feature/AutoMod/Responses/Remove.cs @@ -9,9 +9,9 @@ namespace Noikoio.RegexBot.Feature.AutoMod.Responses /// Removes the invoking message. /// Takes no parameters. /// - class Remove : Response + class Remove : ResponseBase { - public Remove(Rule rule, string cmdline) : base(rule, cmdline) + public Remove(ConfigItem rule, string cmdline) : base(rule, cmdline) { // Throw exception if extra parameters found if (cmdline.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length > 1) diff --git a/Feature/AutoMod/Responses/Report.cs b/Feature/AutoMod/Responses/Report.cs index 00efe50..c858899 100644 --- a/Feature/AutoMod/Responses/Report.cs +++ b/Feature/AutoMod/Responses/Report.cs @@ -12,11 +12,11 @@ namespace Noikoio.RegexBot.Feature.AutoMod.Responses /// about the rule making use of this command, to the given target. /// Parameters: report (target) /// - class Report : Response + class Report : ResponseBase { readonly string _target; - public Report(Rule rule, string cmdline) : base(rule, cmdline) + public Report(ConfigItem rule, string cmdline) : base(rule, cmdline) { var line = cmdline.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (line.Length != 2) throw new RuleImportException("Incorrect number of parameters"); diff --git a/Feature/AutoMod/Responses/RoleManipulation.cs b/Feature/AutoMod/Responses/RoleManipulation.cs index 3fd57ba..75dab33 100644 --- a/Feature/AutoMod/Responses/RoleManipulation.cs +++ b/Feature/AutoMod/Responses/RoleManipulation.cs @@ -10,7 +10,7 @@ namespace Noikoio.RegexBot.Feature.AutoMod.Responses /// Manipulates a given user's role. /// Parameters: (command) (target) (role ID) /// - class RoleManipulation : Response + class RoleManipulation : ResponseBase { enum ManipulationType { None, Add, Remove } @@ -18,7 +18,7 @@ namespace Noikoio.RegexBot.Feature.AutoMod.Responses readonly string _target; readonly EntityName _role; - public RoleManipulation(Rule rule, string cmdline) : base(rule, cmdline) + public RoleManipulation(ConfigItem rule, string cmdline) : base(rule, cmdline) { var line = cmdline.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (line.Length != 3) diff --git a/Feature/AutoMod/Responses/Say.cs b/Feature/AutoMod/Responses/Say.cs index 3dcbc8e..b793e5e 100644 --- a/Feature/AutoMod/Responses/Say.cs +++ b/Feature/AutoMod/Responses/Say.cs @@ -9,12 +9,12 @@ namespace Noikoio.RegexBot.Feature.AutoMod.Responses /// Sends a message to the given target. /// Parameters: say (target) (message) /// - class Say : Response + class Say : ResponseBase { private readonly string _target; private readonly string _payload; - public Say(Rule rule, string cmdline) : base(rule, cmdline) + public Say(ConfigItem rule, string cmdline) : base(rule, cmdline) { var line = cmdline.Split(new char[] { ' ' }, 3, StringSplitOptions.RemoveEmptyEntries); if (line.Length != 3) throw new RuleImportException("Incorrect number of parameters."); diff --git a/Feature/AutoRespond/AutoRespond.cs b/Feature/AutoRespond/AutoRespond.cs index eabf587..9897c9b 100644 --- a/Feature/AutoRespond/AutoRespond.cs +++ b/Feature/AutoRespond/AutoRespond.cs @@ -34,7 +34,7 @@ namespace Noikoio.RegexBot.Feature.AutoRespond if (ch == null) return; // TODO either search server by name or remove server name support entirely - var defs = GetConfig(ch.Guild.Id) as IEnumerable; + var defs = GetConfig(ch.Guild.Id) as IEnumerable; if (defs == null) return; foreach (var def in defs) @@ -44,11 +44,11 @@ namespace Noikoio.RegexBot.Feature.AutoRespond [ConfigSection("autoresponses")] public override async Task ProcessConfiguration(JToken configSection) { - var responses = new List(); + var responses = new List(); foreach (var def in configSection.Children()) { // All validation is left to the constructor - var resp = new ResponseDefinition(def); + var resp = new ConfigItem(def); responses.Add(resp); } diff --git a/Feature/AutoRespond/AutoRespond_Process.cs b/Feature/AutoRespond/AutoRespond_Process.cs index 0275b98..aca8689 100644 --- a/Feature/AutoRespond/AutoRespond_Process.cs +++ b/Feature/AutoRespond/AutoRespond_Process.cs @@ -6,7 +6,7 @@ namespace Noikoio.RegexBot.Feature.AutoRespond { partial class AutoRespond { - private async Task ProcessMessage(SocketMessage msg, ResponseDefinition def) + private async Task ProcessMessage(SocketMessage msg, ConfigItem def) { // Check filters if (def.Filter.IsFiltered(msg)) return; @@ -19,8 +19,8 @@ namespace Noikoio.RegexBot.Feature.AutoRespond await Log($"'{def.Label}' triggered by {msg.Author} in {((SocketGuildChannel)msg.Channel).Guild.Name}/#{msg.Channel.Name}"); var (type, text) = def.Response; - if (type == ResponseDefinition.ResponseType.Reply) await ProcessReply(msg, text); - else if (type == ResponseDefinition.ResponseType.Exec) await ProcessExec(msg, text); + if (type == ConfigItem.ResponseType.Reply) await ProcessReply(msg, text); + else if (type == ConfigItem.ResponseType.Exec) await ProcessExec(msg, text); } private async Task ProcessReply(SocketMessage msg, string text) diff --git a/Feature/AutoRespond/ResponseDefinition.cs b/Feature/AutoRespond/ConfigItem.cs similarity index 97% rename from Feature/AutoRespond/ResponseDefinition.cs rename to Feature/AutoRespond/ConfigItem.cs index 9b0f05e..c489ca5 100644 --- a/Feature/AutoRespond/ResponseDefinition.cs +++ b/Feature/AutoRespond/ConfigItem.cs @@ -8,7 +8,7 @@ namespace Noikoio.RegexBot.Feature.AutoRespond /// /// Represents a single autoresponse definition. /// - class ResponseDefinition + class ConfigItem { public enum ResponseType { None, Exec, Reply } @@ -25,7 +25,7 @@ namespace Noikoio.RegexBot.Feature.AutoRespond public FilterList Filter => _filter; public RateLimitCache RateLimit => _limit; - public ResponseDefinition(JProperty definition) + public ConfigItem(JProperty definition) { _label = definition.Name; var data = (JObject)definition.Value;