Can roll fate dice now with $roll 5dF
This commit is contained in:
parent
82704166ab
commit
9b26bd9ee5
@ -19,6 +19,9 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
public class DriceRollCommands
|
public class DriceRollCommands
|
||||||
{
|
{
|
||||||
private Regex dndRegex { get; } = new Regex(@"^(?<n1>\d+)d(?<n2>\d+)(?:\+(?<add>\d+))?(?:\-(?<sub>\d+))?$", RegexOptions.Compiled);
|
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]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
@ -86,6 +89,17 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
await InternallDndRoll(umsg, arg, false).ConfigureAwait(false);
|
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)
|
private async Task InternalRoll(IUserMessage umsg, int num, bool ordered)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)umsg.Channel;
|
||||||
@ -141,12 +155,29 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
if (channel == null)
|
if (channel == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var rng = new NadekoRandom();
|
|
||||||
Match match;
|
Match match;
|
||||||
if ((match = dndRegex.Match(arg)).Length != 0)
|
|
||||||
{
|
|
||||||
int n1;
|
int n1;
|
||||||
int n2;
|
int n2;
|
||||||
|
if ((match = fudgeRegex.Match(arg)).Length != 0 &&
|
||||||
|
int.TryParse(match.Groups["n1"].ToString(), out n1) &&
|
||||||
|
n1 > 0 && n1 < 500)
|
||||||
|
{
|
||||||
|
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) &&
|
if (int.TryParse(match.Groups["n1"].ToString(), out n1) &&
|
||||||
int.TryParse(match.Groups["n2"].ToString(), out n2) &&
|
int.TryParse(match.Groups["n2"].ToString(), out n2) &&
|
||||||
n1 <= 50 && n2 <= 100000 && n1 > 0 && n2 > 0)
|
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("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("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))
|
.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."))
|
.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());
|
.Build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1192,10 +1192,10 @@
|
|||||||
<value>roll</value>
|
<value>roll</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="roll_desc" xml:space="preserve">
|
<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>
|
||||||
<data name="roll_usage" xml:space="preserve">
|
<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>
|
||||||
<data name="rolluo_cmd" xml:space="preserve">
|
<data name="rolluo_cmd" xml:space="preserve">
|
||||||
<value>rolluo</value>
|
<value>rolluo</value>
|
||||||
|
Loading…
Reference in New Issue
Block a user