помогите с FastBot2 написать inline_query

lokoto4eg

✩✩✩✩✩✩✩
19 Дек 2025
4
0
в доке сказано есть ручной режим
но вот это условие выдает false

if (u.has(tg_apih::inline_query)) {
handleInlineQuery(u);
return;
}

не понимаю, как получить данные из update

ИИшка выдает мол надо подписаться на обновления не только message но и inline_query, но функция begin не имеет аргументов для передачи типов слушателей
 

lokoto4eg

✩✩✩✩✩✩✩
19 Дек 2025
4
0
C++:
// Функция для обработки inline-запросов
void handleInlineQuery(fb::Update& u) {
  auto inline_query = u[tg_apih::inline_query];
  String query_id = inline_query[tg_apih::id];
  String query_text = inline_query[tg_apih::query];

  query_text.trim();

  if (query_text.length() == 0) {
    fb::Packet p = bot.beginPacket(tg_cmd::answerInlineQuery);
    p[tg_api::inline_query_id] = query_id;
    p[tg_api::results]('[');
    if (p('{')) {
      p[tg_api::type] = "article";
      p[tg_api::id] = "1";
      p[tg_api::title] = "Введите число";
      p[tg_api::input_message_content]('{');
      p[tg_api::message_text] = "Введите число (например: 10)";
      p('}');
      p('}');
    }
    p(']');
    fb::Result res = bot.sendPacket(p);
    bot.sendMessage(fb::Message(res, "271559485"));
    return;
  }

  if (!isNumber(query_text) || query_text.toInt() <= 0) {
    fb::Packet p = bot.beginPacket(tg_cmd::answerInlineQuery);
    p[tg_api::inline_query_id] = query_id;
    p[tg_api::results]('[');
    if (p('{')) {
      p[tg_api::type] = "article";
      p[tg_api::id] = "error";
      p[tg_api::title] = "Введите положительное число";
      p[tg_api::input_message_content]('{');
      p[tg_api::message_text] = "Введите положительное число (например: 10)";
      p('}');
      p('}');
    }
    p(']');
    bot.sendPacket(p);
    return;
  }

  int maxValue = query_text.toInt();
  if (maxValue > 1000) maxValue = 1000;

  fb::Packet p = bot.beginPacket(tg_cmd::answerInlineQuery);
  p[tg_api::inline_query_id] = query_id;
  p[tg_api::results]('[');

  for (int i = 1; i <= 3; i++) {
    if (p('{')) {
      p[tg_api::type] = "article";
      p[tg_api::id] = String(millis() + i);
      p[tg_api::title] = "Вариант " + String(i) + ": " + String(random(1, maxValue + 1));
      p[tg_api::input_message_content]('{');
      p[tg_api::message_text] = "Число: " + String(random(1, maxValue + 1));
      p('}');
      p('}');
    }
  }

  p(']');
  bot.sendPacket(p);
}

// Основной обработчик обновлений
void updateh(fb::Update& u) {
  if (u.has(tg_apih::inline_query)) {
    handleInlineQuery(u);
  } else {
    bot.sendMessage(fb::Message("false", "271559485"));
  }
}
// void updateWeb(sets::Updater& upd) {
//     if (alert_f) {
//         alert_f = false;
//         upd.alert(inline_query);
//     }

//     // примечание: при ручных изменениях в базе данных отправлять новые значения не нужно!
//     // библиотека сделает это сама
// }
void setup() {
  randomSeed(analogRead(0));
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) delay(500);
#ifdef ESP32
  LittleFS.begin(true);
#else
  LittleFS.begin();
#endif

  sett.begin();
  sett.onBuild(build);
  // sett.onUpdate(updateWeb);
  bot.attachUpdate(updateh);
  bot.setToken(BOT_TOKEN);
  bot.setPollMode(fb::Poll::Long, 60000);
}

void loop() {
  sett.tick();
  bot.tick();
}
 

lokoto4eg

✩✩✩✩✩✩✩
19 Дек 2025
4
0
короче проблема проще чем я думал

tg_api::inline_query_id и tg_api::inline_query не используются при чтении данных из update. Они используются только для отправки

используйте tg_api::query и tg_api::id

конечный код
C++:
void handleInlineQuery(fb::Update& u) {


  String query_id = u[tg_apih::id];
  String query_text = u[tg_apih::query];

  query_text.trim();

  int maxValue = query_text.toInt();
  if (maxValue > 1000) maxValue = 1000;

  fb::Packet p = bot.beginPacket(tg_cmd::answerInlineQuery);
  p[tg_api::inline_query_id] = query_id;
  p[tg_api::results]('[');
  if (p('{')) {
    p[tg_api::type] = "article";
    p[tg_api::id] = "1";
    p[tg_api::title] = "Бросить кубик";
    p[tg_api::input_message_content]('{');
    p[tg_api::message_text] = "Ваше случайное число " + String(random(1, maxValue + 1));
    p('}');
    p('}');
  }
  p(']');
  bot.sendPacket(p);
}
 

lokoto4eg

✩✩✩✩✩✩✩
19 Дек 2025
4
0
еще вдруг кто будет с таким сталкиваться
как получить вложенные данные у объекта

String from_username = u[tg_apih::from]["username"];



Такой вариант почему то не работает
auto from = u[tg_apih::from];
String username=from["username"]