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

  • Способы питания электролюминесцентных индикаторов

    Как оно обычно бывает, кто-то делает что-то прикольное, ты загораешься и вдохновляешься этим. Точно также Артём Кашканов заразил меня…

  • Старый фотик + bash = таймлапс

    В процессе экспериментов с фотоаппаратом родился такой вот удивительный опус. Лично меня просто потрясли результаты, хотя делал это просто по…

  • Чатик для общения

    Дорогие друзья, я понял что требуется место для общения. Много людей пишут в личных сообщениях, и хотят обсуждать разные штуки со мной или нет.…

  • 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