Пример #1
0
        public static async Task HandleExceptionAsync(Exception e, Update update, UpdateType type)
        {
            var bot = Bot.GetClient();

            var exceptionMsg =
                $"Exception type: {e.GetType().Name}{NL}" +
                $"Exception message: {e.Message}{NL}" +
                $"InnerException: {NL}{e.InnerException}{NL}" +
                $"StackTrace: {NL}{e.StackTrace}";

            switch (type)
            {
            case UpdateType.CallbackQuery:
            {
                var callbackTask = bot.AnswerCallbackQueryAsync(update.CallbackQuery.Id, exceptionMsg);
                var textTask     = bot.SendTextMessageAsync(update.CallbackQuery.From.Id, exceptionMsg);

                await Task.WhenAll(callbackTask, textTask);

                break;
            }

            case UpdateType.InlineQuery:
            {
                var answer = await InlineAnswerBuilder.ArticleToQueryResultAsync("Error", exceptionMsg, exceptionMsg);

                await bot.AnswerInlineQueryAsync(update.InlineQuery.Id, answer);

                break;
            }

            case UpdateType.Message:
                await bot.SendTextMessageAsync(update.Message.Chat.Id, exceptionMsg);

                break;
            }
        }
Пример #2
0
        public async Task HandleAsync(InlineQuery q)
        {
            if (IsNullOrEmpty(q.Query))
            {
                return;
            }

            var input = q.Query;

            var dataTask             = GetValCursAsync();
            var currenciesEmojisTask = repo.GetCurrencyEmojisAsync();

            var data             = dataTask.Result;
            var currenciesEmojis = currenciesEmojisTask.Result;

            string currency = null;

            foreach (var i in currenciesEmojis)
            {
                if (input.Contains(i.Currency))
                {
                    currency = i.Currency;
                    break;
                }
            }

            var space    = " "; // format: {decimal}{space}{currency} e.g "53.2 UAH" or just {decimal}
            var argsPart = currency == null ? "" : $"{space}{currency}";

            var pattern = $@"[0-9][0-9]*([\.,][0-9][0-9]*)?{argsPart}";

            if (!Regex.IsMatch(input, pattern))
            {
                var text = "format: {decimal}{space}{currency} e.g \"53.2 UAH\" or just {decimal} e.g \"53.2\"";

                await bot.AnswerInlineQueryAsync(
                    q.Id,
                    await InlineAnswerBuilder.ArticleToQueryResultAsync(
                        "Result", text, text)
                    );

                return;
            }

            var valueToParse = IsNullOrEmpty(argsPart) ? input : input.Replace(argsPart, "");
            var isValid      = decimal.TryParse(valueToParse, out var value);

            if (isValid)
            {
                if (currency == null)
                {
                    currency = DefaultValues.DefaultValueCurrency;
                }

                var currencyEmoji = currenciesEmojis.First(ce => ce.Currency == currency);

                var values =
                    await ValuesCalculator.GetCurrenciesValuesAsync(value, currencyEmoji, data, currenciesEmojis);

                var answer1 = await AnswerBuilder.BuildStringFromValuesAsync(values, currencyEmoji);

                await bot.AnswerInlineQueryAsync(
                    q.Id,
                    await InlineAnswerBuilder.ArticleToQueryResultAsync(
                        "Result", answer1, answer1)
                    );
            }
        }