예제 #1
0
        public async Task <(bool success, string reason)> HandleTossAsync(string fromUser, string text,
                                                                          string responseUrl, MessageContext mctx)
        {
            TossRequestParams p = TossRequestParams.FromText(text, _app.Value.DefaultCurrency);

            if (p == null)
            {
                return(false,
                       $"Не смогли найти пользователя, которому отправить монеток, {mctx.Type} {mctx.ChannelId}");
            }

            if (string.IsNullOrEmpty(p.Currency))
            {
                return(false, "Не смогли определить какие именно монетки переводить");
            }

            if (p.Amount <= 0 && !p.TossAll)
            {
                return(false, "Не смогли найти в команде сколько монет переводим");
            }

            if (!string.IsNullOrEmpty(p.UserId))
            {
                return(HandleTransferToSingleUser(fromUser, responseUrl, p));
            }


            if (mctx.Type == ChannelType.Group || mctx.Type == ChannelType.Channel)
            {
                return(await HandleTransferToGroup(fromUser, responseUrl, mctx, p));
            }

            return(false, "И пользователь не указан, и команда не внутри канала... Как-то неочевидно, чего делать");
        }
        public void TestNegative()
        {
            var p = TossRequestParams.FromText("aaaa bbbb test", ":coin:");

            Assert.IsNotNull(p);
            Assert.IsNull(p.UserId);
            Assert.IsNull(null, p.Currency);
            Assert.AreEqual(0, p.Amount);
        }
        public void TestParamsFromText()
        {
            var p = TossRequestParams.FromText("<@TEST1|user> :coin: 1 test test test", ":coin:");

            Assert.IsNotNull(p);
            Assert.AreEqual("TEST1", p.UserId);
            Assert.AreEqual(":coin:", p.Currency);
            Assert.AreEqual(1m, p.Amount);
            Assert.AreEqual("test test test", p.Comment);
        }
        public void TestDecimal()
        {
            var p = TossRequestParams.FromText(":smile_aa: 100 <@A1B2C3|user> ", ":coin:");

            Assert.IsNotNull(p);
            Assert.AreEqual("A1B2C3", p.UserId);
            Assert.AreEqual(":smile_aa:", p.Currency);
            Assert.AreEqual(100m, p.Amount);
            p = TossRequestParams.FromText("<@A1B2C3|user> :coin: 12345.67", ":coin:");
            Assert.AreEqual(12345.67m, p.Amount);
            p = TossRequestParams.FromText("<@A1B2C3|user> :coin: 12345.6783871362", ":coin:");
            Assert.AreEqual(12345.68m, p.Amount);
        }