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); }