From 3b5cf48e5b572bec75f7bede3f1385bef0f69a21 Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 28 Aug 2022 22:30:49 +0300 Subject: [PATCH] Improve errors returned by get_input_message_contents. --- telegram-bot-api/Client.cpp | 22 ++++++++++++---------- telegram-bot-api/Client.h | 3 +-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 07cc592..c1721a1 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -6616,7 +6616,7 @@ td::Result> Client::get_input_me JsonValue &&input_media, bool for_album) const { if (input_media.type() != JsonValue::Type::Object) { - return Status::Error(400, "expected an Object"); + return Status::Error("expected an Object"); } auto &object = input_media.get_object(); @@ -6631,7 +6631,7 @@ td::Result> Client::get_input_me auto input_file = get_input_file(query, Slice(), media, false); if (input_file == nullptr) { - return Status::Error(400, "media not found"); + return Status::Error("media not found"); } TRY_RESULT(thumbnail, get_json_object_string_field(object, "thumb")); @@ -6660,7 +6660,7 @@ td::Result> Client::get_input_me std::move(caption), ttl); } if (for_album && type == "animation") { - return Status::Error(400, PSLICE() << "type \"" << type << "\" can't be used in sendMediaGroup"); + return Status::Error(PSLICE() << "type \"" << type << "\" can't be used in sendMediaGroup"); } if (type == "animation") { TRY_RESULT(width, get_json_object_int_field(object, "width")); @@ -6686,12 +6686,11 @@ td::Result> Client::get_input_me disable_content_type_detection || for_album, std::move(caption)); } - return Status::Error(400, PSLICE() << "type \"" << type << "\" is unsupported"); + return Status::Error(PSLICE() << "type \"" << type << "\" is unsupported"); } td::Result> Client::get_input_media(const Query *query, - Slice field_name, - bool for_album) const { + Slice field_name) const { TRY_RESULT(media, get_required_string_arg(query, field_name)); LOG(INFO) << "Parsing JSON object: " << media; @@ -6701,7 +6700,7 @@ td::Result> Client::get_input_me return Status::Error(400, "Can't parse input media JSON object"); } - auto r_input_message_content = get_input_media(query, r_value.move_as_ok(), for_album); + auto r_input_message_content = get_input_media(query, r_value.move_as_ok(), false); if (r_input_message_content.is_error()) { return Status::Error(400, PSLICE() << "Can't parse InputMedia: " << r_input_message_content.error().message()); } @@ -6730,8 +6729,11 @@ td::Result>> Client:: td::vector> contents; for (auto &input_media : value.get_array()) { - TRY_RESULT(input_message_content, get_input_media(query, std::move(input_media), true)); - contents.push_back(std::move(input_message_content)); + auto r_input_message_content = get_input_media(query, std::move(input_media), true); + if (r_input_message_content.is_error()) { + return Status::Error(400, PSLICE() << "Can't parse InputMedia: " << r_input_message_content.error().message()); + } + contents.push_back(r_input_message_content.move_as_ok()); } return std::move(contents); } @@ -7522,7 +7524,7 @@ td::Status Client::process_edit_message_media_query(PromisedQueryPtr &query) { auto chat_id = query->arg("chat_id"); auto message_id = get_message_id(query.get()); TRY_RESULT(reply_markup, get_reply_markup(query.get())); - TRY_RESULT(input_media, get_input_media(query.get(), "media", false)); + TRY_RESULT(input_media, get_input_media(query.get(), "media")); if (chat_id.empty() && message_id == 0) { TRY_RESULT(inline_message_id, get_inline_message_id(query.get())); diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index 3d5bf7b..6d0fc54 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -437,8 +437,7 @@ class Client final : public WebhookActor::Callback { td::Result> get_input_media(const Query *query, td::JsonValue &&input_media, bool for_album) const; - td::Result> get_input_media(const Query *query, Slice field_name, - bool for_album) const; + td::Result> get_input_media(const Query *query, Slice field_name) const; td::Result>> get_input_message_contents(const Query *query, Slice field_name) const;