Пример #1
0
 private (bool success, string reason) HandleTransferToSingleUser(string fromUser, string responseUrl,
                                                                  TossRequestParams p)
 {
     LedgerActor.Address.Tell(new TossACoinMessage(fromUser, p.Currency, responseUrl, p.Amount,
                                                   p.UserId, p.Comment, p.TossAll));
     return(true, "Запрос на перевод отправлен гоблинам в банк, ожидай ответа");
 }
Пример #2
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);
        }
Пример #6
0
        private async Task <(bool success, string reason)> HandleTransferToGroup(string fromUser, string responseUrl,
                                                                                 MessageContext channel, TossRequestParams p)
        {
            var channelUsers = await _slack.GetChannelMembers(channel);

            var allUsers = await _slack.GetUserListAsync();

            channelUsers = FilterBots(channelUsers, allUsers);
            if (channelUsers == null)
            {
                return(false,
                       "Если хочешь, чтоб я раскидал монеты по пользователям закрытого канала - добавь туда этого бота");
            }

            foreach (var user in channelUsers)
            {
                _logger.LogInformation($"ttg, {user}");
            }

            if (channelUsers.Length > 1)
            {
                var msg = new GiveAwayMessage(fromUser, p.Currency, responseUrl, p.Amount, channelUsers, channel, p.Comment, p.TossAll);
                LedgerActor.Address.Tell(msg);
                return(true, "Приказали гоблинам раскидать монетки всем пользователям канала...");
            }

            return(true, "Не очень-то понятно чего делать!");
        }