Can roll fate dice now with $roll 5dF
				
					
				
			This commit is contained in:
		@@ -19,6 +19,9 @@ namespace NadekoBot.Modules.Gambling
 | 
			
		||||
        public class DriceRollCommands
 | 
			
		||||
        {
 | 
			
		||||
            private Regex dndRegex { get; } = new Regex(@"^(?<n1>\d+)d(?<n2>\d+)(?:\+(?<add>\d+))?(?:\-(?<sub>\d+))?$", RegexOptions.Compiled);
 | 
			
		||||
            private Regex fudgeRegex { get; } = new Regex(@"^(?<n1>\d+)d(?:F|f)$", RegexOptions.Compiled);
 | 
			
		||||
 | 
			
		||||
            private readonly char[] fateRolls = new[] { '-', ' ', '+' };
 | 
			
		||||
 | 
			
		||||
            [NadekoCommand, Usage, Description, Aliases]
 | 
			
		||||
            [RequireContext(ContextType.Guild)]
 | 
			
		||||
@@ -86,6 +89,17 @@ namespace NadekoBot.Modules.Gambling
 | 
			
		||||
                await InternallDndRoll(umsg, arg, false).ConfigureAwait(false);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            [NadekoCommand, Usage, Description, Aliases]
 | 
			
		||||
            [RequireContext(ContextType.Guild)]
 | 
			
		||||
            public async Task FateRoll(IUserMessage msg, string arg)
 | 
			
		||||
            {
 | 
			
		||||
                var channel = (ITextChannel)msg.Channel;
 | 
			
		||||
 | 
			
		||||
                int n1;
 | 
			
		||||
                Match match;
 | 
			
		||||
                
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            private async Task InternalRoll(IUserMessage umsg, int num, bool ordered)
 | 
			
		||||
            {
 | 
			
		||||
                var channel = (ITextChannel)umsg.Channel;
 | 
			
		||||
@@ -141,12 +155,29 @@ namespace NadekoBot.Modules.Gambling
 | 
			
		||||
                if (channel == null)
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                var rng = new NadekoRandom();
 | 
			
		||||
                Match match;
 | 
			
		||||
                if ((match = dndRegex.Match(arg)).Length != 0)
 | 
			
		||||
                int n1;
 | 
			
		||||
                int n2;
 | 
			
		||||
                if ((match = fudgeRegex.Match(arg)).Length != 0 &&
 | 
			
		||||
                    int.TryParse(match.Groups["n1"].ToString(), out n1) &&
 | 
			
		||||
                    n1 > 0 && n1 < 500)
 | 
			
		||||
                {
 | 
			
		||||
                    int n1;
 | 
			
		||||
                    int n2;
 | 
			
		||||
                    var rng = new NadekoRandom();
 | 
			
		||||
 | 
			
		||||
                    var rolls = new List<char>();
 | 
			
		||||
                    
 | 
			
		||||
                    for (int i = 0; i < n1; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        rolls.Add(fateRolls[rng.Next(0, fateRolls.Length)]);
 | 
			
		||||
                    }
 | 
			
		||||
                    var embed = new EmbedBuilder().WithOkColor().WithDescription($"{umsg.Author.Mention} rolled {n1} fate {(n1 == 1 ? "die" : "dice")}.")
 | 
			
		||||
                        .AddField(efb => efb.WithName(Format.Bold("Result"))
 | 
			
		||||
                            .WithValue(string.Join(" ", rolls.Select(c => Format.Code($"[{c}]")))));
 | 
			
		||||
                    await channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
 | 
			
		||||
                }
 | 
			
		||||
                else if ((match = dndRegex.Match(arg)).Length != 0)
 | 
			
		||||
                {
 | 
			
		||||
                    var rng = new NadekoRandom();
 | 
			
		||||
                    if (int.TryParse(match.Groups["n1"].ToString(), out n1) &&
 | 
			
		||||
                        int.TryParse(match.Groups["n2"].ToString(), out n2) &&
 | 
			
		||||
                        n1 <= 50 && n2 <= 100000 && n1 > 0 && n2 > 0)
 | 
			
		||||
 
 | 
			
		||||
@@ -220,7 +220,9 @@ namespace NadekoBot.Modules.Utility
 | 
			
		||||
                    .AddField(efb => efb.WithName(Format.Bold("Owner ID(s)")).WithValue(stats.OwnerIds).WithIsInline(true))
 | 
			
		||||
                    .AddField(efb => efb.WithName(Format.Bold("Uptime")).WithValue(stats.GetUptimeString("\n")).WithIsInline(true))
 | 
			
		||||
                    .AddField(efb => efb.WithName(Format.Bold("Presence")).WithValue($"{NadekoBot.Client.GetGuilds().Count} Servers\n{stats.TextChannels} Text Channels\n{stats.VoiceChannels} Voice Channels").WithIsInline(true))
 | 
			
		||||
#if !GLOBAL_NADEKO
 | 
			
		||||
                    .WithFooter(efb => efb.WithText($"Playing {Music.Music.MusicPlayers.Where(mp => mp.Value.CurrentSong != null).Count()} songs, {Music.Music.MusicPlayers.Sum(mp => mp.Value.Playlist.Count)} queued."))
 | 
			
		||||
#endif
 | 
			
		||||
                    .Build());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1192,10 +1192,10 @@
 | 
			
		||||
    <value>roll</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="roll_desc" xml:space="preserve">
 | 
			
		||||
    <value>Rolls 0-100. If you supply a number [x] it rolls up to 30 normal dice. If you split 2 numbers with letter d (xdy) it will roll x dice from 1 to y.</value>
 | 
			
		||||
    <value>Rolls 0-100. If you supply a number [x] it rolls up to 30 normal dice. If you split 2 numbers with letter d (xdy) it will roll x dice from 1 to y. Y can be a letter 'F' if you want to roll fate dice instead of dnd.</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="roll_usage" xml:space="preserve">
 | 
			
		||||
    <value>`{0}roll` or `{0}roll 7` or `{0}roll 3d5`</value>
 | 
			
		||||
    <value>`{0}roll` or `{0}roll 7` or `{0}roll 3d5` or `{0}roll 5dF`</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="rolluo_cmd" xml:space="preserve">
 | 
			
		||||
    <value>rolluo</value>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user