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, "Запрос на перевод отправлен гоблинам в банк, ожидай ответа"); }
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); }
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, "Не очень-то понятно чего делать!"); }