GyverLibs / FastBot2

Очень быстрая и лёгкая библиотека Telegram бота для Arduino, ESP8266, ESP32
MIT License
34 stars 2 forks source link

Как использовать setMyCommands ? #5

Closed AndyB117 closed 5 months ago

AndyB117 commented 5 months ago

В FastBot и UniversalBot использовал

bot.setMyCommands(
    "["
    "{\"command\":\"help\", \"description\":\"Помощь по командам\"},"
    "{\"command\":\"info\", \"description\":\"Информация о настройках\"},"
    "{\"command\":\"status\",\"description\":\"Показания датчиков\"}," 
    "{\"command\":\"restart\",\"description\":\"Перезагрзка контроллера\"}"     // no comma on last command
    "]"
  );

В FastBot2 пытался

fb::Packet p = bot.beginPacket(fb::cmd::setMyCommands);
    p.addString(fb::api::commands, 
//      "commands="
        "["
        "{\"command\":\"help\", \"description\":\"Помощь по командам\"},"
        "{\"command\":\"info\", \"description\":\"Информация о настройках\"},"
        "{\"command\":\"status\",\"description\":\"Показания датчиков\"}," 
        "{\"command\":\"restart\",\"description\":\"Перезагрзка контроллера\"}"     // no comma on last command
        "]"
    );

и

p = bot.beginPacket(fb::cmd::setMyCommands);
p.addStringRaw (
        "?commands="
        "["
...

и

p = bot.beginPacket(fb::cmd::setMyCommands);
p.addText (
        "commands="
        "["
...

Все равно выдается ошибка от сервера, мол не могу распарсит JSON. А как правильно?

GyverLibs commented 5 months ago

Здесь параметры передаются в json, а не в query string. Знак = не нужен, как и кавычки, посмотри как в примере идёт работа с packet или в любом месте в библиотеке

AndyB117 commented 5 months ago

Так в примере просто посылается Message. И все.

fb::Packet p = bot.beginPacket(fb::cmd::sendMessage);  // Все команды API Telegram доступны в fb::cmd
 p.addString(fb::api::text, "message text");  // все ключи объектов API Telegram доступны в fb::api
    // p.addInt(fb::api::chat_id, CHAT_ID);
bot.sendPacket(p);

Ладно, пока времени нет, откачусь на другие библиотеки.

GyverLibs commented 5 months ago

я скину пару примеров, сейчас проверяю на железе. Ошибки сервера нет, но и команды не появляются

GyverLibs commented 5 months ago

в общем так

p.beginArr(fb::api::commands);
p.addText(R"(
    {"command":"help","description":"Помощь по командам"},
    {"command":"info","description":"Информация о настройках"},
    {"command":"status","description":"Показания датчиков"},
    {"command":"restart","description":"Перезагрзка контроллера"}
)");
p.endArr();

или нативно по одной

p.beginArr(fb::api::commands);
p.beginObj().addString(fb::api::command, "help").addString(fb::api::description, "Помощь по командам").endObj();
p.beginObj().addString(fb::api::command, "info").addString(fb::api::description, "Информация о настройках").endObj();
p.endArr();
AndyB117 commented 5 months ago

Спасибо, сейчас попробую.

GyverLibs commented 5 months ago

работает, но у меня не обновлялись команды пока телегу не перезапустил)

AndyB117 commented 5 months ago

Хм, не появляется. Перезапуск телеги - это перезапуск приложения, очистка и /start в боте по-новом или revoke key?

GyverLibs commented 5 months ago

перезапуск приложения да

AndyB117 commented 5 months ago

вот фрагменте кода

fb::Packet p;
    p = bot.beginPacket(fb::cmd::setMyCommands);
    p.beginArr(fb::api::commands);
    p.addText(R"(
        {"command":"help","description":"Помощь по командам"},
        {"command":"info","description":"Информация о настройках"},
        {"command":"status","description":"Показания датчиков"},
        {"command:""tpar","description":"Заданная температура парилки"}, 
        {"command":"restart","description":"Перезагрзка контроллера"}
    )");
    p.endArr();
//  p.addInt(fb::api::chat_id, CHAT_ID);
    FB_LOG("" + p.s + "\n");
    bot.sendPacket(p, false);

А вот полученный запросзапрос

14:23:31.889 > > GET /botХХХХХХХХ:AAE7PHsaJ7y9gLpIhejA07hn0sOj8MXQ/setMyCommands HTTP/1.1
14:23:31.889 > Host: api.elegram.org
14:23:31.889 > Content-Type: application/json
14:23:31.889 > Content-Length:      
14:23:31.889 > 
14:23:31.889 > {,"commands":[
14:23:31.889 >      {"command":"help","description":"Помощь по командам"},
14:23:31.889 >      {"command":"info","description":"Информация о настройках"},
14:23:31.889 >      {"command":"status","description":"Показания датчиков"},
14:23:31.889 >      {"command:""tpar","description":"Заданная температура парилки"}, 
14:23:31.889 >      {"command":"restart","description":"Перезагрзка контроллера"}
14:23:31.889 >  ],
14:23:31.889 >  in bot_setup() [src/telegram.cpp : 81]
14:23:31.889 > [  1106][D][ssl_client.cpp:176] start_ssl_client(): WARNING: Skipping SSL Verification. INSECURE!
14:23:32.147 > {"ok":true,"result":true}

{,"commands":[

Здесь запятая не лишняя?

GyverLibs commented 5 months ago

возможно стоит обновить fastbot2/gson/stringutils до актуальных версий image

AndyB117 commented 5 months ago

Сейчас обновил, с Гита. Все тоже. На пару часов отложу тесты, поработать просят )))

GyverLibs commented 5 months ago

так, проблема в

fb::Packet p = bot.beginPacket(fb::cmd::sendMessage);

и

fb::Packet p;
p = bot.beginPacket(fb::cmd::setMyCommands);
GyverLibs commented 5 months ago

второй вариант даёт лишнюю запятую, буду фиксить

GyverLibs commented 5 months ago

нужен gson 1.4.10

AndyB117 commented 5 months ago

Вчера не заработал. Вечером не компилировалось. Сейчас обновился, опять ошибки компиляции   In file included from lib/FastBot2/src/VirtualFastBot2.h:17,                  from lib/FastBot2/src/FastBot2Client.h:4,                  from lib/FastBot2/src/FastBot2.h:13,                  from src/telegram.h:5,                  from src/telegram.cpp:3: lib/FastBot2/src/core/types/Update.h:19:17: error: stray '\320' in program          businessСonnection = fbh::api::business_connection,                  ^ lib/FastBot2/src/core/types/Update.h:19:18: error: stray '\241' in program          businessСonnection = fbh::api::business_connection,                  ^

Четверг, 11 апреля 2024, 4:07 +07:00 от AlexGyver @.>:     Мой пример заработал? — Reply to this email directly, view it on GitHub , or unsubscribe . You are receiving this because you authored the thread. Message ID: <GyverLibs/FastBot2/issues/5/2048437024 @ github . com>     С уважением, Andy Neverowsky @.  

AndyB117 commented 5 months ago

Перебил названия, на которые ругался компилятор. Скомпилировалось. Но меню появляется только после перезапуска телеги.  

Четверг, 11 апреля 2024, 4:07 +07:00 от AlexGyver @.>:     Мой пример заработал? — Reply to this email directly, view it on GitHub , or unsubscribe . You are receiving this because you authored the thread. Message ID: <GyverLibs/FastBot2/issues/5/2048437024 @ github . com>     С уважением, Andy Neverowsky @.  

AndyB117 commented 5 months ago

Там 2 ошибки опечатки у тебя  в коде. Вместо латинской стоят русские «С» Из патчика понятно.  

Четверг, 11 апреля 2024, 4:07 +07:00 от AlexGyver @.>:     Мой пример заработал? — Reply to this email directly, view it on GitHub , or unsubscribe . You are receiving this because you authored the thread. Message ID: <GyverLibs/FastBot2/issues/5/2048437024 @ github . com>     С уважением, Andy Neverowsky @.  

AndyB117 commented 5 months ago

Похоже дело сейчас уже не в боте. Попробовал сделать такой запрос: TELEGRAM_TOKEN=XXXXXX:YYYYYYYYYYYYYYY curl -X POST -H "Content-Type: application/json" -d "{\"commands\":[{\"command\":\"test\",\"description\":\"description with spaces\"}]}" https://api.telegram.org/bot$TELEGRAM_TOKEN/setMyCommands   тоже меню появляется, но не сразу, а после загрузки. А вот в методе GET, который используется в FastBot (первом), все появляется сразу. Скорее всего нужно еще что то послать, типа какого-нибудь refresh (telegram API не знаю). Надо будет посмотреть, что там в UniversalTelegramBot. Но это уже после работы и то если успею.  

Четверг, 11 апреля 2024, 4:07 +07:00 от AlexGyver @.>:     Мой пример заработал? — Reply to this email directly, view it on GitHub , or unsubscribe . You are receiving this because you authored the thread. Message ID: <GyverLibs/FastBot2/issues/5/2048437024 @ github . com>     С уважением, Andy Neverowsky @.  

AndyB117 commented 5 months ago

Чтоб добить тему. В общем заработал вариант, в котором элементы меню добавляются по одному. fb :: Packet p = bot . beginPacket ( fb :: cmd :: setMyCommands ); p . beginArr ( fb :: api :: commands ); p . beginObj (). addString ( fb :: api :: command , "help" ). addString ( fb :: api :: description , "Помощь по командам" ). endObj (); p . beginObj (). addString ( fb :: api :: command , "info" ). addString ( fb :: api :: description , "Информация о настройках" ). endObj (); p . beginObj (). addString ( fb :: api :: command , "status" ). addString ( fb :: api :: description , "Показания датчиков" ). endObj (); p . beginObj (). addString ( fb :: api :: command , "restart" ). addString ( fb :: api :: description , "Перезагрзка контроллера" ). endObj (); p . endArr (); bot . sendPacket ( p );   Когда сразу все меню добавляется — не заработал. Но есть нюанс, который немного сбил с понталыку. Поскольку изначально меню не появлялось, я в сетапе отправлял приветствие в чат. После запуска бота приходило уведомление на телефон и когда поднимал телефон, то сразу оказывался в чате. Меню не было. Но, если выйти из чата и зайти, то меню появлялось. Убрал приветствие, теперь запускаю бота, захожу в чат — меню на месте.   Спс. Это уже рабочий вариант.  

Четверг, 11 апреля 2024, 4:07 +07:00 от AlexGyver @.>:     Мой пример заработал? — Reply to this email directly, view it on GitHub , or unsubscribe . You are receiving this because you authored the thread. Message ID: <GyverLibs/FastBot2/issues/5/2048437024 @ github . com>     С уважением, Andy Neverowsky @.  

GyverLibs commented 5 months ago

лол, а у меня не ругается на кириллицу (stray \320). И вот этот работает ок

p.beginArr(fb::api::commands);
p.addText(R"(
    {"command":"help","description":"Помощь по командам"},
    {"command":"info","description":"Информация о настройках"},
    {"command":"status","description":"Показания датчиков"},
    {"command":"restart","description":"Перезагрзка контроллера"}
)");
p.endArr();
AndyB117 commented 5 months ago

Странно, на одну русскую С перестал ругаться, а на ту, что lib/FastBot2/src/core/updates.h:22:17: error: stray '\320' in program          BusinessСonnection = bit(4),   ругается. git pull делал. Приходится самому править. Сравнивал твой пример со своим — визуально отличий не нашел. Тупо скопипастил — работает. Чудеса! Может у меня заполнение табами, а не пробелами было и для raw строк при посылке в http это имеет значение? Забью. Работает — не трож!  

Четверг, 11 апреля 2024, 21:06 +07:00 от AlexGyver @.***>:     лол, а у меня не ругается на кириллицу (stray \320). И вот этот работает ок p.beginArr(fb::api::commands); p.addText(R"( {"command":"help","description":"Помощь по командам"}, {"command":"info","description":"Информация о настройках"}, {"command":"status","description":"Показания датчиков"}, {"command":"restart","description":"Перезагрзка контроллера"} )"); p.endArr();

— Reply to this email directly, view it on GitHub , or unsubscribe . You are receiving this because you authored the thread. Message ID: <GyverLibs/FastBot2/issues/5/2049774009 @ github . com>     С уважением, Andy Neverowsky @.***  

GyverLibs commented 5 months ago

да, есть там ещё одна русская) сейчас допишу доку ещё, запушу