public async Task <(bool result, string response)> Process(SlackTextCommand cmd) { var tote = await _getCurrentTote.GetAsync(cmd.UserId); if (tote == null) { return(false, "Чтобы закрыть тотализатор, нужно его сначала создать :) например: `/tote new :coin: Кто своровал суп?`"); } if (tote.State != ToteState.Started && tote.State != ToteState.Closed) { return(false, "Закрыть можно только запущенный тотализатор"); } if (tote.Options.Length > 6) { return(false, "Нам в принципе не жалко и больше исходов хранить, но ты часом не наркоман ли?"); } await _startTote.CloseAsync(tote.Id); await _slackResponse.ResponseWithText(cmd.ResponseUrl, "Приём ставок закрыт! Теперь ожидай информации и закрывай тотализатор командой `/tote finish`", true); MessengerActor.Address.Tell(new UpdateToteReportsMessage(tote.Id)); return(true, string.Empty); }
public async Task <(bool result, string response)> Process(SlackTextCommand cmd) { var tote = await _getCurrentTote.GetAsync(cmd.UserId); if (tote == null) { return(false, "Чтобы запустить тотализатор, нужно его сначала создать :) например: `/tote new :coin: Кто своровал суп?`"); } if (tote.State != ToteState.Created) { return(false, "Запустить можно только новый созданный тотализатор"); } if (tote.Options.Length < 2) { return(false, "Для запуска нужно добавить хотя бы два варианта исхода для ставок, например `/tote add Президентом будет Владимир Путин.`"); } if (tote.Options.Length > 50) { return(false, "Нам в принципе не жалко и болеее 50 исходов хранить, но ты часом не наркоман ли?"); } await _startTote.StartAsync(tote.Id); await _slackResponse.ResponseWithText(cmd.ResponseUrl, "Тотализатор запущен. Самое время прорекламировать его в каналах! Используй `/tote`. Потом закрывай приём ставок командой `/tote close`", true); 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) { 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, "Добавлять варианты можно только пока тотализатор создан, но не запущен"); }
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 new :coin: Кто своровал суп?`"); } if (tote.State == ToteState.Finished) { return(false, "Уже завершённый тотализатор отменить никак нельзя"); } await _cancelTote.CancelAsync(tote.Id); TotesActor.Address.Tell(new ToteCancelledMessage(tote.Id)); return(true, "Аукцион отменён, начинаем отправку ставок обратно"); }
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, "Отправляем меню для выбора победителя"); }