diff --git a/docs/Custom Reactions.md b/docs/Custom Reactions.md index 51995e26..3d99cb23 100644 --- a/docs/Custom Reactions.md +++ b/docs/Custom Reactions.md @@ -43,6 +43,7 @@ There are currently three different placeholders which we will look at, with mor |`%mention`|The `%mention%` placeholder is triggered when you type `@BotName` - It's important to note that if you've given the bot a custom nickname, this trigger won't work!|```.acr "Hello %mention%" I, %mention%, also say hello!```|Input: "Hello @BotName" Output: "I, @BotName, also say hello!"| |`%user%`|The `%user%` placeholder mentions the person who said the command|`.acr "Who am I?" You are %user%!`|Input: "Who am I?" Output: "You are @Username!"| |`%rng%`|The `%rng%` placeholder generates a random number between 0 and 10. You can also specify a custom range (%rng1-100%) even with negative numbers: `%rng-9--1%` (from -9 to -1) . |`.acr "Random number" %rng%`|Input: "Random number" Output: "2"| +|`%rnduser%`|The `%rnduser%` placeholder mentions a random user from the server. |`.acr "Random user" %rnduser%`|Input: "Random number" Output: @SomeUser| |`%target%`|The `%target%` placeholder is used to make Nadeko Mention another person or phrase, it is only supported as part of the response|`.acr "Say this: " %target%`|Input: "Say this: I, @BotName, am a parrot!". Output: "I, @BotName, am a parrot!".| Thanks to Nekai for being creative. <3 diff --git a/src/NadekoBot/Modules/CustomReactions/Extensions.cs b/src/NadekoBot/Modules/CustomReactions/Extensions.cs index a8a46a90..49b2909f 100644 --- a/src/NadekoBot/Modules/CustomReactions/Extensions.cs +++ b/src/NadekoBot/Modules/CustomReactions/Extensions.cs @@ -1,8 +1,10 @@ using Discord; +using NadekoBot.Extensions; using NadekoBot.Services; using NadekoBot.Services.Database.Models; using System; using System.Collections.Generic; +using System.Linq; using System.Text.RegularExpressions; namespace NadekoBot.Modules.CustomReactions @@ -18,6 +20,15 @@ namespace NadekoBot.Modules.CustomReactions { {"%mention%", (ctx) => { return $"<@{NadekoBot.Client.GetCurrentUser().Id}>"; } }, {"%user%", (ctx) => { return ctx.Author.Mention; } }, + {"%rnduser%", (ctx) => { + var ch = ctx.Channel as ITextChannel; + if(ch == null) + return ""; + + var usrs = (ch.Guild.GetUsersAsync().GetAwaiter().GetResult()); + + return usrs.Skip(new NadekoRandom().Next(0,usrs.Count-1)).Shuffle().FirstOrDefault()?.Mention ?? ""; + } } //{"%rng%", (ctx) => { return new NadekoRandom().Next(0,10).ToString(); } } };