diff --git a/td/telegram/InlineQueriesManager.cpp b/td/telegram/InlineQueriesManager.cpp index 794e9d1e..22471a5f 100644 --- a/td/telegram/InlineQueriesManager.cpp +++ b/td/telegram/InlineQueriesManager.cpp @@ -212,28 +212,6 @@ string InlineQueriesManager::get_inline_message_id( return base64url_encode(serialize(*input_bot_inline_message_id)); } -Result InlineQueriesManager::process_input_caption( - td_api::object_ptr &&caption) const { - return td::process_input_caption(td_->contacts_manager_.get(), DialogId(), std::move(caption), true); -} - -tl_object_ptr -InlineQueriesManager::get_input_bot_inline_message_media_auto( - const FormattedText &caption, tl_object_ptr &&input_reply_markup) const { - int32 flags = 0; - if (input_reply_markup != nullptr) { - flags |= telegram_api::inputBotInlineMessageText::REPLY_MARKUP_MASK; - } - auto entities = get_input_message_entities(td_->contacts_manager_.get(), caption.entities, - "get_input_bot_inline_message_media_auto"); - if (!entities.empty()) { - flags |= telegram_api::inputBotInlineMessageText::ENTITIES_MASK; - } - - return make_tl_object(flags, caption.text, std::move(entities), - std::move(input_reply_markup)); -} - Result> InlineQueriesManager::get_inline_message( tl_object_ptr &&input_message_content, tl_object_ptr &&reply_markup_ptr, int32 allowed_media_content_id) const { @@ -278,41 +256,15 @@ Result> InlineQueriesManager: return venue.get_input_bot_inline_message_media_venue(flags, std::move(input_reply_markup)); } if (constructor_id == allowed_media_content_id) { - if (constructor_id == td_api::inputMessageAnimation::ID) { - auto input_message_animation = static_cast(input_message_content.get()); - TRY_RESULT(caption, process_input_caption(std::move(input_message_animation->caption_))); - return get_input_bot_inline_message_media_auto(caption, std::move(input_reply_markup)); - } - if (constructor_id == td_api::inputMessageAudio::ID) { - auto input_message_audio = static_cast(input_message_content.get()); - TRY_RESULT(caption, process_input_caption(std::move(input_message_audio->caption_))); - return get_input_bot_inline_message_media_auto(caption, std::move(input_reply_markup)); - } - if (constructor_id == td_api::inputMessageDocument::ID) { - auto input_message_document = static_cast(input_message_content.get()); - TRY_RESULT(caption, process_input_caption(std::move(input_message_document->caption_))); - return get_input_bot_inline_message_media_auto(caption, std::move(input_reply_markup)); - } - if (constructor_id == td_api::inputMessagePhoto::ID) { - auto input_message_photo = static_cast(input_message_content.get()); - TRY_RESULT(caption, process_input_caption(std::move(input_message_photo->caption_))); - return get_input_bot_inline_message_media_auto(caption, std::move(input_reply_markup)); - } - if (constructor_id == td_api::inputMessageSticker::ID) { - // auto input_message_sticker = static_cast(input_message_content.get()); - return make_tl_object(flags, "", Auto(), - std::move(input_reply_markup)); - } - if (constructor_id == td_api::inputMessageVideo::ID) { - auto input_message_video = static_cast(input_message_content.get()); - TRY_RESULT(caption, process_input_caption(std::move(input_message_video->caption_))); - return get_input_bot_inline_message_media_auto(caption, std::move(input_reply_markup)); - } - if (constructor_id == td_api::inputMessageVoiceNote::ID) { - auto input_message_voice_note = static_cast(input_message_content.get()); - TRY_RESULT(caption, process_input_caption(std::move(input_message_voice_note->caption_))); - return get_input_bot_inline_message_media_auto(caption, std::move(input_reply_markup)); + TRY_RESULT(caption, process_input_caption(td_->contacts_manager_.get(), DialogId(), + extract_input_caption(input_message_content), true)); + auto entities = get_input_message_entities(td_->contacts_manager_.get(), caption.entities, "get_inline_message"); + if (!entities.empty()) { + flags |= telegram_api::inputBotInlineMessageText::ENTITIES_MASK; } + + return make_tl_object(flags, caption.text, std::move(entities), + std::move(input_reply_markup)); } return Status::Error(400, "Unallowed inline message content type"); } diff --git a/td/telegram/InlineQueriesManager.h b/td/telegram/InlineQueriesManager.h index 10b917a1..e8228493 100644 --- a/td/telegram/InlineQueriesManager.h +++ b/td/telegram/InlineQueriesManager.h @@ -84,11 +84,6 @@ class InlineQueriesManager : public Actor { static constexpr int32 BOT_INLINE_MEDIA_RESULT_FLAG_HAS_TITLE = 1 << 2; static constexpr int32 BOT_INLINE_MEDIA_RESULT_FLAG_HAS_DESCRIPTION = 1 << 3; - Result process_input_caption(td_api::object_ptr &&caption) const; - - tl_object_ptr get_input_bot_inline_message_media_auto( - const FormattedText &caption, tl_object_ptr &&input_reply_markup) const; - Result> get_inline_message( tl_object_ptr &&input_message_content, tl_object_ptr &&reply_markup_ptr, diff --git a/td/telegram/MessageEntity.cpp b/td/telegram/MessageEntity.cpp index ffd75d79..05deacec 100644 --- a/td/telegram/MessageEntity.cpp +++ b/td/telegram/MessageEntity.cpp @@ -2230,15 +2230,47 @@ FormattedText get_message_text(const ContactsManager *contacts_manager, string m return FormattedText{std::move(message_text), std::move(entities)}; } +td_api::object_ptr extract_input_caption( + tl_object_ptr &input_message_content) { + switch (input_message_content->get_id()) { + case td_api::inputMessageAnimation::ID: { + auto input_animation = static_cast(input_message_content.get()); + return std::move(input_animation->caption_); + } + case td_api::inputMessageAudio::ID: { + auto input_audio = static_cast(input_message_content.get()); + return std::move(input_audio->caption_); + } + case td_api::inputMessageDocument::ID: { + auto input_document = static_cast(input_message_content.get()); + return std::move(input_document->caption_); + } + case td_api::inputMessagePhoto::ID: { + auto input_photo = static_cast(input_message_content.get()); + return std::move(input_photo->caption_); + } + case td_api::inputMessageVideo::ID: { + auto input_video = static_cast(input_message_content.get()); + return std::move(input_video->caption_); + } + case td_api::inputMessageVoiceNote::ID: { + auto input_voice_note = static_cast(input_message_content.get()); + return std::move(input_voice_note->caption_); + } + default: + return nullptr; + } +} + Result process_input_caption(const ContactsManager *contacts_manager, DialogId dialog_id, - tl_object_ptr &&text, bool is_bot) { - if (text == nullptr) { + tl_object_ptr &&caption, bool is_bot) { + if (caption == nullptr) { return FormattedText(); } - TRY_RESULT(entities, get_message_entities(contacts_manager, std::move(text->entities_))); - TRY_STATUS(fix_formatted_text(text->text_, entities, true, false, + TRY_RESULT(entities, get_message_entities(contacts_manager, std::move(caption->entities_))); + TRY_STATUS(fix_formatted_text(caption->text_, entities, true, false, need_skip_bot_commands(contacts_manager, dialog_id, is_bot), false)); - return FormattedText{std::move(text->text_), std::move(entities)}; + return FormattedText{std::move(caption->text_), std::move(entities)}; } void add_formatted_text_dependencies(Dependencies &dependencies, const FormattedText *text) { diff --git a/td/telegram/MessageEntity.h b/td/telegram/MessageEntity.h index 69b2da9a..7d4400f2 100644 --- a/td/telegram/MessageEntity.h +++ b/td/telegram/MessageEntity.h @@ -154,8 +154,11 @@ FormattedText get_message_text(const ContactsManager *contacts_manager, string m vector> &&server_entities, int32 send_date, const char *source); +td_api::object_ptr extract_input_caption( + tl_object_ptr &input_message_content); + Result process_input_caption(const ContactsManager *contacts_manager, DialogId dialog_id, - tl_object_ptr &&text, bool is_bot); + tl_object_ptr &&caption, bool is_bot); void add_formatted_text_dependencies(Dependencies &dependencies, const FormattedText *text); diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 100929e2..479cf1fa 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -14983,41 +14983,6 @@ Result MessagesManager::send_message(DialogId dialog_id, MessageId re return message_id; } -Result MessagesManager::get_input_caption( - DialogId dialog_id, tl_object_ptr &input_message_content, bool is_bot) const { - switch (input_message_content->get_id()) { - case td_api::inputMessageAnimation::ID: { - auto input_animation = static_cast(input_message_content.get()); - return process_input_caption(td_->contacts_manager_.get(), dialog_id, std::move(input_animation->caption_), - is_bot); - } - case td_api::inputMessageAudio::ID: { - auto input_audio = static_cast(input_message_content.get()); - return process_input_caption(td_->contacts_manager_.get(), dialog_id, std::move(input_audio->caption_), is_bot); - } - case td_api::inputMessageDocument::ID: { - auto input_document = static_cast(input_message_content.get()); - return process_input_caption(td_->contacts_manager_.get(), dialog_id, std::move(input_document->caption_), - is_bot); - } - case td_api::inputMessagePhoto::ID: { - auto input_photo = static_cast(input_message_content.get()); - return process_input_caption(td_->contacts_manager_.get(), dialog_id, std::move(input_photo->caption_), is_bot); - } - case td_api::inputMessageVideo::ID: { - auto input_video = static_cast(input_message_content.get()); - return process_input_caption(td_->contacts_manager_.get(), dialog_id, std::move(input_video->caption_), is_bot); - } - case td_api::inputMessageVoiceNote::ID: { - auto input_voice_note = static_cast(input_message_content.get()); - return process_input_caption(td_->contacts_manager_.get(), dialog_id, std::move(input_voice_note->caption_), - is_bot); - } - default: - return FormattedText(); - } -} - Result MessagesManager::process_input_message_content( DialogId dialog_id, tl_object_ptr &&input_message_content) const { if (input_message_content == nullptr) { @@ -15129,7 +15094,9 @@ Result MessagesManager::process_input_message_content( } } - TRY_RESULT(caption, get_input_caption(dialog_id, input_message_content, td_->auth_manager_->is_bot())); + TRY_RESULT(caption, + process_input_caption(td_->contacts_manager_.get(), dialog_id, + extract_input_caption(input_message_content), td_->auth_manager_->is_bot())); TRY_RESULT(content, create_input_message_content(dialog_id, std::move(input_message_content), td_, std::move(caption), file_id, std::move(thumbnail), std::move(sticker_file_ids))); diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 5f9d30dd..6370ab76 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -316,10 +316,6 @@ class MessagesManager : public Actor { DialogId search_public_dialog(const string &username_to_search, bool force, Promise &&promise); - Result get_input_caption(DialogId dialog_id, - tl_object_ptr &input_message_content, - bool is_bot) const; - Result send_message(DialogId dialog_id, MessageId reply_to_message_id, bool disable_notification, bool from_background, tl_object_ptr &&reply_markup, tl_object_ptr &&input_message_content)