diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 1706ed5..9ce81d1 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -10077,37 +10077,15 @@ td::Result> Client::get_input_me } if (object.has_field("latitude") && object.has_field("longitude")) { + if (object.has_field("title") && object.has_field("address")) { + TRY_RESULT(venue, get_venue(object)); + return make_object(std::move(venue)); + } + TRY_RESULT(location, get_location(object)); TRY_RESULT(live_period, object.get_optional_int_field("live_period")); TRY_RESULT(heading, object.get_optional_int_field("heading")); TRY_RESULT(proximity_alert_radius, object.get_optional_int_field("proximity_alert_radius")); - - if (object.has_field("title") && object.has_field("address")) { - TRY_RESULT(title, object.get_required_string_field("title")); - TRY_RESULT(address, object.get_required_string_field("address")); - td::string provider; - td::string venue_id; - td::string venue_type; - - TRY_RESULT(google_place_id, object.get_optional_string_field("google_place_id")); - TRY_RESULT(google_place_type, object.get_optional_string_field("google_place_type")); - if (!google_place_id.empty() || !google_place_type.empty()) { - provider = "gplaces"; - venue_id = std::move(google_place_id); - venue_type = std::move(google_place_type); - } - TRY_RESULT(foursquare_id, object.get_optional_string_field("foursquare_id")); - TRY_RESULT(foursquare_type, object.get_optional_string_field("foursquare_type")); - if (!foursquare_id.empty() || !foursquare_type.empty()) { - provider = "foursquare"; - venue_id = std::move(foursquare_id); - venue_type = std::move(foursquare_type); - } - - return make_object( - make_object(std::move(location), title, address, provider, venue_id, venue_type)); - } - return make_object(std::move(location), live_period, heading, proximity_alert_radius); } @@ -10503,36 +10481,15 @@ td::Result> Client::get_inlin std::move(input_message_content)); } if (type == "venue") { - TRY_RESULT(location, get_location(object)); - TRY_RESULT(title, object.get_required_string_field("title")); - TRY_RESULT(address, object.get_required_string_field("address")); - TRY_RESULT(foursquare_id, object.get_optional_string_field("foursquare_id")); - TRY_RESULT(foursquare_type, object.get_optional_string_field("foursquare_type")); - TRY_RESULT(google_place_id, object.get_optional_string_field("google_place_id")); - TRY_RESULT(google_place_type, object.get_optional_string_field("google_place_type")); - - td::string provider; - td::string venue_id; - td::string venue_type; - if (!google_place_id.empty() || !google_place_type.empty()) { - provider = "gplaces"; - venue_id = std::move(google_place_id); - venue_type = std::move(google_place_type); - } - if (!foursquare_id.empty() || !foursquare_type.empty()) { - provider = "foursquare"; - venue_id = std::move(foursquare_id); - venue_type = std::move(foursquare_type); - } - if (input_message_content == nullptr) { - input_message_content = make_object( - make_object(std::move(location), title, address, provider, venue_id, venue_type)); - TRY_RESULT_ASSIGN(location, get_location(object)); + TRY_RESULT(venue, get_venue(object)); + input_message_content = make_object(std::move(venue)); } - return make_object( - id, make_object(std::move(location), title, address, provider, venue_id, venue_type), - thumbnail_url, thumbnail_width, thumbnail_height, std::move(reply_markup), std::move(input_message_content)); + + TRY_RESULT(venue, get_venue(object)); + return make_object(id, std::move(venue), thumbnail_url, thumbnail_width, + thumbnail_height, std::move(reply_markup), + std::move(input_message_content)); } if (type == "video") { TRY_RESULT(title, object.get_required_string_field("title")); @@ -11431,6 +11388,32 @@ td::Result> Client::get_location(const td:: return make_object(latitude, longitude, horizontal_accuracy); } +td::Result> Client::get_venue(const td::JsonObject &object) { + TRY_RESULT(location, get_location(object)); + TRY_RESULT(title, object.get_required_string_field("title")); + TRY_RESULT(address, object.get_required_string_field("address")); + TRY_RESULT(foursquare_id, object.get_optional_string_field("foursquare_id")); + TRY_RESULT(foursquare_type, object.get_optional_string_field("foursquare_type")); + TRY_RESULT(google_place_id, object.get_optional_string_field("google_place_id")); + TRY_RESULT(google_place_type, object.get_optional_string_field("google_place_type")); + + td::string provider; + td::string venue_id; + td::string venue_type; + if (!google_place_id.empty() || !google_place_type.empty()) { + provider = "gplaces"; + venue_id = std::move(google_place_id); + venue_type = std::move(google_place_type); + } + if (!foursquare_id.empty() || !foursquare_type.empty()) { + provider = "foursquare"; + venue_id = std::move(foursquare_id); + venue_type = std::move(foursquare_type); + } + + return make_object(std::move(location), title, address, provider, venue_id, venue_type); +} + td::Result> Client::get_chat_permissions( const Query *query, bool &allow_legacy, bool use_independent_chat_permissions) { auto can_send_messages = false; diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index 60094e2..30cedab 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -653,6 +653,8 @@ class Client final : public WebhookActor::Callback { static td::Result> get_location(const td::JsonObject &object); + static td::Result> get_venue(const td::JsonObject &object); + static td::Result> get_chat_permissions(const Query *query, bool &allow_legacy, bool use_independent_chat_permissions);