8 #include <condition_variable> 11 #include <curl/curl.h> 60 static size_t WriteCallback(
void *contents,
size_t size,
size_t nmemb,
void *stringptr){
61 ((
string*)stringptr)->append((
char*)contents, size * nmemb);
77 if(!(timeout <0 || timeout >200)){
96 if(!(timeout <0 || timeout >200)){
100 CURL* curl = curl_easy_init();
103 string apiURL(
"https://api.telegram.org/bot"+
token.
getToken()+
"/getUpdates");
104 curl_easy_setopt(curl,CURLOPT_URL,apiURL.c_str());
105 curl_easy_setopt(curl,CURLOPT_TIMEOUT, timeout);
107 curl_easy_setopt(curl,CURLOPT_WRITEDATA,&readBuffer);
108 CURLcode res = CURLE_OK;
111 string offset(
"timeout="+to_string(timeout)+
"&offset="+to_string(last.
getUpdate_id()+1));
112 curl_easy_setopt(curl,CURLOPT_POSTFIELDS,offset.c_str());
113 res = curl_easy_perform(curl);
114 Json::Value Response;
115 reader.parse(readBuffer,Response);
116 if(Response[
"ok"].asBool()){
118 unique_lock<mutex> lock(
m);
119 for(
int i=0;i<Response[
"result"].size();i++){
120 Json::Value Update_json;
121 Update_json = Response[
"result"][i];
122 Update update = fromJson<Update>(Update_json);
129 cerr <<
"Response was not ok" << readBuffer << endl;
130 curl_easy_cleanup(curl);
131 throw telegram_api_error(Response[
"error_code"].asInt(),Response[
"description"].asString());
138 throw curl_error(res,curl_easy_strerror(res));
141 curl_easy_cleanup(curl);
163 std::unique_lock<std::mutex> lock(
m);
std::int32_t getUpdate_id() const
std::vector< std::function< void(InlineQuery)> > OnInlineQueryListener
void addOnMessageListener(std::function< void(Message)> Listener)
std::vector< std::function< void(Message)> > OnMessageListener
const std::optional< Message > & getEdited_message() const
std::vector< std::function< void(Message)> > OnChannelPostEditedListener
void addOnMessageEditedListener(std::function< void(Message)> Listener)
void addOnUpdateListener(std::function< void(Update)> Listener)
std::vector< std::function< void(Update)> > OnUpdateListeners
void addOnChannelPostListener(std::function< void(Message)> Listener)
void addOnChannelPostEditedListener(std::function< void(Message)> Listener)
std::queue< Update > pendingUpdates
void NotifyRegisteredListeners()
std::condition_variable pendingUpdatesAvailable
std::vector< std::function< void(Message)> > OnChannelPostListener
const Message send(sendMessage sendMessage) const
static RETURNTYPE perform_requestJSON(Token T, telegram_methodJSON< RETURNTYPE > &method_body)
std::vector< std::function< void(Message)> > OnMessageEditedListener
std::vector< std::function< void(Message, MessageEntity)> > OnMessageCommandListener
const std::optional< Message > & getMessage() const
const std::optional< InlineQuery > & getInlineQuery() const
const std::optional< Message > & getChannel_post() const
void addOnMessageBotCommandListener(std::function< void(Message, MessageEntity)> Listener)
const std::optional< Message > & getEdited_channel_post() const
void addOnInlineQueryListener(std::function< void(InlineQuery)> Listener)
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *stringptr)
const std::string getToken() const
void LongPolling(long timeout)