Esempio n. 1
0
        public (bool success, string reason) HandleEmission(string user, string text,
                                                            string responseUrl)
        {
            if (IsAdmin(user))
            {
                var parts = text.Split(' ');
                if (parts.Length > 1)
                {
                    var userId = CommandsPartsParse.FindUserId(parts);
                    if (userId.HasValue)
                    {
                        var currency = CommandsPartsParse.FindCurrency(parts, _app.Value.DefaultCurrency);
                        var(_, amount) = CommandsPartsParse.FindDecimal(parts, 0);
                        if (amount > 0)
                        {
                            LedgerActor.Address.Tell(new EmitMessage(userId.Value.id, currency, amount, user, responseUrl));
                            return(true, "Запрос на эмиссию монет прошёл успешно, обрабатываем");
                        }

                        return(false, "Не смогли найти сумму выпускаемых средст в запросе");
                    }

                    return(false, "Не смогли найти пользователя, на которого вводятся средства");
                }

                return(false, TossExample());
            }

            return(false, "Эмиссия средств доступна только администратору. Обидно, да!");
        }
        public async Task <(bool result, string response)> Process(SlackTextCommand cmd)
        {
            var parts = cmd.Text.Split(' ');

            var(_, amount) = CommandsPartsParse.FindSignedDecimal(parts, 0);
            var currency = _app.Value.LimitToDefaultCurrency ? _app.Value.DefaultCurrency : CommandsPartsParse.FindCurrency(parts, _app.Value.DefaultCurrency);

            if (amount != 0)
            {
                var code = await _add.AddPromoAsync(cmd.UserId, amount, currency);

                return(true, $"Новый промокод на {amount}{currency}: {code.Code}");
            }

            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: - любой тип монеток, существующий у пользователей на руках.");
        }