public async Task <(bool result, string response)> Process(SlackTextCommand cmd) { var tote = await _getCurrentTote.GetAsync(cmd.UserId); if (tote.State == ToteState.Created) { var option = cmd.Text.Substring(4).Trim(); if (string.IsNullOrEmpty(option)) { return(false, "Формат команды: `/tote add Какой-то вариант на который можно делать ставку`"); } if (tote.Options.Any(a => String.Equals(a.Name, option, StringComparison.InvariantCultureIgnoreCase))) { return(false, "Не получится добавить два варианта с одинаковым названием. Но спасибо за тестирование."); } var ret = await _addToteOption.AddAsync(tote, option); var response = LongMessagesToUser.ToteDetails(ret); await _slackResponse.ResponseWithBlocks(cmd.ResponseUrl, response, false); return(true, string.Empty); } return(false, "Добавлять варианты можно только пока тотализатор создан, но не запущен"); }
private async Task CreateNewToteStatusReportInSlack(ToteStatusMessage msg) { var response = LongMessagesToUser.ToteDetails(msg.Tote); var mess = await _slack.PostAsync(msg.Context.ChannelId, response.ToArray()); if (mess.ok) { await _saveToteReportPoint.SaveAsync(msg.Context, mess.ts, msg.Tote.Id); } }
private async Task SetTote(PlaceBetStartMessage pars) { _user = pars.UserId; _toteValue = await _getTote.GetAsync(pars.ToteId); var balance = await _balance.GetAsync(_cp.Period, _user, _toteValue.Currency, false); var balanceAmount = balance.Count > 0 ? balance[0].Amount : 0; await _slack.Dialog(pars.TriggerId, LongMessagesToUser.ToteDialog(_toteValue, balanceAmount)); // await _response.ResponseWithBlocks(pars.ResponseUrl, LongMessagesToUser.ToteOptionsButtons(_toteValue, balanceAmount).ToList(), true); }
private async Task UpdateToteReports(UpdateToteReportsMessage arg) { var reports = await _toteReports.GetAsync(arg.ToteId); var tote = await _getTote.GetAsync(arg.ToteId); var toteReport = LongMessagesToUser.ToteDetails(tote); foreach (var report in reports) { await _slack.UpdateMessage(report.ChannelId, toteReport.ToArray(), report.MessageTs); } }
private async Task ReportWinnersLoosersInSlack(ToteWinnersLoosersReportMessage msg) { var reports = await _toteReports.GetAsync(msg.ToteId); var tote = await _getTote.GetAsync(msg.ToteId); var toteReport = LongMessagesToUser.ToteWinners(tote, msg); foreach (var cid in reports.Select(a => a.ChannelId).Distinct()) { Self.Tell(new MessageToChannel(cid, toteReport)); } }
public async Task <(bool result, string response)> Process(SlackTextCommand cmd) { var tote = await _getCurrentTote.GetAsync(cmd.UserId); if (tote != null && (tote.State == ToteState.Created || tote.State == ToteState.Started)) { return(false, "Сначала нужно завершить текущий тотализатор. Нам просто слишком лениво обрабатывать много тотализаторов одновременно, сорян"); } var rest = cmd.Text.Substring(3).Trim(); var parts = rest.Split(" "); if (parts.Length > 1) { var currency = _app.Value.LimitToDefaultCurrency ? _app.Value.DefaultCurrency : CommandsPartsParse.FindCurrency(parts, _app.Value.DefaultCurrency); if (!_app.Value.LimitToDefaultCurrency && string.IsNullOrEmpty(currency)) { return(false, "Не понял в какой валюте запускать тотализатор. Пример запуска: `/tote new :currency: Кого уволят первым?`, где :currency: - любой тип монеток, существующий у пользователей на руках, например :coin:."); } rest = rest.Substring(rest.IndexOf(currency, StringComparison.OrdinalIgnoreCase) + currency.Length) .Trim(); if (string.IsNullOrEmpty(rest)) { return(false, "Для старта тотализатора обязательно укажи его название. Например: `/tote new :currency: Кто победит в поедании печенек на скорость?`, где :currency: - любой тип монеток, существующий у пользователей на руках."); } var newTote = await _createNewTote.CreateNewAsync(cmd.UserId, currency, rest); var response = LongMessagesToUser.ToteDetails(newTote); await _slackResponse.ResponseWithBlocks(cmd.ResponseUrl, response, false); return(true, string.Empty); } return(false, "Для старта тотализатора обязательно укажи вид монет и его название. Например: `/tote new :currency: Кто победит в поедании печенек на скорость?`, где :currency: - любой тип монеток, существующий у пользователей на руках."); }
public async Task <(bool result, string response)> Process(SlackTextCommand cmd) { var tote = await _getCurrentTote.GetAsync(cmd.UserId); if (tote == null) { return(false, "Команда /tote без параметров публикует в канале информацию о тотализаторе. Для этого тотализатор нужно сначала создать. Смотри `/tote help`."); } if (cmd.Context.Type == ChannelType.Direct) { await _slackResponse.ResponseWithBlocks(cmd.ResponseUrl, LongMessagesToUser.ToteDetails(tote), false); } else { TotesActor.Address.Tell(new ToteStatusMessage(cmd.Context, tote)); } return(true, string.Empty); }
public async Task <(bool result, string response)> Process(SlackTextCommand cmd) { var tote = await _getCurrentTote.GetAsync(cmd.UserId); if (tote.State == ToteState.Created) { if (int.TryParse(cmd.Text.Substring(6).Trim(), out var option)) { return(false, "Формат команды: `/tote remove <number>`, где number - порядковый номер варианта"); } var ret = await _removeToteOption.RemoveAsync(tote, option); var response = LongMessagesToUser.ToteDetails(ret); await _slackResponse.ResponseWithBlocks(cmd.ResponseUrl, response, true); return(true, string.Empty); } return(false, "Удалять варианты можно только пока тотализатор создан, но не запущен"); }
public async Task <(bool result, string response)> Process(SlackTextCommand cmd) { var tote = await _getCurrentTote.GetAsync(cmd.UserId); if (tote == null) { return(false, "Чтоб завершить тотализатор, надо его сначала создать"); } if (tote.State != ToteState.Started && tote.State != ToteState.Closed) { return(false, $"Завершить можно только закрытый или запущенный тотализатор, сейчас {tote.State}"); } if (tote.Owner != cmd.UserId) { return(false, "Завершить можно только свой тотализатор"); } await _slack.PostAsync(new BlocksMessage(LongMessagesToUser.ToteFinishButtons(tote), cmd.UserId)); return(true, "Отправляем меню для выбора победителя"); }
public Task <(bool result, string response)> Process(SlackTextCommand cmd) { return(Task.FromResult((true, LongMessagesToUser.ToteHelpMessage().ToString()))); }