dnd style $roll (for example: 3d5)
This commit is contained in:
parent
e53aab1870
commit
7c2f922749
@ -6,6 +6,7 @@ using System.Collections.Generic;
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Gambling
|
namespace NadekoBot.Modules.Gambling
|
||||||
@ -19,13 +20,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
internal override void Init(CommandGroupBuilder cgb)
|
internal override void Init(CommandGroupBuilder cgb)
|
||||||
{
|
{
|
||||||
cgb.CreateCommand(Module.Prefix + "roll")
|
cgb.CreateCommand(Module.Prefix + "roll")
|
||||||
.Description("Rolls 0-100. If you supply a number [x] it rolls up to 30 normal dice.\n**Usage**: $roll [x]")
|
.Description("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.\n**Usage**: $roll or $roll 7 or $roll 3d5")
|
||||||
.Parameter("num", ParameterType.Optional)
|
.Parameter("num", ParameterType.Optional)
|
||||||
.Do(Roll0to10Func());
|
.Do(RollFunc());
|
||||||
cgb.CreateCommand(Module.Prefix + "nroll")
|
cgb.CreateCommand(Module.Prefix + "nroll")
|
||||||
.Description("Rolls in a given range.\n**Usage**: `$nroll 5` (rolls 0-5) or `$nroll 5-15`")
|
.Description("Rolls in a given range.\n**Usage**: `$nroll 5` (rolls 0-5) or `$nroll 5-15`")
|
||||||
.Parameter("range", ParameterType.Required)
|
.Parameter("range", ParameterType.Required)
|
||||||
.Do(Roll0to5Func());
|
.Do(NRollFunc());
|
||||||
}
|
}
|
||||||
|
|
||||||
private Image GetDice(int num) => num != 10
|
private Image GetDice(int num) => num != 10
|
||||||
@ -36,12 +38,15 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
(Properties.Resources.ResourceManager.GetObject("_" + 0) as Image),
|
(Properties.Resources.ResourceManager.GetObject("_" + 0) as Image),
|
||||||
}.Merge();
|
}.Merge();
|
||||||
|
|
||||||
private Func<CommandEventArgs, Task> Roll0to10Func()
|
|
||||||
|
Regex dndRegex = new Regex(@"(?<n1>\d+)d(?<n2>\d+)", RegexOptions.Compiled);
|
||||||
|
private Func<CommandEventArgs, Task> RollFunc()
|
||||||
{
|
{
|
||||||
var r = new Random();
|
var r = new Random();
|
||||||
return async e =>
|
return async e =>
|
||||||
{
|
{
|
||||||
if (e.Args[0] == "")
|
var arg = e.Args[0]?.Trim();
|
||||||
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
{
|
{
|
||||||
var gen = r.Next(0, 101);
|
var gen = r.Next(0, 101);
|
||||||
|
|
||||||
@ -51,9 +56,25 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var imageStream = new Image[2] { GetDice(num1), GetDice(num2) }.Merge().ToStream(ImageFormat.Png);
|
var imageStream = new Image[2] { GetDice(num1), GetDice(num2) }.Merge().ToStream(ImageFormat.Png);
|
||||||
|
|
||||||
await e.Channel.SendFile("dice.png", imageStream);
|
await e.Channel.SendFile("dice.png", imageStream);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
Match m;
|
||||||
|
if ((m = dndRegex.Match(arg)).Length != 0)
|
||||||
{
|
{
|
||||||
|
int n1;
|
||||||
|
int n2;
|
||||||
|
if (int.TryParse(m.Groups["n1"].ToString(), out n1) &&
|
||||||
|
int.TryParse(m.Groups["n2"].ToString(), out n2) &&
|
||||||
|
n1 <= 50 && n2 <= 100000 && n1 > 0 && n2 > 0)
|
||||||
|
{
|
||||||
|
var arr = new int[n1];
|
||||||
|
for (int i = 0; i < n1; i++)
|
||||||
|
{
|
||||||
|
arr[i] = r.Next(1, n2 + 1);
|
||||||
|
}
|
||||||
|
await e.Channel.SendMessage($"`Rolled {n1} {(n1 == 1 ? "die" : "dice")} 1-{n2}.`\n`Result:`" + string.Join(", ", arr.OrderBy(x => x)));
|
||||||
|
}
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var num = int.Parse(e.Args[0]);
|
var num = int.Parse(e.Args[0]);
|
||||||
@ -92,12 +113,11 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
{
|
{
|
||||||
await e.Channel.SendMessage("Please enter a number of dice to roll.");
|
await e.Channel.SendMessage("Please enter a number of dice to roll.");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Func<CommandEventArgs, Task> Roll0to5Func() =>
|
private Func<CommandEventArgs, Task> NRollFunc() =>
|
||||||
async e =>
|
async e =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
Loading…
Reference in New Issue
Block a user