Skip to content

Instantly share code, notes, and snippets.

@glowinthedark
Forked from ozlb/telegram_bot_api_curl.cpp
Created January 4, 2024 20:43
Show Gist options
  • Save glowinthedark/12eb18230ed6da35a08535e4953eb713 to your computer and use it in GitHub Desktop.
Save glowinthedark/12eb18230ed6da35a08535e4953eb713 to your computer and use it in GitHub Desktop.
Telegram bot API via curl
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <time.h>
#include <ctype.h>
#include <string>
//https://github.com/DaveGamble/cJSON
#include "cJSON.h"
//You can find a step-by-step guide here https://core.telegram.org/bots/features#creating-a-new-bot
#define K_TELEGRAM_BOT_TOKEN_ID "4839574812:AAFD39kkdpWt3ywyRZergyOLMaJhac60qc"
#define APP_CURL "curl "
#define APP_CURL_PARAM_TIMEOUT "--connect-timeout 3 "
#define APP_CURL_PARAM_SILENT "-s "
#define APP_CURL_PARAM_HEADER_JSON "-H 'Content-Type: application/json' "
#define APP_CURL_PARAM_POST "-X POST "
#define APP_CURL_PARAM_URL "https://api.telegram.org/bot" K_TELEGRAM_BOT_TOKEN_ID
#define CMD_CURL APP_CURL APP_CURL_PARAM_TIMEOUT APP_CURL_PARAM_SILENT APP_CURL_PARAM_HEADER_JSON APP_CURL_PARAM_POST APP_CURL_PARAM_URL
#define AsString(x) ((std::string) x)
void telegram_api_getMyDescription() {
#define API_METHOD "getMyDescription"
std::string str = CMD_CURL "/" API_METHOD " ";
str += "-o " API_METHOD ".json";
system("rm -f " API_METHOD ".json");
system(str.c_str());
#undef API_METHOD
}
void telegram_api_setMyDescription(const char *description) {
#define API_METHOD "setMyDescription"
std::string str = CMD_CURL "/" API_METHOD " ";
//{ "description":@description }
cJSON *jCurlPostParam = cJSON_CreateObject();
cJSON_AddItemToObject(jCurlPostParam, "description", cJSON_CreateString(description));
str += "-d '" + AsString(cJSON_PrintUnformatted(jCurlPostParam)) + "' ";
str += "-o " API_METHOD ".json";
system("rm -f " API_METHOD ".json");
system(str.c_str());
cJSON_Delete(jCurlPostParam);
//size_t data_size = 0;
//return ImFileLoadToMemory(API_METHOD ".json", "rb", &data_size, 0);
#undef API_METHOD
}
void telegram_api_getUpdates(unsigned int offset, unsigned int limit) {
#define API_METHOD "getUpdates"
std::string str = CMD_CURL "/" API_METHOD " ";
//{ "offset": @messageIdOffset, "limit" : @limit, "allowed_updates" : ["message", "callback_query"] }
cJSON *jCurlPostParam = cJSON_CreateObject();
cJSON_AddItemToObject(jCurlPostParam, "offset", cJSON_CreateNumber(offset));
cJSON_AddItemToObject(jCurlPostParam, "limit", cJSON_CreateNumber(limit));
cJSON *jCurlPostParam_allowed_updates = cJSON_CreateArray();
cJSON_AddItemToArray(jCurlPostParam_allowed_updates, cJSON_CreateString("message"));
cJSON_AddItemToArray(jCurlPostParam_allowed_updates, cJSON_CreateString("callback_query"));
cJSON_AddItemToObject(jCurlPostParam, "allowed_updates", jCurlPostParam_allowed_updates);
str += "-d '" + AsString(cJSON_PrintUnformatted(jCurlPostParam)) + "' ";
str += "-o " API_METHOD ".json";
system("rm -f " API_METHOD ".json");
system(str.c_str());
cJSON_Delete(jCurlPostParam);
#undef API_METHOD
}
void telegram_api_sendMessage(unsigned int chat_id, const char *text, const char *reply_markup) {
#define API_METHOD "sendMessage"
std::string str = CMD_CURL "/" API_METHOD " ";
//{ "chat_id":@chat_id, "text":@text, "parse_mode" : "HTML", "reply_markup" : @reply_markup }
cJSON *jCurlPostParam = cJSON_CreateObject();
cJSON_AddItemToObject(jCurlPostParam, "chat_id", cJSON_CreateNumber(chat_id));
cJSON_AddItemToObject(jCurlPostParam, "text", cJSON_CreateString(text));
cJSON_AddItemToObject(jCurlPostParam, "parse_mode", cJSON_CreateString("HTML"));
cJSON_AddItemToObject(jCurlPostParam, "reply_markup", cJSON_CreateString(reply_markup));
str += "-d '" + AsString(cJSON_PrintUnformatted(jCurlPostParam)) + "' ";
str += "-o " API_METHOD ".json";
system("rm -f " API_METHOD ".json");
system(str.c_str());
cJSON_Delete(jCurlPostParam);
#undef API_METHOD
}
void telegram_api_answerCallbackQuery(const char *callback_query_id, const char *text, int cache_time) {
#define API_METHOD "answerCallbackQuery"
std::string str = CMD_CURL "/" API_METHOD " ";
//{ "callback_query_id":@chat_id, "text":@text, "show_alert" : false, "cache_time" : @cache_time }
cJSON *jCurlPostParam = cJSON_CreateObject();
cJSON_AddItemToObject(jCurlPostParam, "callback_query_id", cJSON_CreateString(callback_query_id));
cJSON_AddItemToObject(jCurlPostParam, "text", cJSON_CreateString(text));
cJSON_AddItemToObject(jCurlPostParam, "show_alert", cJSON_CreateBool(0));
cJSON_AddItemToObject(jCurlPostParam, "cache_time", cJSON_CreateNumber(cache_time));
str += "-d '" + AsString(cJSON_PrintUnformatted(jCurlPostParam)) + "' ";
str += "-o " API_METHOD ".json";
system("rm -f " API_METHOD ".json");
system(str.c_str());
cJSON_Delete(jCurlPostParam);
#undef API_METHOD
}
#undef APP_CURL
#undef APP_CURL_PARAM_TIMEOUT
#undef APP_CURL_PARAM_SILENT
#undef APP_CURL_PARAM_HEADER_JSON
#undef APP_CURL_PARAM_POST
#undef APP_CURL_PARAM_URL
#undef CMD_CURL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment