From d2c455a9a605bbef599cd914ef634e9c0efd15f6 Mon Sep 17 00:00:00 2001 From: appelemac Date: Fri, 17 Jun 2016 22:10:51 +0200 Subject: [PATCH] Custom Random range --- .../CustomReactions/CustomReactions.cs | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/NadekoBot/Modules/CustomReactions/CustomReactions.cs b/NadekoBot/Modules/CustomReactions/CustomReactions.cs index 39d59efd..4eee432a 100644 --- a/NadekoBot/Modules/CustomReactions/CustomReactions.cs +++ b/NadekoBot/Modules/CustomReactions/CustomReactions.cs @@ -1,38 +1,42 @@ using Discord.Commands; using Discord.Modules; -using NadekoBot.Extensions; using NadekoBot.Modules.Permissions.Classes; using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; namespace NadekoBot.Modules.CustomReactions { - class CustomReactionsModule : DiscordModule + internal class CustomReactionsModule : DiscordModule { public override string Prefix { get; } = ""; - Random rng = new Random(); + private Random rng = new Random(); - private Dictionary> commandFuncs; + private Dictionary> commandFuncs; public CustomReactionsModule() { - commandFuncs = new Dictionary> + commandFuncs = new Dictionary> { - {"%rng%", (e) => rng.Next().ToString()}, - {"%mention%", (e) => NadekoBot.BotMention }, - {"%user%", e => e.User.Mention }, - {"%target%", e => e.GetArg("args")?.Trim() ?? "" }, + {new Regex(@"%rng:?(\d{0,9})-?(\d{0,9})%"), (e,m) => { + int start, end; + if (int.TryParse(m.Groups[1].Value, out start) && int.TryParse(m.Groups[2].Value, out end)) { + return rng.Next(start, end).ToString(); + } + else return rng.Next().ToString(); + } }, + {new Regex("%mention%"), (e,m) => NadekoBot.BotMention }, + {new Regex("%user%"), (e,m) => e.User.Mention }, + {new Regex("%target%"), (e,m) => e.GetArg("args")?.Trim() ?? "" }, }; } public override void Install(ModuleManager manager) { - manager.CreateCommands("", cgb => { - cgb.AddCheck(PermissionChecker.Instance); foreach (var command in NadekoBot.Config.CustomReactions) @@ -47,11 +51,17 @@ namespace NadekoBot.Modules.CustomReactions .Do(async e => { string str = command.Value[rng.Next(0, command.Value.Count())]; - commandFuncs.Keys.ForEach(k => str = str.Replace(k, commandFuncs[k](e))); + foreach (var key in commandFuncs.Keys) + { + foreach (Match m in key.Matches(str)) + { + str = str.Replace(m.Value, commandFuncs[key](e, m)); + } + } + await e.Channel.SendMessage(str).ConfigureAwait(false); }); } - }); } }