diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 45c209b5f..d10ee890f 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -3726,12 +3726,13 @@ storyInteractions total_count:int32 total_forward_count:int32 total_reaction_cou //@description Describes a message that can be used for quick reply //@id Unique message identifier among all quick replies //@sending_state The sending state of the message; may be null if the message isn't being sent and didn't fail to be sent +//@can_be_edited True, if the message can be edited //@forward_info Information about the initial message sender; may be null if none or unknown //@reply_to_message_id Information about the identifier of the quick reply message to which the message replies //@via_bot_user_id If non-zero, the user identifier of the bot through which this message was sent //@media_album_id Unique identifier of an album this message belongs to. Only audios, documents, photos and videos can be grouped together in albums //@content Content of the message -quickReplyMessage id:int53 sending_state:MessageSendingState forward_info:messageForwardInfo reply_to_message_id:int53 via_bot_user_id:int53 media_album_id:int64 content:MessageContent = QuickReplyMessage; +quickReplyMessage id:int53 sending_state:MessageSendingState can_be_edited:Bool forward_info:messageForwardInfo reply_to_message_id:int53 via_bot_user_id:int53 media_album_id:int64 content:MessageContent = QuickReplyMessage; //@description Describes a shortcut that can be used for a quick reply //@name The name of the shortcut that can be used to use the shortcut diff --git a/td/telegram/QuickReplyManager.cpp b/td/telegram/QuickReplyManager.cpp index fe5e27ca9..c4f7571ff 100644 --- a/td/telegram/QuickReplyManager.cpp +++ b/td/telegram/QuickReplyManager.cpp @@ -14,6 +14,7 @@ #include "td/telegram/logevent/LogEvent.h" #include "td/telegram/logevent/LogEventHelper.h" #include "td/telegram/MessageContent.h" +#include "td/telegram/MessageContentType.h" #include "td/telegram/MessageForwardInfo.h" #include "td/telegram/MessageForwardInfo.hpp" #include "td/telegram/MessageReplyHeader.h" @@ -410,7 +411,12 @@ void QuickReplyManager::add_quick_reply_message_dependencies(Dependencies &depen add_message_content_dependencies(dependencies, m->content.get(), is_bot); } -bool QuickReplyManager::can_resend_message(const QuickReplyMessage *m) const { +bool QuickReplyManager::can_edit_quick_reply_message(const QuickReplyMessage *m) const { + return m->message_id.is_server() && m->forward_info == nullptr && !m->via_bot_user_id.is_valid() && + is_editable_message_content(m->content->get_type()); +} + +bool QuickReplyManager::can_resend_quick_reply_message(const QuickReplyMessage *m) const { if (m->send_error_code != 429) { return false; } @@ -430,7 +436,7 @@ td_api::object_ptr QuickReplyManager::get_message_s return td_api::make_object(m->sending_id); } if (m->is_failed_to_send) { - auto can_retry = can_resend_message(m); + auto can_retry = can_resend_quick_reply_message(m); auto error_code = m->send_error_code > 0 ? m->send_error_code : 400; auto need_another_reply_quote = can_retry && error_code == 400 && m->send_error_message == CSlice("QUOTE_TEXT_INVALID"); @@ -450,12 +456,13 @@ td_api::object_ptr QuickReplyManager::get_quick_reply_me td_api::object_ptr QuickReplyManager::get_quick_reply_message_object( const QuickReplyMessage *m, const char *source) const { CHECK(m != nullptr); + auto can_be_edited = can_edit_quick_reply_message(m); auto forward_info = m->forward_info == nullptr ? nullptr : m->forward_info->get_message_forward_info_object(td_, false); return td_api::make_object( - m->message_id.get(), get_message_sending_state_object(m), std::move(forward_info), m->reply_to_message_id.get(), - td_->contacts_manager_->get_user_id_object(m->via_bot_user_id, "via_bot_user_id"), m->media_album_id, - get_quick_reply_message_message_content_object(m)); + m->message_id.get(), get_message_sending_state_object(m), can_be_edited, std::move(forward_info), + m->reply_to_message_id.get(), td_->contacts_manager_->get_user_id_object(m->via_bot_user_id, "via_bot_user_id"), + m->media_album_id, get_quick_reply_message_message_content_object(m)); } int32 QuickReplyManager::get_shortcut_message_count(const Shortcut *s) { diff --git a/td/telegram/QuickReplyManager.h b/td/telegram/QuickReplyManager.h index 4ef7dbe46..c67e2fc85 100644 --- a/td/telegram/QuickReplyManager.h +++ b/td/telegram/QuickReplyManager.h @@ -131,7 +131,9 @@ class QuickReplyManager final : public Actor { unique_ptr create_message(telegram_api::object_ptr message_ptr, const char *source) const; - bool can_resend_message(const QuickReplyMessage *m) const; + bool can_edit_quick_reply_message(const QuickReplyMessage *m) const; + + bool can_resend_quick_reply_message(const QuickReplyMessage *m) const; td_api::object_ptr get_message_sending_state_object(const QuickReplyMessage *m) const;