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; } }
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) ); } }