From e6eda8c31d5fb4649e7a285c77337fa85c5c25b6 Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 27 Feb 2021 22:32:50 +0300 Subject: [PATCH] Add Client::get_input_entities function. --- telegram-bot-api/Client.cpp | 45 ++++++++++++++++--------------------- telegram-bot-api/Client.h | 2 ++ 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 9239dbe..8db11f6 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -5579,16 +5579,23 @@ td::Result>> Cl return std::move(errors); } -td::Result> Client::get_caption(const Query *query) { - JsonValue entities; - auto r_value = json_decode(query->arg("caption_entities")); - if (r_value.is_ok()) { - entities = r_value.move_as_ok(); - } else { - LOG(INFO) << "Can't parse JSON object: " << r_value.error(); +JsonValue Client::get_input_entities(const Query *query, Slice field_name) { + auto entities = query->arg(field_name); + if (!entities.empty()) { + auto r_value = json_decode(entities); + if (r_value.is_ok()) { + return r_value.move_as_ok(); + } + + LOG(INFO) << "Can't parse entities JSON object: " << r_value.error(); } - return get_formatted_text(query->arg("caption").str(), query->arg("parse_mode").str(), std::move(entities)); + return JsonValue(); +} + +td::Result> Client::get_caption(const Query *query) { + return get_formatted_text(query->arg("caption").str(), query->arg("parse_mode").str(), + get_input_entities(query, "caption_entities")); } td::Result> Client::get_text_entity_type(td::JsonObject &object) { @@ -5697,16 +5704,8 @@ td::Result> Client::get_formatted_text } td::Result> Client::get_input_message_text(const Query *query) { - JsonValue entities; - auto r_value = json_decode(query->arg("entities")); - if (r_value.is_ok()) { - entities = r_value.move_as_ok(); - } else { - LOG(INFO) << "Can't parse JSON object: " << r_value.error(); - } - return get_input_message_text(query->arg("text").str(), to_bool(query->arg("disable_web_page_preview")), - query->arg("parse_mode").str(), std::move(entities)); + query->arg("parse_mode").str(), get_input_entities(query, "entities")); } td::Result> Client::get_input_message_text(td::string text, @@ -6401,15 +6400,9 @@ td::Status Client::process_send_poll_query(PromisedQueryPtr &query) { object_ptr poll_type; auto type = query->arg("type"); if (type == "quiz") { - JsonValue entities; - auto r_value = json_decode(query->arg("explanation_entities")); - if (r_value.is_ok()) { - entities = r_value.move_as_ok(); - } else { - LOG(INFO) << "Can't parse JSON object: " << r_value.error(); - } - TRY_RESULT(explanation, get_formatted_text(query->arg("explanation").str(), - query->arg("explanation_parse_mode").str(), std::move(entities))); + TRY_RESULT(explanation, + get_formatted_text(query->arg("explanation").str(), query->arg("explanation_parse_mode").str(), + get_input_entities(query.get(), "explanation_entities"))); poll_type = make_object(get_integer_arg(query.get(), "correct_option_id", -1), std::move(explanation)); diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index b209109..2ad425d 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -351,6 +351,8 @@ class Client : public WebhookActor::Callback { static td::Result>> get_passport_element_errors( const Query *query); + static td::JsonValue get_input_entities(const Query *query, Slice field_name); + static td::Result> get_caption(const Query *query); static td::Result> get_text_entity_type(td::JsonObject &object);