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, "Добавлять варианты можно только пока тотализатор создан, но не запущен");
        }
Example #2
0
        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);
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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, "Отправляем меню для выбора победителя");
        }
Example #10
0
 public Task <(bool result, string response)> Process(SlackTextCommand cmd)
 {
     return(Task.FromResult((true, LongMessagesToUser.ToteHelpMessage().ToString())));
 }