@LasonD

Бот для Телеграма не присылает InlineKeyboardMarkup клавиатуру. Первые несколько раз прислал, потом перестал. Почему так?

Учусь писать бота для Телеграма. Столкнулся с проблемой: создал метод для того, чтобы узнать курсы валют, пользователь должен ввести дату в формате YYYY.MM.DD, далее отправляется api запрос, JSON файл распарсивается в массив сущностей, на основе которых потом формируются кнопки InlineButton.WithCallbackData. Потом отсылаю всё это в чат пользователю:
bot.SendTextMessageAsync(e.Message.From.Id, "Выберите валюту, курс которой хотите узнать.", replyMarkup: new InlineKeyboardMarkup(buttons));
buttons - это зубчатый массив InlineButton.WithCallbackData.
Вот только эти кнопки то присылаются (и всё работает нормально) несколько раз по ряд, то не присылаются ни разу, хотя в отладчике проходил: всё отрабатывает, как надо и програма достигает bot.SendTextMessageAsync, но кнопки могут прислаться, могут не прислаться.
Вот код из метода.
var date = e.Message.Text;
string url = $"https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?date={date}&json";

                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
                HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                string response;
                using (StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()))
                {
                    response = streamReader.ReadToEnd();
                }

                currencyResponse.Currencies = JsonConvert.DeserializeObject<Currency[]>(response);
                Currency[] currencies = currencyResponse.Currencies;

                InlineKeyboardButton[][] buttons = new InlineKeyboardButton[currencies.Length /  4][];
                int count = 0;
                for (int i = 0; i < currencies.Length / 4; i++)
                {
                    buttons[i] = new InlineKeyboardButton[currencies.Length / (currencies.Length / 4)];
                    for (int j = 0; j < buttons[i].Length; j++)
                    {
                        buttons[i][j] = InlineKeyboardButton.WithCallbackData($"{currencies[count].txt} {currencies[count].cc}");
                        count++;
                    }
                }

                bot.SendTextMessageAsync(e.Message.From.Id, "Оберіть валюту, курс якої хочете дізнатись.", replyMarkup: new InlineKeyboardMarkup(buttons)); // Здесь пользователю должна отослаться клавиатура для выбора

Фото правильной отработки
5f305a6d72788730599910.png
Забыл добавить, что ссылка рабочая, более того, если, например, мне уже когда-то пришла клавиатура, то если я напишу новую дату, но буду тыкать на старую клавиатуру, то инфа приходит о новой дате. То есть всё парсится, проблема именно в том, что не приходит клавиатура.
Также добавлю, что не силён в асинхронном программировании, но пробовал и так, и так - не помогло.
  • Вопрос задан
  • 29 просмотров
Пригласить эксперта
Ответы на вопрос 1
@falsescam
У тебя трабл с ссылкой, если проще то стата не обновляется хз, может багается и не возвращает нужные данные
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы