summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Api.cpp280
-rw-r--r--src/TgTypeParser.cpp780
-rw-r--r--src/types/InlineQueryResult.cpp32
3 files changed, 1039 insertions, 53 deletions
diff --git a/src/Api.cpp b/src/Api.cpp
index 54cb692..361b4d6 100644
--- a/src/Api.cpp
+++ b/src/Api.cpp
@@ -109,10 +109,13 @@ Message::Ptr Api::sendPhoto(int64_t chatId, const string& photoId, const string&
return TgTypeParser::getInstance().parseJsonAndGetMessage(sendRequest("sendPhoto", args));
}
-Message::Ptr Api::sendAudio(int64_t chatId, const InputFile::Ptr& audio, int32_t duration, const string& performer, const string& title, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
+Message::Ptr Api::sendAudio(int64_t chatId, const InputFile::Ptr& audio, const std::string &caption, int32_t duration, const string& performer, const string& title, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("chat_id", chatId));
args.push_back(HttpReqArg("audio", audio->data, true, audio->mimeType, audio->fileName));
+ if (!caption.empty()) {
+ args.push_back(HttpReqArg("caption", caption));
+ }
if (duration) {
args.push_back(HttpReqArg("duration", duration));
}
@@ -134,10 +137,13 @@ Message::Ptr Api::sendAudio(int64_t chatId, const InputFile::Ptr& audio, int32_t
return TgTypeParser::getInstance().parseJsonAndGetMessage(sendRequest("sendAudio", args));
}
-Message::Ptr Api::sendAudio(int64_t chatId, const string& audioId, int32_t duration, const string& performer, const string& title, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
+Message::Ptr Api::sendAudio(int64_t chatId, const string& audioId, const std::string &caption, int32_t duration, const string& performer, const string& title, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("chat_id", chatId));
args.push_back(HttpReqArg("audio", audioId));
+ if (!caption.empty()) {
+ args.push_back(HttpReqArg("caption", caption));
+ }
if (duration) {
args.push_back(HttpReqArg("duration", duration));
}
@@ -159,10 +165,13 @@ Message::Ptr Api::sendAudio(int64_t chatId, const string& audioId, int32_t durat
return TgTypeParser::getInstance().parseJsonAndGetMessage(sendRequest("sendAudio", args));
}
-Message::Ptr Api::sendDocument(int64_t chatId, const InputFile::Ptr& document, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
+Message::Ptr Api::sendDocument(int64_t chatId, const InputFile::Ptr& document, const std::string &caption, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("chat_id", chatId));
args.push_back(HttpReqArg("document", document->data, true, document->mimeType, document->fileName));
+ if (!caption.empty()) {
+ args.push_back(HttpReqArg("caption", caption));
+ }
if (replyToMessageId) {
args.push_back(HttpReqArg("reply_to_message_id", replyToMessageId));
}
@@ -175,10 +184,13 @@ Message::Ptr Api::sendDocument(int64_t chatId, const InputFile::Ptr& document, i
return TgTypeParser::getInstance().parseJsonAndGetMessage(sendRequest("sendDocument", args));
}
-Message::Ptr Api::sendDocument(int64_t chatId, const string& document, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
+Message::Ptr Api::sendDocument(int64_t chatId, const string& document, const std::string &caption, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("chat_id", chatId));
args.push_back(HttpReqArg("document", document));
+ if (!caption.empty()) {
+ args.push_back(HttpReqArg("caption", caption));
+ }
if (replyToMessageId) {
args.push_back(HttpReqArg("reply_to_message_id", replyToMessageId));
}
@@ -223,10 +235,22 @@ Message::Ptr Api::sendSticker(int64_t chatId, const string& stickerId, int32_t r
return TgTypeParser::getInstance().parseJsonAndGetMessage(sendRequest("sendSticker", args));
}
-Message::Ptr Api::sendVideo(int64_t chatId, const InputFile::Ptr& video, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
+Message::Ptr Api::sendVideo(int64_t chatId, const InputFile::Ptr& video, int32_t duration, int32_t width, int32_t height, const std::string &caption, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("chat_id", chatId));
args.push_back(HttpReqArg("video", video->data, true, video->mimeType, video->fileName));
+ if (duration) {
+ args.push_back(HttpReqArg("duration", duration));
+ }
+ if (width) {
+ args.push_back(HttpReqArg("width", width));
+ }
+ if (height) {
+ args.push_back(HttpReqArg("height", height));
+ }
+ if (!caption.empty()) {
+ args.push_back(HttpReqArg("caption", caption));
+ }
if (replyToMessageId) {
args.push_back(HttpReqArg("reply_to_message_id", replyToMessageId));
}
@@ -239,10 +263,22 @@ Message::Ptr Api::sendVideo(int64_t chatId, const InputFile::Ptr& video, int32_t
return TgTypeParser::getInstance().parseJsonAndGetMessage(sendRequest("sendVideo", args));
}
-Message::Ptr Api::sendVideo(int64_t chatId, const string& videoId, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
+Message::Ptr Api::sendVideo(int64_t chatId, const string& videoId, int32_t duration, int32_t width, int32_t height, const std::string &caption, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("chat_id", chatId));
args.push_back(HttpReqArg("video", videoId));
+ if (duration) {
+ args.push_back(HttpReqArg("duration", duration));
+ }
+ if (width) {
+ args.push_back(HttpReqArg("width", width));
+ }
+ if (height) {
+ args.push_back(HttpReqArg("height", height));
+ }
+ if (!caption.empty()) {
+ args.push_back(HttpReqArg("caption", caption));
+ }
if (replyToMessageId) {
args.push_back(HttpReqArg("reply_to_message_id", replyToMessageId));
}
@@ -255,10 +291,13 @@ Message::Ptr Api::sendVideo(int64_t chatId, const string& videoId, int32_t reply
return TgTypeParser::getInstance().parseJsonAndGetMessage(sendRequest("sendVideo", args));
}
-Message::Ptr Api::sendVoice(int64_t chatId, const InputFile::Ptr& voice, int duration, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
+Message::Ptr Api::sendVoice(int64_t chatId, const InputFile::Ptr& voice, const std::string &caption, int duration, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("chat_id", chatId));
args.push_back(HttpReqArg("voice", voice->data, true, voice->mimeType, voice->fileName));
+ if (!caption.empty()) {
+ args.push_back(HttpReqArg("caption", caption));
+ }
if (duration){
args.push_back(HttpReqArg("duration", duration));
}
@@ -274,10 +313,13 @@ Message::Ptr Api::sendVoice(int64_t chatId, const InputFile::Ptr& voice, int dur
return TgTypeParser::getInstance().parseJsonAndGetMessage(sendRequest("sendVideo", args));
}
-Message::Ptr Api::sendVoice(int64_t chatId, const std::string& voiceId, int duration, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
+Message::Ptr Api::sendVoice(int64_t chatId, const std::string& voiceId, const std::string &caption, int duration, int32_t replyToMessageId, const GenericReply::Ptr& replyMarkup, bool disableNotification) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("chat_id", chatId));
args.push_back(HttpReqArg("voice", voiceId));
+ if (!caption.empty()) {
+ args.push_back(HttpReqArg("caption", caption));
+ }
if (duration){
args.push_back(HttpReqArg("duration", duration));
}
@@ -368,7 +410,152 @@ UserProfilePhotos::Ptr Api::getUserProfilePhotos(int32_t userId, int32_t offset,
return TgTypeParser::getInstance().parseJsonAndGetUserProfilePhotos(sendRequest("getUserProfilePhotos", args));
}
-vector<Update::Ptr> Api::getUpdates(int32_t offset, int32_t limit, int32_t timeout) const {
+File::Ptr Api::getFile(int32_t fileId) const
+{
+ vector<HttpReqArg> args;
+ args.push_back(HttpReqArg("file_id", fileId));
+ return TgTypeParser::getInstance().parseJsonAndGetFile(sendRequest("getFile", args));
+}
+
+bool Api::leaveChat(int64_t chatId) const
+{
+ vector<HttpReqArg> args;
+ args.push_back(HttpReqArg("chat_id", chatId));
+ return sendRequest("leaveChat", args).get<bool>("", false);
+}
+
+Chat::Ptr Api::getChat(int64_t chatId) const
+{
+ vector<HttpReqArg> args;
+ args.push_back(HttpReqArg("chat_id", chatId));
+ return TgTypeParser::getInstance().parseJsonAndGetChat(sendRequest("getChat", args));
+}
+
+std::vector<ChatMember::Ptr> Api::getChatAdministrators(int64_t chatId) const
+{
+ vector<HttpReqArg> args;
+ args.push_back(HttpReqArg("chat_id", chatId));
+ return TgTypeParser::getInstance().parseJsonAndGetArray<ChatMember>(&TgTypeParser::parseJsonAndGetChatMember, sendRequest("getChatAdministrators", args));
+}
+
+int32_t Api::getChatMembersCount(int64_t chatId) const
+{
+ vector<HttpReqArg> args;
+ args.push_back(HttpReqArg("chat_id", chatId));
+ return sendRequest("getChatMembersCount", args).get<int32_t>("", 0);
+}
+
+bool Api::answerCallbackQuery(const std::string & callbackQueryId, const std::string & text, bool showAlert, const std::string &url, int32_t cacheTime) const
+{
+ vector<HttpReqArg> args;
+ args.push_back(HttpReqArg("callback_query_id", callbackQueryId));
+ if (!text.empty()) {
+ args.push_back(HttpReqArg("text", text));
+ }
+ if (showAlert) {
+ args.push_back(HttpReqArg("show_alert", showAlert));
+ }
+ if (!url.empty()) {
+ args.push_back(HttpReqArg("url", url));
+ }
+ if (cacheTime) {
+ args.push_back(HttpReqArg("cache_time", cacheTime));
+ }
+ return sendRequest("answerCallbackQuery", args).get<bool>("", false);
+}
+
+Message::Ptr Api::editMessageText(const std::string& text, int64_t chatId, int32_t messageId, const std::string& inlineMessageId,
+ const std::string& parseMode, bool disableWebPagePreview, const GenericReply::Ptr& replyMarkup) const {
+
+ vector<HttpReqArg> args;
+ args.push_back(HttpReqArg("text", text));
+ if (chatId) {
+ args.push_back(HttpReqArg("chat_id", chatId));
+ }
+ if (messageId) {
+ args.push_back(HttpReqArg("message_id", messageId));
+ }
+ if (!inlineMessageId.empty()) {
+ args.push_back(HttpReqArg("inline_message_id", inlineMessageId));
+ }
+ if (!parseMode.empty()) {
+ args.push_back(HttpReqArg("parse_mode", parseMode));
+ }
+ if (disableWebPagePreview) {
+ args.push_back(HttpReqArg("disable_web_page_preview", disableWebPagePreview));
+ }
+ if (replyMarkup) {
+ args.push_back(HttpReqArg("reply_markup", TgTypeParser::getInstance().parseGenericReply(replyMarkup)));
+ }
+ ptree p = sendRequest("editMessageText", args);
+ if (p.get_child_optional("message_id")) {
+ return TgTypeParser::getInstance().parseJsonAndGetMessage(p);
+ } else {
+ return nullptr;
+ }
+}
+
+Message::Ptr Api::editMessageCaption(int64_t chatId, int32_t messageId, const std::string& caption,
+ const std::string& inlineMessageId, const GenericReply::Ptr& replyMarkup) const {
+
+ vector<HttpReqArg> args;
+ if (chatId) {
+ args.push_back(HttpReqArg("chat_id", chatId));
+ }
+ if (messageId) {
+ args.push_back(HttpReqArg("message_id", messageId));
+ }
+ if (!caption.empty()) {
+ args.push_back(HttpReqArg("caption", caption));
+ }
+ if (!inlineMessageId.empty()) {
+ args.push_back(HttpReqArg("inline_message_id", inlineMessageId));
+ }
+ if (replyMarkup) {
+ args.push_back(HttpReqArg("reply_markup", TgTypeParser::getInstance().parseGenericReply(replyMarkup)));
+ }
+ ptree p = sendRequest("editMessageCaption", args);
+ if (p.get_child_optional("message_id")) {
+ return TgTypeParser::getInstance().parseJsonAndGetMessage(p);
+ } else {
+ return nullptr;
+ }
+
+}
+
+Message::Ptr Api::editMessageReplyMarkup(int64_t chatId, int32_t messageId, const std::string& inlineMessageId,
+ const GenericReply::Ptr& replyMarkup) const {
+
+ vector<HttpReqArg> args;
+ if (chatId) {
+ args.push_back(HttpReqArg("chat_id", chatId));
+ }
+ if (messageId) {
+ args.push_back(HttpReqArg("message_id", messageId));
+ }
+ if (!inlineMessageId.empty()) {
+ args.push_back(HttpReqArg("inline_message_id", inlineMessageId));
+ }
+ if (replyMarkup) {
+ args.push_back(HttpReqArg("reply_markup", TgTypeParser::getInstance().parseGenericReply(replyMarkup)));
+ }
+ ptree p = sendRequest("editMessageReplyMarkup", args);
+ if (p.get_child_optional("message_id")) {
+ return TgTypeParser::getInstance().parseJsonAndGetMessage(p);
+ } else {
+ return nullptr;
+ }
+}
+
+ChatMember::Ptr Api::getChatMember(int64_t chatId, int32_t userId) const
+{
+ vector<HttpReqArg> args;
+ args.push_back(HttpReqArg("chat_id", chatId));
+ args.push_back(HttpReqArg("user_id", userId));
+ return TgTypeParser::getInstance().parseJsonAndGetChatMember(sendRequest("getChatMember", args));
+}
+
+vector<Update::Ptr> Api::getUpdates(int32_t offset, int32_t limit, int32_t timeout, const StringArrayPtr &allowedUpdates) const {
vector<HttpReqArg> args;
if (offset) {
args.push_back(HttpReqArg("offset", offset));
@@ -378,43 +565,96 @@ vector<Update::Ptr> Api::getUpdates(int32_t offset, int32_t limit, int32_t timeo
if (timeout) {
args.push_back(HttpReqArg("timeout", timeout));
}
+ if (allowedUpdates!=nullptr) {
+ string allowedUpdatesJson = TgTypeParser::getInstance().parseArray<std::string>(
+ [](const std::string &s)->std::string {
+ return s;
+ }, *allowedUpdates);
+ args.push_back(HttpReqArg("allowed_updates", allowedUpdatesJson));
+ }
return TgTypeParser::getInstance().parseJsonAndGetArray<Update>(&TgTypeParser::parseJsonAndGetUpdate, sendRequest("getUpdates", args));
}
-void Api::setWebhook(const string& url, const InputFile::Ptr& certificate) const {
+void Api::setWebhook(const string& url, const InputFile::Ptr& certificate, int32_t maxConnection, const StringArrayPtr &allowedUpdates) const {
vector<HttpReqArg> args;
if (!url.empty())
args.push_back(HttpReqArg("url", url));
if (certificate != nullptr)
args.push_back(HttpReqArg("certificate", certificate->data, true, certificate->mimeType, certificate->fileName));
+ if (maxConnection!=40)
+ args.push_back(HttpReqArg("max_connections", maxConnection));
+
+ if (allowedUpdates!=nullptr)
+ {
+ string allowedUpdatesJson = TgTypeParser::getInstance().parseArray<std::string>(
+ [](const std::string &s)->std::string {
+ return s;
+ }, *allowedUpdates);
+ args.push_back(HttpReqArg("allowed_updates", allowedUpdatesJson));
+ }
sendRequest("setWebhook", args);
}
-void Api::answerInlineQuery(const std::string& inlineQueryId, const std::vector<InlineQueryResult::Ptr>& results,
- int32_t cacheTime, bool isPersonal, const std::string& nextOffset) const {
+bool Api::deleteWebhook() const
+{
+ ptree p = sendRequest("deleteWebhook");
+ return p.get<bool>("", false);
+}
+
+WebhookInfo::Ptr Api::getWebhookInfo() const
+{
+ ptree p = sendRequest("getWebhookInfo");
+
+ if (!p.get_child_optional("url"))
+ return nullptr;
+
+ if (p.get<string>("url","")!=string(""))
+ {
+ return TgTypeParser::getInstance().parseJsonAndGetWebhookInfo(p);
+ }
+ else
+ {
+ return nullptr;
+ }
+}
+
+bool Api::answerInlineQuery(const std::string& inlineQueryId, const std::vector<InlineQueryResult::Ptr>& results,
+ int32_t cacheTime, bool isPersonal, const std::string& nextOffset, const std::string& switchPmText, const std::string& switchPmParameter) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("inline_query_id", inlineQueryId));
string resultsJson = TgTypeParser::getInstance().parseArray<InlineQueryResult>(&TgTypeParser::parseInlineQueryResult, results);
args.push_back(HttpReqArg("results", resultsJson));
- args.push_back(HttpReqArg("cache_time", cacheTime));
- args.push_back(HttpReqArg("is_personal", isPersonal));
- args.push_back(HttpReqArg("next_offset", nextOffset));
- sendRequest("answerInlineQuery", args);
+ if (cacheTime) {
+ args.push_back(HttpReqArg("cache_time", cacheTime));
+ }
+ if (isPersonal) {
+ args.push_back(HttpReqArg("is_personal", isPersonal));
+ }
+ if (!nextOffset.empty()) {
+ args.push_back(HttpReqArg("next_offset", nextOffset));
+ }
+ if (!switchPmText.empty()) {
+ args.push_back(HttpReqArg("switch_pm_text", switchPmText));
+ }
+ if (!switchPmParameter.empty()) {
+ args.push_back(HttpReqArg("switch_pm_parameter", switchPmParameter));
+ }
+ return sendRequest("answerInlineQuery", args).get<bool>("", false);
}
-void Api::kickChatMember(int64_t chatId, int32_t userId) const {
+bool Api::kickChatMember(int64_t chatId, int32_t userId) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("chat_id", chatId));
args.push_back(HttpReqArg("user_id", userId));
- sendRequest("kickChatMember", args);
+ return sendRequest("kickChatMember", args).get<bool>("", false);
}
-void Api::unbanChatMember(int64_t chatId, int32_t userId) const {
+bool Api::unbanChatMember(int64_t chatId, int32_t userId) const {
vector<HttpReqArg> args;
args.push_back(HttpReqArg("chat_id", chatId));
args.push_back(HttpReqArg("user_id", userId));
- sendRequest("unbanChatMember", args);
+ return sendRequest("unbanChatMember", args).get<bool>("", false);
}
ptree Api::sendRequest(const string& method, const vector<HttpReqArg>& args) const {
diff --git a/src/TgTypeParser.cpp b/src/TgTypeParser.cpp
index 174afe9..45124e2 100644
--- a/src/TgTypeParser.cpp
+++ b/src/TgTypeParser.cpp
@@ -49,6 +49,7 @@ Chat::Ptr TgTypeParser::parseJsonAndGetChat(const ptree& data) const {
result->username = data.get("username", "");
result->firstName = data.get<string>("first_name", "");
result->lastName = data.get("last_name", "");
+ result->allMembersAreAdministrators = data.get<bool>("all_members_are_administrators", false);
return result;
}
@@ -108,6 +109,7 @@ MessageEntity::Ptr TgTypeParser::parseJsonAndGetEntity(const ptree& data) const{
result->offset=data.get<int32_t>("offset");
result->length=data.get<int32_t>("length");
result->url=data.get<string>("url", "");
+ result->user = tryParseJson<User>(&TgTypeParser::parseJsonAndGetUser, data, "user");
return result;
}
@@ -118,8 +120,11 @@ Message::Ptr TgTypeParser::parseJsonAndGetMessage(const ptree& data) const {
result->date = data.get<int32_t>("date");
result->chat = parseJsonAndGetChat(data.find("chat")->second);
result->forwardFrom = tryParseJson<User>(&TgTypeParser::parseJsonAndGetUser, data, "forward_from");
+ result->forwardFromChat = tryParseJson<Chat>(&TgTypeParser::parseJsonAndGetChat, data, "forward_from_chat");
+ result->forwardFromMessageId = data.get<int32_t>("forward_from_message_id", 0);
result->forwardDate = data.get("forward_date", 0);
result->replyToMessage = tryParseJson<Message>(&TgTypeParser::parseJsonAndGetMessage, data, "reply_to_message");
+ result->editDate = data.get<int32_t>("edit_date", 0);
result->text = data.get("text", "");
result->entities = parseJsonAndGetArray<MessageEntity>(&TgTypeParser::parseJsonAndGetEntity, data, "entities");
result->audio = tryParseJson<Audio>(&TgTypeParser::parseJsonAndGetAudio, data, "audio");
@@ -154,8 +159,11 @@ string TgTypeParser::parseMessage(const Message::Ptr& object) const {
appendToJson(result, "date", object->date);
appendToJson(result, "chat", parseChat(object->chat));
appendToJson(result, "forward_from", parseUser(object->forwardFrom));
+ appendToJson(result, "forward_from_chat", parseChat(object->forwardFromChat));
+ appendToJson(result, "forward_from_message_id", object->forwardFromMessageId);
appendToJson(result, "forward_date", object->forwardDate);
appendToJson(result, "reply_to_message", parseMessage(object->replyToMessage));
+ appendToJson(result, "edit_date", object->editDate);
appendToJson(result, "text", object->text);
appendToJson(result, "audio", parseAudio(object->audio));
appendToJson(result, "document", parseDocument(object->document));
@@ -208,6 +216,8 @@ Audio::Ptr TgTypeParser::parseJsonAndGetAudio(const ptree& data) const {
Audio::Ptr result(new Audio);
result->fileId = data.get<string>("file_id");
result->duration = data.get<int32_t>("duration");
+ result->performer = data.get<string>("performer", "");
+ result->title = data.get<string>("title", "");
result->mimeType = data.get("mime_type", "");
result->fileSize = data.get("file_size", 0);
return result;
@@ -260,6 +270,7 @@ Sticker::Ptr TgTypeParser::parseJsonAndGetSticker(const ptree& data) const {
result->width = data.get<int32_t>("width");
result->height = data.get<int32_t>("height");
result->thumb = tryParseJson<PhotoSize>(&TgTypeParser::parseJsonAndGetPhotoSize, data, "thumb");
+ result->emoji = data.get<string>("emoji");
result->fileSize = data.get("file_size", 0);
return result;
}
@@ -274,6 +285,7 @@ string TgTypeParser::parseSticker(const Sticker::Ptr& object) const {
appendToJson(result, "width", object->width);
appendToJson(result, "height", object->height);
appendToJson(result, "thumb", parsePhotoSize(object->thumb));
+ appendToJson(result, "emoji", object->emoji);
appendToJson(result, "file_size", object->fileSize);
result.erase(result.length() - 1);
result += '}';
@@ -336,8 +348,8 @@ string TgTypeParser::parseContact(const Contact::Ptr& object) const {
Location::Ptr TgTypeParser::parseJsonAndGetLocation(const ptree& data) const {
Location::Ptr result(new Location);
- result->longitude = data.get<float>("longitude");
- result->latitude = data.get<float>("latitude");
+ result->longitude = data.get<float>("longitude", 0);
+ result->latitude = data.get<float>("latitude", 0);
return result;
}
@@ -358,6 +370,9 @@ Update::Ptr TgTypeParser::parseJsonAndGetUpdate(const ptree& data) const {
Update::Ptr result(new Update);
result->updateId = data.get<int32_t>("update_id");
result->message = tryParseJson<Message>(&TgTypeParser::parseJsonAndGetMessage, data, "message");
+ result->editedMessage = tryParseJson<Message>(&TgTypeParser::parseJsonAndGetMessage, data, "edited_message");
+ result->channelPost = tryParseJson<Message>(&TgTypeParser::parseJsonAndGetMessage, data, "channel_post");
+ result->editedChannelPost = tryParseJson<Message>(&TgTypeParser::parseJsonAndGetMessage, data, "edited_channel_post");
result->inlineQuery = tryParseJson<InlineQuery>(&TgTypeParser::parseJsonAndGetInlineQuery, data, "inline_query");
result->chosenInlineResult = tryParseJson<ChosenInlineResult>(&TgTypeParser::parseJsonAndGetChosenInlineResult, data, "chosen_inline_result");
result->callbackQuery = tryParseJson<CallbackQuery>(&TgTypeParser::parseJsonAndGetCallbackQuery, data, "callback_query");
@@ -372,6 +387,9 @@ string TgTypeParser::parseUpdate(const Update::Ptr& object) const {
result += '{';
appendToJson(result, "update_id", object->updateId);
appendToJson(result, "message", parseMessage(object->message));
+ appendToJson(result, "edited_message", parseMessage(object->editedMessage));
+ appendToJson(result, "channel_post", parseMessage(object->channelPost));
+ appendToJson(result, "edited_channel_post", parseMessage(object->editedChannelPost));
appendToJson(result, "inline_query", parseInlineQuery(object->inlineQuery));
appendToJson(result, "chosen_inline_result", parseChosenInlineResult(object->chosenInlineResult));
appendToJson(result, "callback_query", parseCallbackQuery(object->callbackQuery));
@@ -400,6 +418,28 @@ string TgTypeParser::parseUserProfilePhotos(const UserProfilePhotos::Ptr& object
return result;
}
+File::Ptr TgTypeParser::parseJsonAndGetFile(const boost::property_tree::ptree& data) const {
+ File::Ptr result(new File);
+ result->fileId = data.get<string>("file_id");
+ result->filePath = data.get<int32_t>("file_size", 0);
+ result->filePath = data.get<string>("file_path", "");
+ return result;
+}
+
+string TgTypeParser::parseFile(const File::Ptr& object) const {
+ if (!object) {
+ return "";
+ }
+ string result;
+ result += '{';
+ appendToJson(result, "file_id", object->fileId);
+ appendToJson(result, "file_size", object->fileSize);
+ appendToJson(result, "file_path", object->filePath);
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
ReplyKeyboardMarkup::Ptr TgTypeParser::parseJsonAndGetReplyKeyboardMarkup(const boost::property_tree::ptree& data) const {
ReplyKeyboardMarkup::Ptr result(new ReplyKeyboardMarkup);
for (const pair<const string, ptree>& item : data.find("keyboard")->second) {
@@ -442,19 +482,41 @@ std::string TgTypeParser::parseReplyKeyboardMarkup(const ReplyKeyboardMarkup::Pt
return result;
}
-ReplyKeyboardHide::Ptr TgTypeParser::parseJsonAndGetReplyKeyboardHide(const boost::property_tree::ptree& data) const {
- ReplyKeyboardHide::Ptr result(new ReplyKeyboardHide);
- result->selective = data.get<bool>("selective");
+KeyboardButton::Ptr TgTypeParser::parseJsonAndGetKeyboardButton(const boost::property_tree::ptree& data) const {
+ KeyboardButton::Ptr result(new KeyboardButton);
+ result->text = data.get<string>("text");
+ result->requestContact = data.get<bool>("request_contact", false);
+ result->requestLocation = data.get<bool>("request_location", false);
return result;
}
-std::string TgTypeParser::parseReplyKeyboardHide(const ReplyKeyboardHide::Ptr& object) const {
+std::string TgTypeParser::parseKeyboardButton(const KeyboardButton::Ptr& object) const {
if (!object) {
return "";
}
string result;
result += '{';
- appendToJson(result, "hide_keyboard", object->hideKeyboard);
+ appendToJson(result, "text", object->text);
+ appendToJson(result, "request_contact", object->requestContact);
+ appendToJson(result, "request_location", object->requestLocation);
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+ReplyKeyboardRemove::Ptr TgTypeParser::parseJsonAndGetReplyKeyboardRemove(const boost::property_tree::ptree& data) const {
+ ReplyKeyboardRemove::Ptr result(new ReplyKeyboardRemove);
+ result->selective = data.get<bool>("selective", false);
+ return result;
+}
+
+std::string TgTypeParser::parseReplyKeyboardRemove(const ReplyKeyboardRemove::Ptr& object) const {
+ if (!object) {
+ return "";
+ }
+ string result;
+ result += '{';
+ appendToJson(result, "remove_keyboard", object->removeKeyboard);
appendToJson(result, "selective", object->selective);
result.erase(result.length() - 1);
result += '}';
@@ -480,11 +542,51 @@ std::string TgTypeParser::parseForceReply(const ForceReply::Ptr& object) const {
return result;
}
+ChatMember::Ptr TgTypeParser::parseJsonAndGetChatMember(const boost::property_tree::ptree& data) const {
+ ChatMember::Ptr result(new ChatMember);
+ result->user = tryParseJson<User>(&TgTypeParser::parseJsonAndGetUser, data, "user");
+ result->status = data.get<string>("status");
+ return result;
+}
+
+std::string TgTypeParser::parseChatMember(const ChatMember::Ptr& object) const {
+ if (!object) {
+ return "";
+ }
+ string result;
+ result += '{';
+ appendToJson(result, "user", parseUser(object->user));
+ appendToJson(result, "status", object->status);
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+ResponseParameters::Ptr TgTypeParser::parseJsonAndGetResponseParameters(const boost::property_tree::ptree& data) const {
+ ResponseParameters::Ptr result(new ResponseParameters);
+ result->migrateToChatId = data.get<int32_t>("migrate_to_chat_id", 0);
+ result->retryAfter = data.get<int32_t>("retry_after", 0);
+ return result;
+}
+
+std::string TgTypeParser::parseResponseParameters(const ResponseParameters::Ptr& object) const {
+ if (!object) {
+ return "";
+ }
+ string result;
+ result += '{';
+ appendToJson(result, "migrate_to_chat_id", object->migrateToChatId);
+ appendToJson(result, "retry_after", object->retryAfter);
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
GenericReply::Ptr TgTypeParser::parseJsonAndGetGenericReply(const boost::property_tree::ptree& data) const {
if (data.find("force_reply") != data.not_found()) {
return static_pointer_cast<GenericReply>(parseJsonAndGetForceReply(data));
- } else if (data.find("hide_keyboard") != data.not_found()) {
- return static_pointer_cast<GenericReply>(parseJsonAndGetReplyKeyboardHide(data));
+ } else if (data.find("remove_keyboard") != data.not_found()) {
+ return static_pointer_cast<GenericReply>(parseJsonAndGetReplyKeyboardRemove(data));
} else if (data.find("keyboard") != data.not_found()) {
return static_pointer_cast<GenericReply>(parseJsonAndGetReplyKeyboardMarkup(data));
} else if (data.find("inline_keyboard") != data.not_found()) {
@@ -498,8 +600,8 @@ std::string TgTypeParser::parseGenericReply(const GenericReply::Ptr& object) con
}
if (dynamic_pointer_cast<ForceReply>(object) != nullptr) {
return parseForceReply(static_pointer_cast<ForceReply>(object));
- } else if (dynamic_pointer_cast<ReplyKeyboardHide>(object) != nullptr) {
- return parseReplyKeyboardHide(static_pointer_cast<ReplyKeyboardHide>(object));
+ } else if (dynamic_pointer_cast<ReplyKeyboardRemove>(object) != nullptr) {
+ return parseReplyKeyboardRemove(static_pointer_cast<ReplyKeyboardRemove>(object));
} else if (dynamic_pointer_cast<ReplyKeyboardMarkup>(object) != nullptr){
return parseReplyKeyboardMarkup(static_pointer_cast<ReplyKeyboardMarkup>(object));
} else if (dynamic_pointer_cast<InlineKeyboardMarkup>(object) != nullptr){
@@ -511,6 +613,7 @@ InlineQuery::Ptr TgTypeParser::parseJsonAndGetInlineQuery(const boost::property_
InlineQuery::Ptr result(new InlineQuery);
result->id = data.get<string>("id");
result->from = tryParseJson<User>(&TgTypeParser::parseJsonAndGetUser, data, "from");
+ result->location = tryParseJson<Location>(&TgTypeParser::parseJsonAndGetLocation, data, "location");
result->query = data.get<string>("query");
result->offset = data.get<string>("offset");
@@ -525,6 +628,7 @@ std::string TgTypeParser::parseInlineQuery(const InlineQuery::Ptr& object) const
result += '{';
appendToJson(result, "id", object->id);
appendToJson(result, "from", parseUser(object->from));
+ appendToJson(result, "location", parseLocation(object->location));
appendToJson(result, "query", object->query);
appendToJson(result, "offset", object->offset);
result.erase(result.length() - 1);
@@ -536,8 +640,38 @@ InlineQueryResult::Ptr TgTypeParser::parseJsonAndGetInlineQueryResult(const boos
string type = data.get<string>("type");
InlineQueryResult::Ptr result;
- if (type == InlineQueryResultArticle::TYPE) {
+ if (type == InlineQueryResultCachedAudio::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultCachedAudio(data));
+ } else if (type == InlineQueryResultCachedDocument::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultCachedDocument(data));
+ } else if (type == InlineQueryResultCachedGif::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultCachedGif(data));
+ } else if (type == InlineQueryResultCachedMpeg4Gif::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultCachedMpeg4Gif(data));
+ } else if (type == InlineQueryResultCachedPhoto::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultCachedPhoto(data));
+ } else if (type == InlineQueryResultCachedSticker::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultCachedSticker(data));
+ } else if (type == InlineQueryResultCachedVideo::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultCachedVideo(data));
+ } else if (type == InlineQueryResultCachedVoice::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultCachedVoice(data));
+ } else if (type == InlineQueryResultArticle::TYPE) {
result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultArticle(data));
+ } else if (type == InlineQueryResultAudio::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultAudio(data));
+ } else if (type == InlineQueryResultContact::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultContact(data));
+ } else if (type == InlineQueryResultGame::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultGame(data));
+ } else if (type == InlineQueryResultDocument::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultDocument(data));
+ } else if (type == InlineQueryResultLocation::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultLocation(data));
+ } else if (type == InlineQueryResultVenue::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultVenue(data));
+ } else if (type == InlineQueryResultVoice::TYPE) {
+ result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultVoice(data));
} else if (type == InlineQueryResultPhoto::TYPE) {
result = static_pointer_cast<InlineQueryResult>(parseJsonAndGetInlineQueryResultPhoto(data));
} else if (type == InlineQueryResultGif::TYPE) {
@@ -552,10 +686,9 @@ InlineQueryResult::Ptr TgTypeParser::parseJsonAndGetInlineQueryResult(const boos
result->id = data.get<string>("id");
result->title = data.get<string>("title", "");
- result->messageText = data.get<string>("message_text", "");
- result->parseMode = data.get<string>("parse_mode", "");
- result->disableWebPagePreview = data.get("disable_web_page_preview", false);
- result->thumbUrl = data.get<string>("thumb_url", "");
+ result->caption = data.get<string>("caption", "");
+ result->replyMarkup = tryParseJson<InlineKeyboardMarkup>(&TgTypeParser::parseJsonAndGetInlineKeyboardMarkup, data, "reply_markup");
+ result->inputMessageContent = tryParseJson<InputMessageContent>(&TgTypeParser::parseJsonAndGetInputMessageContent, data, "input_message_content");
return result;
}
@@ -570,34 +703,246 @@ std::string TgTypeParser::parseInlineQueryResult(const InlineQueryResult::Ptr& o
appendToJson(result, "id", object->id);
appendToJson(result, "type", object->type);
appendToJson(result, "title", object->title);
- appendToJson(result, "message_text", object->messageText);
- appendToJson(result, "parse_mode", object->parseMode);
- appendToJson(result, "disable_web_page_preview", object->disableWebPagePreview);
- appendToJson(result, "thumb_url", object->thumbUrl);
+ appendToJson(result, "caption", object->caption);
+ appendToJson(result, "reply_markup", parseInlineKeyboardMarkup(object->replyMarkup));
+ appendToJson(result, "input_message_content", parseInputMessageContent(object->inputMessageContent));
- if (object->type == InlineQueryResultArticle::TYPE){
+ if (object->type == InlineQueryResultCachedAudio::TYPE) {
+ result += parseInlineQueryResultCachedAudio(static_pointer_cast<InlineQueryResultCachedAudio>(object));
+ }
+ else if (object->type == InlineQueryResultCachedDocument::TYPE) {
+ result += parseInlineQueryResultCachedDocument(static_pointer_cast<InlineQueryResultCachedDocument>(object));
+ }
+ else if (object->type == InlineQueryResultCachedGif::TYPE) {
+ result += parseInlineQueryResultCachedGif(static_pointer_cast<InlineQueryResultCachedGif>(object));
+ }
+ else if (object->type == InlineQueryResultCachedMpeg4Gif::TYPE) {
+ result += parseInlineQueryResultCachedMpeg4Gif(static_pointer_cast<InlineQueryResultCachedMpeg4Gif>(object));
+ }
+ else if (object->type == InlineQueryResultCachedPhoto::TYPE) {
+ result += parseInlineQueryResultCachedPhoto(static_pointer_cast<InlineQueryResultCachedPhoto>(object));
+ }
+ else if (object->type == InlineQueryResultCachedSticker::TYPE) {
+ result += parseInlineQueryResultCachedSticker(static_pointer_cast<InlineQueryResultCachedSticker>(object));
+ }
+ else if (object->type == InlineQueryResultCachedVideo::TYPE) {
+ result += parseInlineQueryResultCachedVideo(static_pointer_cast<InlineQueryResultCachedVideo>(object));
+ }
+ else if (object->type == InlineQueryResultCachedVoice::TYPE) {
+ result += parseInlineQueryResultCachedVoice(static_pointer_cast<InlineQueryResultCachedVoice>(object));
+ }
+ else if (object->type == InlineQueryResultArticle::TYPE) {
result += parseInlineQueryResultArticle(static_pointer_cast<InlineQueryResultArticle>(object));
- } else if (object->type == InlineQueryResultPhoto::TYPE){
+ }
+ else if (object->type == InlineQueryResultAudio::TYPE) {
+ result += parseInlineQueryResultAudio(static_pointer_cast<InlineQueryResultAudio>(object));
+ }
+ else if (object->type == InlineQueryResultContact::TYPE) {
+ result += parseInlineQueryResultContact(static_pointer_cast<InlineQueryResultContact>(object));
+ }
+ else if (object->type == InlineQueryResultGame::TYPE) {
+ result += parseInlineQueryResultGame(static_pointer_cast<InlineQueryResultGame>(object));
+ }
+ else if (object->type == InlineQueryResultDocument::TYPE) {
+ result += parseInlineQueryResultDocument(static_pointer_cast<InlineQueryResultDocument>(object));
+ }
+ else if (object->type == InlineQueryResultLocation::TYPE) {
+ result += parseInlineQueryResultLocation(static_pointer_cast<InlineQueryResultLocation>(object));
+ }
+ else if (object->type == InlineQueryResultVenue::TYPE) {
+ result += parseInlineQueryResultVenue(static_pointer_cast<InlineQueryResultVenue>(object));
+ }
+ else if (object->type == InlineQueryResultVoice::TYPE) {
+ result += parseInlineQueryResultVoice(static_pointer_cast<InlineQueryResultVoice>(object));
+ }
+ else if (object->type == InlineQueryResultPhoto::TYPE) {
result += parseInlineQueryResultPhoto(static_pointer_cast<InlineQueryResultPhoto>(object));
- } else if (object->type == InlineQueryResultGif::TYPE){
+ }
+ else if (object->type == InlineQueryResultGif::TYPE) {
result += parseInlineQueryResultGif(static_pointer_cast<InlineQueryResultGif>(object));
- } else if (object->type == InlineQueryResultMpeg4Gif::TYPE){
+ }
+ else if (object->type == InlineQueryResultMpeg4Gif::TYPE) {
result += parseInlineQueryResultMpeg4Gif(static_pointer_cast<InlineQueryResultMpeg4Gif>(object));
- } else if (object->type == InlineQueryResultVideo::TYPE){
+ }
+ else if (object->type == InlineQueryResultVideo::TYPE) {
result += parseInlineQueryResultVideo(static_pointer_cast<InlineQueryResultVideo>(object));
}
-
+
result.erase(result.length() - 1);
result += '}';
return result;
}
+InlineQueryResultCachedAudio::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultCachedAudio(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultCachedAudio::Ptr result(new InlineQueryResultCachedAudio);
+ result->audioFileId = data.get<string>("audio_file_id");
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultCachedAudio(const InlineQueryResultCachedAudio::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "audio_file_id", object->audioFileId);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+InlineQueryResultCachedDocument::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultCachedDocument(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultCachedDocument::Ptr result(new InlineQueryResultCachedDocument);
+ result->documentFileId = data.get<string>("document_file_id");
+ result->description = data.get<string>("description", "");
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultCachedDocument(const InlineQueryResultCachedDocument::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "document_file_id", object->documentFileId);
+ appendToJson(result, "description", object->description);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+
+InlineQueryResultCachedGif::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultCachedGif(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultCachedGif::Ptr result(new InlineQueryResultCachedGif);
+ result->gifFileId = data.get<string>("gif_file_id");
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultCachedGif(const InlineQueryResultCachedGif::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "gif_file_id", object->gifFileId);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+
+InlineQueryResultCachedMpeg4Gif::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultCachedMpeg4Gif(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultCachedMpeg4Gif::Ptr result(new InlineQueryResultCachedMpeg4Gif);
+ result->mpeg4FileId = data.get<string>("mpeg4_file_id");
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultCachedMpeg4Gif(const InlineQueryResultCachedMpeg4Gif::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "mpeg4_file_id", object->mpeg4FileId);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+
+InlineQueryResultCachedPhoto::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultCachedPhoto(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultCachedPhoto::Ptr result(new InlineQueryResultCachedPhoto);
+ result->photoFileId = data.get<string>("photo_file_id");
+ result->description = data.get<string>("description", "");
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultCachedPhoto(const InlineQueryResultCachedPhoto::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "photo_file_id", object->photoFileId);
+ appendToJson(result, "description", object->description);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+
+InlineQueryResultCachedSticker::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultCachedSticker(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultCachedSticker::Ptr result(new InlineQueryResultCachedSticker);
+ result->stickerFileId = data.get<string>("sticker_file_id");
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultCachedSticker(const InlineQueryResultCachedSticker::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "sticker_file_id", object->stickerFileId);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+InlineQueryResultCachedVideo::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultCachedVideo(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultCachedVideo::Ptr result(new InlineQueryResultCachedVideo);
+ result->videoFileId = data.get<string>("video_file_id");
+ result->description = data.get<string>("description", "");
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultCachedVideo(const InlineQueryResultCachedVideo::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "video_file_id", object->videoFileId);
+ appendToJson(result, "description", object->description);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+
+InlineQueryResultCachedVoice::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultCachedVoice(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultCachedVoice::Ptr result(new InlineQueryResultCachedVoice);
+ result->voiceFileId = data.get<string>("voice_file_id");
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultCachedVoice(const InlineQueryResultCachedVoice::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "voice_file_id", object->voiceFileId);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
InlineQueryResultArticle::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultArticle(const boost::property_tree::ptree& data) const {
// NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
InlineQueryResultArticle::Ptr result(new InlineQueryResultArticle);
result->url = data.get<string>("url", "");
result->hideUrl = data.get("hide_url", false);
result->description = data.get<string>("description", "");
+ result->thumbUrl = data.get<string>("thumb_url", "");
result->thumbWidth = data.get("thumb_width", 0);
result->thumbHeight = data.get("thumb_height", 0);
return result;
@@ -613,20 +958,203 @@ std::string TgTypeParser::parseInlineQueryResultArticle(const InlineQueryResultA
appendToJson(result, "url", object->url);
appendToJson(result, "hide_url", object->hideUrl);
appendToJson(result, "description", object->description);
+ appendToJson(result, "thumb_url", object->thumbUrl);
+ appendToJson(result, "thumb_width", object->thumbWidth);
+ appendToJson(result, "thumb_height", object->thumbHeight);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+InlineQueryResultAudio::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultAudio(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultAudio::Ptr result(new InlineQueryResultAudio);
+ result->audioUrl = data.get<string>("audio_url");
+ result->performer = data.get<string>("performer", "");
+ result->audioDuration = data.get<int32_t>("audio_duration", 0);
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultAudio(const InlineQueryResultAudio::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "audio_url", object->audioUrl);
+ appendToJson(result, "performer", object->performer);
+ appendToJson(result, "audio_duration", object->audioDuration);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+
+InlineQueryResultContact::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultContact(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultContact::Ptr result(new InlineQueryResultContact);
+ result->phoneNumber = data.get<string>("phone_number");
+ result->firstName = data.get<string>("first_name");
+ result->lastName = data.get<string>("last_name", "");
+ result->thumbUrl = data.get<string>("thumb_url", "");
+ result->thumbWidth = data.get<int32_t>("thumb_width", 0);
+ result->thumbHeight = data.get<int32_t>("thumb_height", 0);
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultContact(const InlineQueryResultContact::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "phone_number", object->phoneNumber);
+ appendToJson(result, "first_name", object->firstName);
+ appendToJson(result, "last_name", object->lastName);
+ appendToJson(result, "thumb_url", object->thumbUrl);
+ appendToJson(result, "thumb_width", object->thumbWidth);
+ appendToJson(result, "thumb_height", object->thumbHeight);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+
+InlineQueryResultGame::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultGame(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultGame::Ptr result(new InlineQueryResultGame);
+ result->gameShortName = data.get<string>("game_short_name");
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultGame(const InlineQueryResultGame::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "game_short_name", object->gameShortName);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+InlineQueryResultDocument::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultDocument(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultDocument::Ptr result(new InlineQueryResultDocument);
+ result->documentUrl = data.get<string>("document_url");
+ result->mimeType = data.get<string>("mime_type");
+ result->description = data.get<string>("description", "");
+ result->thumbUrl = data.get<string>("thumb_url", "");
+ result->thumbWidth = data.get<int32_t>("thumb_width", 0);
+ result->thumbHeight = data.get<int32_t>("thumb_height", 0);
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultDocument(const InlineQueryResultDocument::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "document_url", object->documentUrl);
+ appendToJson(result, "mime_type", object->mimeType);
+ appendToJson(result, "description", object->description);
+ appendToJson(result, "thumb_url", object->thumbUrl);
+ appendToJson(result, "thumb_width", object->thumbWidth);
+ appendToJson(result, "thumb_height", object->thumbHeight);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+InlineQueryResultLocation::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultLocation(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultLocation::Ptr result(new InlineQueryResultLocation);
+ result->latitude = data.get<float>("latitude");
+ result->longitude = data.get<float>("longitude");
+ result->thumbUrl = data.get<string>("thumb_url", "");
+ result->thumbWidth = data.get<int32_t>("thumb_width", 0);
+ result->thumbHeight = data.get<int32_t>("thumb_height", 0);
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultLocation(const InlineQueryResultLocation::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "latitude", object->latitude);
+ appendToJson(result, "longitude", object->longitude);
+ appendToJson(result, "thumb_url", object->thumbUrl);
appendToJson(result, "thumb_width", object->thumbWidth);
appendToJson(result, "thumb_height", object->thumbHeight);
// The last comma will be erased by parseInlineQueryResult().
return result;
}
+
+InlineQueryResultVenue::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultVenue(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultVenue::Ptr result(new InlineQueryResultVenue);
+ result->latitude = data.get<float>("latitude");
+ result->longitude = data.get<float>("longitude");
+ result->address = data.get<string>("address");
+ result->foursquareId = data.get<string>("foursquare_id", "");
+ result->thumbUrl = data.get<string>("thumb_url", "");
+ result->thumbWidth = data.get<int32_t>("thumb_width", 0);
+ result->thumbHeight = data.get<int32_t>("thumb_height", 0);
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultVenue(const InlineQueryResultVenue::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "latitude", object->latitude);
+ appendToJson(result, "longitude", object->longitude);
+ appendToJson(result, "address", object->address);
+ appendToJson(result, "foursquare_id", object->foursquareId);
+ appendToJson(result, "thumb_url", object->thumbUrl);
+ appendToJson(result, "thumb_width", object->thumbWidth);
+ appendToJson(result, "thumb_height", object->thumbHeight);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
+InlineQueryResultVoice::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultVoice(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
+ InlineQueryResultVoice::Ptr result(new InlineQueryResultVoice);
+ result->voiceUrl = data.get<string>("voice_url");
+ result->voiceDuration = data.get<int32_t>("voice_duration", 0);
+ return result;
+}
+
+std::string TgTypeParser::parseInlineQueryResultVoice(const InlineQueryResultVoice::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInlineQueryResult(), so I don't add
+ // curly brackets to the result string.
+ string result;
+ appendToJson(result, "voice_url", object->voiceUrl);
+ appendToJson(result, "voice_duration", object->voiceDuration);
+ // The last comma will be erased by parseInlineQueryResult().
+ return result;
+}
+
InlineQueryResultPhoto::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultPhoto(const boost::property_tree::ptree& data) const {
// NOTE: This function will be called by parseJsonAndGgetInlineQueryResult().
InlineQueryResultPhoto::Ptr result(new InlineQueryResultPhoto);
result->photoUrl = data.get<string>("photo_url", "");
+ result->thumbUrl = data.get<string>("thumb_url");
result->photoWidth = data.get("photo_width", 0);
result->photoHeight = data.get("photo_height", 0);
result->description = data.get<string>("description", "");
- result->caption = data.get<string>("caption", "");
return result;
}
@@ -638,10 +1166,10 @@ std::string TgTypeParser::parseInlineQueryResultPhoto(const InlineQueryResultPho
// curly brackets to the result string.
string result;
appendToJson(result, "photo_url", object->photoUrl);
+ appendToJson(result, "thumb_url", object->thumbUrl);
appendToJson(result, "photo_width", object->photoWidth);
appendToJson(result, "photo_height", object->photoHeight);
appendToJson(result, "description", object->description);
- appendToJson(result, "caption", object->caption);
// The last comma will be erased by parseInlineQueryResult().
return result;
}
@@ -652,7 +1180,7 @@ InlineQueryResultGif::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultGif(cons
result->gifUrl = data.get<string>("gif_url", "");
result->gifWidth = data.get("gif_width", 0);
result->gifHeight = data.get("gif_height", 0);
- result->caption = data.get<string>("caption", "");
+ result->thumbUrl = data.get<string>("thumb_url");
return result;
}
std::string TgTypeParser::parseInlineQueryResultGif(const InlineQueryResultGif::Ptr& object) const {
@@ -665,7 +1193,7 @@ std::string TgTypeParser::parseInlineQueryResultGif(const InlineQueryResultGif::
appendToJson(result, "gif_url", object->gifUrl);
appendToJson(result, "gif_width", object->gifWidth);
appendToJson(result, "gif_height", object->gifHeight);
- appendToJson(result, "caption", object->caption);
+ appendToJson(result, "thumb_url", object->thumbUrl);
// The last comma will be erased by parseInlineQueryResult().
return result;
}
@@ -676,7 +1204,7 @@ InlineQueryResultMpeg4Gif::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultMpe
result->mpeg4Url = data.get<string>("mpeg4_url");
result->mpeg4Width = data.get("mpeg4_width", 0);
result->mpeg4Height = data.get("mpeg4_height", 0);
- result->caption = data.get("caption", "");
+ result->thumbUrl = data.get<string>("thumb_url");
return result;
}
@@ -690,7 +1218,7 @@ std::string TgTypeParser::parseInlineQueryResultMpeg4Gif(const InlineQueryResult
appendToJson(result, "mpeg4_url", object->mpeg4Url);
appendToJson(result, "mpeg4_width", object->mpeg4Width);
appendToJson(result, "mpeg4_height", object->mpeg4Height);
- appendToJson(result, "caption", object->caption);
+ appendToJson(result, "thumb_url", object->thumbUrl);
// The last comma will be erased by parseInlineQueryResult().
return result;
}
@@ -700,7 +1228,8 @@ InlineQueryResultVideo::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultVideo(
InlineQueryResultVideo::Ptr result(new InlineQueryResultVideo);
result->videoUrl = data.get<string>("video_url");
result->mimeType = data.get<string>("mime_type");
- result->videoWidth = data.get("video_height", 0);
+ result->thumbUrl = data.get<string>("thumb_url");
+ result->videoWidth = data.get("video_width", 0);
result->videoHeight = data.get("video_height", 0);
result->videoDuration = data.get("video_duration", 0);
result->description = data.get<string>("description", "");
@@ -716,6 +1245,7 @@ std::string TgTypeParser::parseInlineQueryResultVideo(const InlineQueryResultVid
string result;
appendToJson(result, "video_url", object->videoUrl);
appendToJson(result, "mime_type", object->mimeType);
+ appendToJson(result, "thumb_url", object->thumbUrl);
appendToJson(result, "video_width", object->videoWidth);
appendToJson(result, "video_height", object->videoHeight);
appendToJson(result, "video_duration", object->videoDuration);
@@ -728,6 +1258,8 @@ ChosenInlineResult::Ptr TgTypeParser::parseJsonAndGetChosenInlineResult(const bo
ChosenInlineResult::Ptr result(new ChosenInlineResult);
result->resultId = data.get<string>("result_id");
result->from = tryParseJson<User>(&TgTypeParser::parseJsonAndGetUser, data, "from");
+ result->location = tryParseJson<Location>(&TgTypeParser::parseJsonAndGetLocation, data, "location");
+ result->inlineMessageId = data.get<string>("inline_message_id", "");
result->query = data.get<string>("query");
return result;
}
@@ -753,6 +1285,8 @@ CallbackQuery::Ptr TgTypeParser::parseJsonAndGetCallbackQuery(const boost::prope
result->from = tryParseJson<User>(&TgTypeParser::parseJsonAndGetUser, data, "from");
result->message = tryParseJson<Message>(&TgTypeParser::parseJsonAndGetMessage, data, "message");
result->inlineMessageId = data.get<string>("inline_message_id", "");
+ result->chatInstance = data.get<string>("chat_instance");
+ result->gameShortName = data.get<string>("game_short_name", "");
result->data = data.get<string>("data", "");
return result;
}
@@ -768,6 +1302,8 @@ std::string TgTypeParser::parseCallbackQuery(const CallbackQuery::Ptr& object) c
appendToJson(result, "from", parseUser(object->from));
appendToJson(result, "message", parseMessage(object->message));
appendToJson(result, "inline_message_id", object->inlineMessageId);
+ appendToJson(result, "chat_instance", object->chatInstance);
+ appendToJson(result, "game_short_name", object->gameShortName);
appendToJson(result, "data", object->data);
result.erase(result.length() - 1);
result += '}';
@@ -809,6 +1345,7 @@ InlineKeyboardButton::Ptr TgTypeParser::parseJsonAndGetInlineKeyboardButton(cons
result->url = data.get<string>("url", "");
result->callbackData = data.get<string>("callback_data", "");
result->switchInlineQuery = data.get<string>("switch_inline_query", "");
+ result->switchInlineQueryCurrentChat = data.get<string>("switch_inline_query_current_chat", "");
return result;
}
std::string TgTypeParser::parseInlineKeyboardButton(const InlineKeyboardButton::Ptr& object) const {
@@ -821,11 +1358,188 @@ std::string TgTypeParser::parseInlineKeyboardButton(const InlineKeyboardButton::
appendToJson(result, "url", object->url);
appendToJson(result, "callback_data", object->callbackData);
appendToJson(result, "switch_inline_query", object->switchInlineQuery);
+ appendToJson(result, "switch_inline_query_current_chat", object->switchInlineQueryCurrentChat);
result.erase(result.length() - 1);
result += '}';
return result;
}
+WebhookInfo::Ptr TgTypeParser::parseJsonAndGetWebhookInfo(const boost::property_tree::ptree& data) const {
+ WebhookInfo::Ptr result(new WebhookInfo);
+ result->url = data.get<string>("url");
+ result->hasCustomCertificate = data.get<bool>("has_custom_certificate");
+ result->pendingUpdateCount = data.get<int32_t>("pending_update_count");
+ result->lastErrorDate = data.get<int32_t>("last_error_date", 0);
+ result->lastErrorMessage = data.get<string>("last_error_message", "");
+ result->maxConnections = data.get<int32_t>("max_connections", 0);
+ result->allowedUpdates = parseJsonAndGetArray<std::string>(
+ [](const boost::property_tree::ptree& innerData)->std::string {
+ return innerData.get<std::string>("");
+ }
+ , data, "allowed_updates");
+ return result;
+}
+
+std::string TgTypeParser::parseWebhookInfo(const WebhookInfo::Ptr& object) const {
+ if (!object) {
+ return "";
+ }
+ string result;
+ result += '{';
+ appendToJson(result, "url", object->url);
+ appendToJson(result, "has_custom_certificate", object->hasCustomCertificate);
+ appendToJson(result, "pending_update_count", object->pendingUpdateCount);
+ appendToJson(result, "last_error_date", object->lastErrorDate);
+ appendToJson(result, "last_error_message", object->lastErrorMessage);
+ appendToJson(result, "max_connections", object->maxConnections);
+ appendToJson(result, "allowed_updates",
+ parseArray<std::string>([](const std::string &s)->std::string {
+ return s;
+ }
+ , object->allowedUpdates));
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+InputMessageContent::Ptr TgTypeParser::parseJsonAndGetInputMessageContent(const boost::property_tree::ptree& data) const {
+ InputMessageContent::Ptr result;
+ // define InputMessageContent type
+
+ string tMessageText = data.get<string>("message_text", "");
+ float tLatitude = data.get<float>("latitude", 1000); // latitude belong (-90,90)
+ string tTitle = data.get<string>("title", "");
+ string tPnoneNumber = data.get<string>("phone_number", "");
+
+ if (!tMessageText.empty()) {
+ result = static_pointer_cast<InputMessageContent>(parseJsonAndGetInputTextMessageContent(data));
+ } else if (!tTitle.empty()) {
+ result = static_pointer_cast<InputMessageContent>(parseJsonAndGetInputVenueMessageContent(data));
+ } else if (tLatitude != 1000) {
+ result = static_pointer_cast<InputMessageContent>(parseJsonAndGetInputLocationMessageContent(data));
+ } else if (!tPnoneNumber.empty()) {
+ result = static_pointer_cast<InputMessageContent>(parseJsonAndGetInputContactMessageContent(data));
+ }
+
+ return result;
+}
+
+std::string TgTypeParser::parseInputMessageContent(const InputMessageContent::Ptr& object) const {
+ if (!object){
+ return "";
+ }
+
+ string result;
+ result += '{';
+
+ if (object->type == std::string("InputTextMessageContent")) {
+ result += parseInputTextMessageContent(static_pointer_cast<InputTextMessageContent>(object));
+ }
+ else if (object->type == std::string("InputLocationMessageContent")) {
+ result += parseInputLocationMessageContent(static_pointer_cast<InputLocationMessageContent>(object));
+ }
+ else if (object->type == std::string("InputVenueMessageContent")) {
+ result += parseInputVenueMessageContent(static_pointer_cast<InputVenueMessageContent>(object));
+ }
+ else if (object->type == std::string("InputContactMessageContent")) {
+ result += parseInputContactMessageContent(static_pointer_cast<InputContactMessageContent>(object));
+ }
+
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+InputTextMessageContent::Ptr TgTypeParser::parseJsonAndGetInputTextMessageContent(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGetInputMessageContent().
+ InputTextMessageContent::Ptr result(new InputTextMessageContent);
+ result->messageText = data.get<string>("message_text");
+ result->parseMode = data.get<string>("parse_mode", "");
+ result->disableWebPagePreview = data.get<bool>("disable_web_page_preview", false);
+ return result;
+}
+
+std::string TgTypeParser::parseInputTextMessageContent(const InputTextMessageContent::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInputMessageContent()
+ string result;
+ appendToJson(result, "message_text", object->messageText);
+ appendToJson(result, "parse_mode", object->parseMode);
+ appendToJson(result, "disable_web_page_preview", object->disableWebPagePreview);
+ // The last comma will be erased by parseInputMessageContent().
+ return result;
+}
+
+InputLocationMessageContent::Ptr TgTypeParser::parseJsonAndGetInputLocationMessageContent(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGetInputMessageContent().
+ InputLocationMessageContent::Ptr result(new InputLocationMessageContent);
+ result->latitude = data.get<float>("latitude");
+ result->longitude = data.get<float>("longitude");
+ return result;
+}
+
+std::string TgTypeParser::parseInputLocationMessageContent(const InputLocationMessageContent::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInputMessageContent()
+ string result;
+ appendToJson(result, "latitude", object->latitude);
+ appendToJson(result, "longitude", object->longitude);
+ // The last comma will be erased by parseInputMessageContent().
+ return result;
+}
+
+InputVenueMessageContent::Ptr TgTypeParser::parseJsonAndGetInputVenueMessageContent(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGetInputMessageContent().
+ InputVenueMessageContent::Ptr result(new InputVenueMessageContent);
+ result->latitude = data.get<float>("latitude");
+ result->longitude = data.get<float>("longitude");
+ result->title = data.get<string>("title");
+ result->address = data.get<string>("address");
+ result->foursquareId = data.get<string>("foursquare_id", "");
+ return result;
+}
+
+std::string TgTypeParser::parseInputVenueMessageContent(const InputVenueMessageContent::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInputMessageContent()
+ string result;
+ appendToJson(result, "latitude", object->latitude);
+ appendToJson(result, "longitude", object->longitude);
+ appendToJson(result, "title", object->title);
+ appendToJson(result, "address", object->address);
+ appendToJson(result, "foursquare_id", object->foursquareId);
+ // The last comma will be erased by parseInputMessageContent().
+ return result;
+}
+
+InputContactMessageContent::Ptr TgTypeParser::parseJsonAndGetInputContactMessageContent(const boost::property_tree::ptree& data) const {
+ // NOTE: This function will be called by parseJsonAndGetInputMessageContent().
+ InputContactMessageContent::Ptr result(new InputContactMessageContent);
+ result->phoneNumber = data.get<string>("phone_number");
+ result->firstName = data.get<string>("first_name");
+ result->lastName = data.get<string>("last_name", "");
+ return result;
+}
+
+std::string TgTypeParser::parseInputContactMessageContent(const InputContactMessageContent::Ptr& object) const {
+ if (!object){
+ return " ";
+ }
+ // This function will be called by parseInputMessageContent()
+ string result;
+ appendToJson(result, "phone_number", object->phoneNumber);
+ appendToJson(result, "first_name", object->firstName);
+ appendToJson(result, "last_name", object->lastName);
+ // The last comma will be erased by parseInputMessageContent().
+ return result;
+}
+
void TgTypeParser::appendToJson(string& json, const string& varName, const string& value) const {
if (value.empty()) {
return;
diff --git a/src/types/InlineQueryResult.cpp b/src/types/InlineQueryResult.cpp
index be1f14a..9f90e19 100644
--- a/src/types/InlineQueryResult.cpp
+++ b/src/types/InlineQueryResult.cpp
@@ -1,6 +1,22 @@
//
// Created by Andrea Giove on 27/03/16.
//
+
+#include "tgbot/types/InlineQueryResultCachedAudio.h"
+#include "tgbot/types/InlineQueryResultCachedDocument.h"
+#include "tgbot/types/InlineQueryResultCachedGif.h"
+#include "tgbot/types/InlineQueryResultCachedMpeg4Gif.h"
+#include "tgbot/types/InlineQueryResultCachedPhoto.h"
+#include "tgbot/types/InlineQueryResultCachedSticker.h"
+#include "tgbot/types/InlineQueryResultCachedVideo.h"
+#include "tgbot/types/InlineQueryResultCachedVoice.h"
+#include "tgbot/types/InlineQueryResultAudio.h"
+#include "tgbot/types/InlineQueryResultContact.h"
+#include "tgbot/types/InlineQueryResultGame.h"
+#include "tgbot/types/InlineQueryResultDocument.h"
+#include "tgbot/types/InlineQueryResultLocation.h"
+#include "tgbot/types/InlineQueryResultVenue.h"
+#include "tgbot/types/InlineQueryResultVoice.h"
#include "tgbot/types/InlineQueryResultArticle.h"
#include "tgbot/types/InlineQueryResultGif.h"
#include "tgbot/types/InlineQueryResultMpeg4Gif.h"
@@ -9,8 +25,24 @@
using namespace TgBot;
+const std::string InlineQueryResultCachedAudio::TYPE = "cached_audio";
+const std::string InlineQueryResultCachedDocument::TYPE = "cached_document";
+const std::string InlineQueryResultCachedGif::TYPE = "cached_gif";
+const std::string InlineQueryResultCachedMpeg4Gif::TYPE = "cached_mpeg4gif";
+const std::string InlineQueryResultCachedPhoto::TYPE = "cached_photo";
+const std::string InlineQueryResultCachedSticker::TYPE = "cached_sticker";
+const std::string InlineQueryResultCachedVideo::TYPE = "cached_video";
+const std::string InlineQueryResultCachedVoice::TYPE = "cached_voice";
+
const std::string InlineQueryResultArticle::TYPE = "article";
+const std::string InlineQueryResultAudio::TYPE = "audio";
+const std::string InlineQueryResultContact::TYPE = "contact";
+const std::string InlineQueryResultGame::TYPE = "game";
+const std::string InlineQueryResultDocument::TYPE = "document";
const std::string InlineQueryResultGif::TYPE = "gif";
+const std::string InlineQueryResultLocation::TYPE = "location";
const std::string InlineQueryResultMpeg4Gif::TYPE = "mpeg4_gif";
const std::string InlineQueryResultPhoto::TYPE = "photo";
+const std::string InlineQueryResultVenue::TYPE = "venue";
const std::string InlineQueryResultVideo::TYPE = "video";
+const std::string InlineQueryResultVoice::TYPE = "voice";