Dlinyj (dlinyj) wrote,
Dlinyj
dlinyj

Categories:

Telegram bot

После сборки обработать напильником.

Понадобился мне под одну задачку телеграмный бот. Как оказалось не так страшен чёрт, как его малюют. Можно за часок набросать бота, хотя для управления умного дома, хоть для управления шатлом. На питоне писать не хотелось по ряду причин. Одна из которых, как не смешно звучит - переносимость кода. К питону надо ставить дополнительные либы, которые ухудшают его переносимость, особенно на встраиваемые системы, так что тут пока что рулит си и php.


Есть расчудесный проект сишного телеграмного бота https://github.com/smartnode/telebot/ . В принципе за 20 минут у меня он завёлся, минут сорок ковыряний левой пяткой я научился отправлять изображения и отвечать на сообщения. Короче, штука всем распрекрасна и уже казалось, что разверзлись врата рая и можно мутить управление шатлом, но ждал вселенский облом...

Мне понадобилось скачивать передаваемые картинки, файлы и прочую шолупень. Не только отсылать (что оказалось как два пальца об асфальт), но и получать и тут я лососнул тунца. Собстна говоря код, для получения файла примитивно прост (если я верно понял всё API). Я не поленился прошерстить весь код, чтобы понять логику работы. И родил такого монстра:

if (message->photo[1].file_size > 0) {
  char file_id[TELEBOT_FILE_ID_SIZE];
  strcpy(file_id,message->photo[1].file_id);
  ret = telebot_download_file(file_id, "photos/file_7.jpg");
  if (ret != TELEBOT_ERROR_NONE) {
   printf("Failed to download file: %d \n", ret);
  }
 }



Если перевести с программерского на русский, то мы определяем что структура сообщения имеет в поле фото не нулевой размер, и после чего пытаемся скачать его с помощью команды telebot_download_file(file_id, "photos/file_7.jpg"); в файл photos/file_7.jpg . Но, увы и ах, болт с левой резьбой.

Отладкой дошерстил до функции json_object_object_get_ex (obj, "file_path", &file_path) , которая является библиотечной и тут заткнулся. Так как надо уже мануалить работу функций. Толковых мануалов на работу апи, как и примеров нет, или по крайне мере я не смог нагуглить. Задал вопрос автору, но чуйка мне подсказывает, что он останется без ответа, а жаль... В общем, хорошая тема, но либо лыжи не едут, либо что-то не так делаю.
Tags: telegram, си
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments