Учусь писать бота для Телеграма. Столкнулся с проблемой: создал метод для того, чтобы узнать курсы валют, пользователь должен ввести дату в формате 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)); // Здесь пользователю должна отослаться клавиатура для выбора
Фото правильной отработки
Забыл добавить, что ссылка рабочая, более того, если, например, мне уже когда-то пришла клавиатура, то если я напишу новую дату, но буду тыкать на старую клавиатуру, то инфа приходит о новой дате. То есть всё парсится, проблема именно в том, что не приходит клавиатура.
Также добавлю, что не силён в асинхронном программировании, но пробовал и так, и так - не помогло.