Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        public void DiceParser_ParseDiceDropNumberErrorTest()
        {
            // setup test
            DiceParser parser = new DiceParser();

            // run test
            Assert.ThrowsException <FormatException>(() => parser.Parse("4d6p4", this.config, roller));

            // validate results
        }
Beispiel #7
0
        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
        }
Beispiel #9
0
        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
        }
Beispiel #10
0
        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
        }
Beispiel #11
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #17
0
        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);
        }
Beispiel #19
0
        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);
        }
Beispiel #21
0
        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);
        }
Beispiel #22
0
        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);
        }
Beispiel #23
0
        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);
        }
Beispiel #24
0
        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);
        }
Beispiel #25
0
        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);
        }