public async Task MainAsync() { _client = new DiscordSocketClient(); _rng = new Random(); _logger = new Logger(); _diceParser = new DiceParser(_rng); _client.Log += _logger.Log; var token = File.ReadLines("token.txt").First(); _client.MessageUpdated += MessageUpdated; _client.MessageReceived += OnMessageReceivedAsync; _client.Ready += () => { Console.WriteLine("Bot is connected!"); return(Task.CompletedTask); }; await _client.LoginAsync(TokenType.Bot, token); await _client.StartAsync(); await _client.SetGameAsync("~help"); // Block this task until the program is closed. await Task.Delay(-1); }
public static void Main(string[] args) { LineEditor lineEditor = new LineEditor("DiceShell"); string input; while ((input = lineEditor.Edit("DiceShell $ ", "")) != null) { if (string.IsNullOrEmpty(input)) { continue; } try { AntlrInputStream inputStream = new AntlrInputStream(input); DiceLexer diceLexer = new DiceLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(diceLexer); DiceParser diceParser = new DiceParser(commonTokenStream); DiceParser.ShellContext context = diceParser.shell(); DiceVisitor visitor = new DiceVisitor(); int result = (int)visitor.Visit(context); Console.WriteLine(string.Format("[{0:HH:mm:ss}] {1}\n", DateTime.Now, result)); } catch (Exception) { Console.WriteLine("Parsing Error\n"); } } }
public void DiceParser_TokenizeParenthesesSimpleTest() { // setup test DiceParser parser = new DiceParser(); // run test List <string> result = parser.Tokenize("4d6k3 + (d8 - 2)"); // validate results Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(List <string>)); Assert.AreEqual(13, result.Count); Assert.AreEqual("4", result[0]); Assert.AreEqual("d", result[1]); Assert.AreEqual("6", result[2]); Assert.AreEqual("k", result[3]); Assert.AreEqual("3", result[4]); Assert.AreEqual("+", result[5]); Assert.AreEqual("(", result[6]); Assert.AreEqual("1", result[7]); Assert.AreEqual("d", result[8]); Assert.AreEqual("8", result[9]); Assert.AreEqual("-", result[10]); Assert.AreEqual("2", result[11]); Assert.AreEqual(")", result[12]); }
public void DiceParser_ParseDiceWithExplodingNoValueRandomTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("10d6!", this.config, new RandomDieRoller()); // validate results Assert.IsNotNull(result); Assert.AreEqual("10d6!", result.DiceExpression); int sum = 0, count = 10; foreach (TermResult r in result.Results) { Assert.IsNotNull(r); Assert.AreEqual(1, r.Scalar); AssertHelpers.IsWithinRangeInclusive(1, 6, r.Value); Assert.AreEqual("DiceTerm.d6", r.Type); sum += r.Value; if (r.Value >= 6) { count++; } } Assert.AreEqual(count, result.Results.Count); Assert.AreEqual(sum, result.Value); }
private static DiceParser Setup(string text) { AntlrInputStream inputStream = new AntlrInputStream(text); DiceLexer diceLexer = new DiceLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(diceLexer); DiceParser diceParser = new DiceParser(commonTokenStream); return(diceParser); }
public void DiceParser_ParseDiceDropNumberErrorTest() { // setup test DiceParser parser = new DiceParser(); // run test Assert.ThrowsException <FormatException>(() => parser.Parse("4d6p4", this.config, roller)); // validate results }
public void DiceParser_UnrecognizedOperatorTest() { // setup test DiceParser parser = new DiceParser(); // run test Assert.ThrowsException <FormatException>(() => parser.Parse("1d20g4", this.config, roller)); // validate results }
public void DiceParser_ParseParensMismatchStartTest() { // setup test DiceParser parser = new DiceParser(); // run test Assert.ThrowsException <FormatException>(() => parser.Parse("(2+1d20+2+3))x3-10+(3)", this.config, this.testRoller)); // validate results }
public void DiceParser_ParseDiceOperatorMultipleTimesTest() { // setup test DiceParser parser = new DiceParser(); // run test Assert.ThrowsException <FormatException>(() => parser.Parse("2d4k1k2", this.config, roller)); Assert.ThrowsException <FormatException>(() => parser.Parse("2d4l1l2", this.config, roller)); // validate results }
public void DiceParser_ParseDiceEmptyNullExpressionTest() { // setup test DiceParser parser = new DiceParser(); // run test Assert.ThrowsException <ArgumentNullException>(() => parser.Parse("", this.config, roller)); Assert.ThrowsException <ArgumentNullException>(() => parser.Parse(null, this.config, roller)); // validate results }
public void DiceParser_ParseDiceFudgeErrorTest() { // setup test DiceParser parser = new DiceParser(); // run test Assert.ThrowsException <FormatException>(() => parser.Parse("2d6f", this.config, roller)); Assert.ThrowsException <FormatException>(() => parser.Parse("6fd", this.config, roller)); // validate results }
public void DiceParser_ConstructorTest() { // setup test // run test DiceParser parser = new DiceParser(); // validate results Assert.IsNotNull(parser); Assert.IsInstanceOfType(parser, typeof(DiceParser)); }
public void DiceParser_ParseParensChooseTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("4d(2x3)k(1+2)", this.config, this.testRoller); // validate results Assert.IsNotNull(result); AssertHelpers.AssertDiceChoose(result, "4d(2x3)k(1+2)", "DiceTerm.d6", 4, 3); }
public void DiceParser_ParseDiceWithChainedOrderTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("2 + 4d6k3 + d8", this.config, this.testRoller); // validate results Assert.IsNotNull(result); AssertHelpers.AssertDiceChoose(result, "2+4d6k3+d8", "DiceTerm", 5, 4, 2); }
public void DiceParser_ParseDiceFudgeDropTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("6fp3", this.config, this.roller); // validate results Assert.IsNotNull(result); AssertHelpers.AssertDiceChoose(result, "6fp3", "FudgeDiceTerm.dF", 6, 3); }
public void DiceParser_ParseDiceWithEquivalentKeepLowestTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("4d6l1", this.config, this.testRoller); // validate results Assert.IsNotNull(result); AssertHelpers.AssertDiceChoose(result, "4d6l1", "DiceTerm.d6", 4, 1); }
public void SingleDiceDiceGroupTest() { DiceParser parser = Setup("d20"); DiceParser.DiceGroupContext context = parser.diceGroup(); DiceVisitor visitor = new DiceVisitor(); DiceGroup dg = (DiceGroup)visitor.VisitDiceGroup(context); dg.Count.Should().Be(1); dg.DiceList.First().Size.Should().Be(20); }
public void DiceParser_ParseDiceWithDropLowestTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("6d6p2", this.config, this.testRoller); // validate results Assert.IsNotNull(result); AssertHelpers.AssertDiceChoose(result, "6d6p2", "DiceTerm.d6", 6, 4); }
public void DiceParser_ParseRandomStringsTest() { // setup test DiceParser parser = new DiceParser(); // run test Assert.ThrowsException <FormatException>(() => parser.Parse("eosnddik+9", this.config, roller)); Assert.ThrowsException <FormatException>(() => parser.Parse("2drk4/9", this.config, roller)); Assert.ThrowsException <FormatException>(() => parser.Parse("7y+2d4k4", this.config, roller)); Assert.ThrowsException <FormatException>(() => parser.Parse("7!y+2d4", this.config, roller)); // validate results }
public void DiceParser_ParseDiceWithWhitepaceTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse(" 4 d6 k 3+ 2 ", this.config, this.testRoller); // validate results Assert.IsNotNull(result); AssertHelpers.AssertDiceChoose(result, "4d6k3+2", "DiceTerm.d6", 4, 3, 2); }
public void SimpleExpressionTest() { DiceParser parser = Setup("3d6"); DiceParser.ExpressionContext context = parser.expression(); DiceVisitor visitor = new DiceVisitor(); ExpressionResult result = (ExpressionResult)visitor.VisitExpression(context); result.Roll(); result.Value.Should().BeGreaterOrEqualTo(3); }
public void NumberAtomTest() { DiceParser parser = Setup("3"); DiceParser.AtomContext context = parser.atom(); DiceVisitor visitor = new DiceVisitor(); Atom result = (Atom)visitor.VisitAtom(context); result.IsModifier.Should().BeTrue(); result.Sign.Should().Be(AtomSign.Plus); result.ModifierInstance.Should().Be(3); }
public void MultipleDiceDiceGroupTest() { DiceParser parser = Setup("2d4"); DiceParser.DiceGroupContext context = parser.diceGroup(); DiceVisitor visitor = new DiceVisitor(); DiceGroup dg = (DiceGroup)visitor.VisitDiceGroup(context); dg.Count.Should().Be(2); dg.DiceList[0].Size.Should().Be(4); dg.DiceList[1].Size.Should().Be(4); }
public void SignlessExpressionTest() { DiceParser parser = Setup("1 2 3 4"); DiceParser.ExpressionContext context = parser.expression(); DiceVisitor visitor = new DiceVisitor(); ExpressionResult result = (ExpressionResult)visitor.VisitExpression(context); result.Roll(); result.Value.Should().Be(10); }
public void DiceParser_ParseSingleFudgeDieTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("f", config, this.roller); // validate results Assert.IsNotNull(result); Assert.AreEqual("f", result.DiceExpression); Assert.AreEqual(1, result.Results.Count); AssertHelpers.IsWithinRangeInclusive(-1, 1, result.Value); }
public void DiceParser_ParseDiceWithModifierTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("2d4+3", config, this.testRoller); // validate results Assert.IsNotNull(result); Assert.AreEqual("2d4+3", result.DiceExpression); Assert.AreEqual(2, result.Results.Count); Assert.AreEqual(7, result.Value); }
public void DiceParser_ParseSimpleDiceTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("3d6", config, this.testRoller); // validate results Assert.IsNotNull(result); Assert.AreEqual("3d6", result.DiceExpression); Assert.AreEqual(3, result.Results.Count); Assert.AreEqual(6, result.Value); }
public void DiceParser_ParseDicePercentileTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("d%+5", this.config, this.testRoller); // validate results Assert.IsNotNull(result); Assert.AreEqual("d100+5", result.DiceExpression); Assert.AreEqual(1, result.Results.Count); Assert.AreEqual(7, result.Value); }
public void DiceParser_ParseDiceMultipleConstantsOrderTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("2+1d20+2+3x3-10", this.config, this.testRoller); // validate results Assert.IsNotNull(result); Assert.AreEqual("2+1d20+2+3x3-10", result.DiceExpression); Assert.AreEqual(1, result.Results.Count); Assert.AreEqual(5, result.Value); }
public void DiceParser_ParseDiceNegativeConstantTest() { // setup test DiceParser parser = new DiceParser(); // run test DiceResult result = parser.Parse("-5 + 4d6", this.config, this.testRoller); // validate results Assert.IsNotNull(result); Assert.AreEqual("-5+4d6", result.DiceExpression); Assert.AreEqual(4, result.Results.Count); Assert.AreEqual(3, result.Value); }