#include "tgbot/TgTypeParser.h" #include #include namespace TgBot { Chat::Ptr TgTypeParser::parseJsonAndGetChat(const boost::property_tree::ptree& data) const { auto result(std::make_shared()); result->id = data.get("id", 0); std::string type = data.get("type", ""); if (type == "private") { result->type = Chat::Type::Private; } else if (type == "group") { result->type = Chat::Type::Group; } else if (type == "supergroup") { result->type = Chat::Type::Supergroup; } else if (type == "channel") { result->type = Chat::Type::Channel; } result->title = data.get("title", ""); result->username = data.get("username", ""); result->firstName = data.get("first_name", ""); result->lastName = data.get("last_name", ""); result->photo = tryParseJson(&TgTypeParser::parseJsonAndGetChatPhoto, data, "photo"); result->bio = data.get("bio", ""); result->hasPrivateForwards = data.get("has_private_forwards", false); result->description = data.get("description", ""); result->inviteLink = data.get("invite_link", ""); result->pinnedMessage = tryParseJson(&TgTypeParser::parseJsonAndGetMessage, data, "pinned_message"); result->permissions = tryParseJson(&TgTypeParser::parseJsonAndGetChatPermissions, data, "permissions"); result->slowModeDelay = data.get("slow_mode_delay", 0); result->messageAutoDeleteTime = data.get("message_auto_delete_time", 0); result->hasProtectedContent = data.get("has_protected_content", false); result->stickerSetName = data.get("sticker_set_name", ""); result->canSetStickerSet = data.get("can_set_sticker_set", false); result->linkedChatId = data.get("linked_chat_id", 0); result->location = tryParseJson(&TgTypeParser::parseJsonAndGetChatLocation, data, "location"); return result; } std::string TgTypeParser::parseChat(const Chat::Ptr& object) const { if (!object) { return ""; } std::string result; result += '{'; appendToJson(result, "id", object->id); if (object->type == Chat::Type::Private) { appendToJson(result, "type", "private"); } else if (object->type == Chat::Type::Group) { appendToJson(result, "type", "group"); } else if (object->type == Chat::Type::Supergroup) { appendToJson(result, "type", "supergroup"); } else if (object->type == Chat::Type::Channel) { appendToJson(result, "type", "channel"); } appendToJson(result, "title", object->title); appendToJson(result, "username", object->username); appendToJson(result, "first_name", object->firstName); appendToJson(result, "last_name", object->lastName); appendToJson(result, "photo", parseChatPhoto(object->photo)); appendToJson(result, "bio", object->bio); appendToJson(result, "has_private_forwards", object->hasPrivateForwards); appendToJson(result, "description", object->description); appendToJson(result, "invite_link", object->inviteLink); appendToJson(result, "pinned_message", parseMessage(object->pinnedMessage)); appendToJson(result, "permissions", parseChatPermissions(object->permissions)); appendToJson(result, "slow_mode_delay", object->slowModeDelay); appendToJson(result, "message_auto_delete_time", object->messageAutoDeleteTime); appendToJson(result, "has_protected_content", object->hasProtectedContent); appendToJson(result, "sticker_set_name", object->stickerSetName); appendToJson(result, "can_set_sticker_set", object->canSetStickerSet); appendToJson(result, "linked_chat_id", object->linkedChatId); appendToJson(result, "location", parseChatLocation(object->location)); removeLastComma(result); result += '}'; return result; } User::Ptr TgTypeParser::parseJsonAndGetUser(const boost::property_tree::ptree& data) const { auto result(std::make_shared()); result->id = data.get("id", 0); result->isBot = data.get("is_bot", false); result->firstName = data.get("first_name", ""); result->lastName = data.get("last_name", ""); result->username = data.get("username", ""); result->languageCode = data.get("language_code", ""); result->canJoinGroups = data.get("can_join_groups", false); result->canReadAllGroupMessages = data.get("can_read_all_group_messages", false); result->supportsInlineQueries = data.get("supports_inline_queries", false); return result; } std::string TgTypeParser::parseUser(const User::Ptr& object) const { if (!object) { return ""; } std::string result; result += '{'; appendToJson(result, "id", object->id); appendToJson(result, "is_bot", object->isBot); appendToJson(result, "first_name", object->firstName); appendToJson(result, "last_name", object->lastName); appendToJson(result, "username", object->username); appendToJson(result, "language_code", object->languageCode); appendToJson(result, "can_join_groups", object->canJoinGroups); appendToJson(result, "can_read_all_group_messages", object->canReadAllGroupMessages); appendToJson(result, "supports_inline_queries", object->supportsInlineQueries); removeLastComma(result); result += '}'; return result; } MessageEntity::Ptr TgTypeParser::parseJsonAndGetMessageEntity(const boost::property_tree::ptree& data) const{ auto result(std::make_shared()); result->type = data.get("type", ""); result->offset = data.get("offset", 0); result->length = data.get("length", 0); result->url = data.get("url", ""); result->user = tryParseJson(&TgTypeParser::parseJsonAndGetUser, data, "user"); result->language = data.get("language", ""); return result; } std::string TgTypeParser::parseMessageEntity(const MessageEntity::Ptr& object) const { if (!object) { return ""; } std::string result; result += '{'; appendToJson(result, "type", object->type); appendToJson(result, "offset", object->offset); appendToJson(result, "length", object->length); appendToJson(result, "url", object->url); appendToJson(result, "user", parseUser(object->user)); appendToJson(result, "language", object->url); removeLastComma(result); result += '}'; return result; } Message::Ptr TgTypeParser::parseJsonAndGetMessage(const boost::property_tree::ptree& data) const { auto result(std::make_shared()); result->messageId = data.get("message_id", 0); result->from = tryParseJson(&TgTypeParser::parseJsonAndGetUser, data, "from"); result->senderChat = tryParseJson(&TgTypeParser::parseJsonAndGetChat, data, "sender_chat"); result->date = data.get("date", 0); result->chat = parseJsonAndGetChat(data.find("chat")->second); result->forwardFrom = tryParseJson(&TgTypeParser::parseJsonAndGetUser, data, "forward_from"); result->forwardFromChat = tryParseJson(&TgTypeParser::parseJsonAndGetChat, data, "forward_from_chat"); result->forwardFromMessageId = data.get("forward_from_message_id", 0); result->forwardSignature = data.get("forward_signature", ""); result->forwardSenderName = data.get("forward_sender_name", ""); result->forwardDate = data.get("forward_date", 0); result->isAutomaticForward = data.get("is_automatic_forward", false); result->replyToMessage = tryParseJson(&TgTypeParser::parseJsonAndGetMessage, data, "reply_to_message"); result->viaBot = tryParseJson(&TgTypeParser::parseJsonAndGetUser, data, "via_bot"); result->editDate = data.get("edit_date", 0); result->hasProtectedContent = data.get("has_protected_content", false); result->mediaGroupId = data.get("media_group_id", ""); result->authorSignature = data.get("author_signature", ""); result->text = data.get("text", ""); result->entities = parseJsonAndGetArray(&TgTypeParser::parseJsonAndGetMessageEntity, data, "entities"); result->animation = tryParseJson(&TgTypeParser::parseJsonAndGetAnimation, data, "animation"); result->audio = tryParseJson