diff options
| author | levlam <levlam@telegram.org> | 2026-06-15 21:17:02 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2026-06-15 21:17:02 +0300 |
| commit | 14e281baca2ee21f57b28449364c9f627d6a8652 (patch) | |
| tree | 2ea41c64eaf682a5ffca7c6102ac8d5fffc30e09 | |
| parent | b768eb2911f494c0678f4a4ff2c4a0529cb3cc6e (diff) | |
Add td_api::inputRichMessageMedia,
| -rw-r--r-- | CMakeLists.txt | 3 | ||||
| -rw-r--r-- | SplitSource.php | 3 | ||||
| -rw-r--r-- | td/generate/scheme/td_api.tl | 5 | ||||
| -rw-r--r-- | td/telegram/RichMessageMedia.cpp | 40 | ||||
| -rw-r--r-- | td/telegram/RichMessageMedia.h | 47 | ||||
| -rw-r--r-- | td/telegram/RichMessageMedia.hpp | 39 |
6 files changed, 136 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 95b441409..c3f02ec2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -606,6 +606,7 @@ set(TDLIB_SOURCE_PART2 td/telegram/Requests.cpp td/telegram/RestrictionReason.cpp td/telegram/RichMessage.cpp + td/telegram/RichMessageMedia.cpp td/telegram/SavedMessagesManager.cpp td/telegram/SavedMessagesTopicId.cpp td/telegram/ScopeNotificationSettings.cpp @@ -1029,6 +1030,7 @@ set(TDLIB_SOURCE_PART2 td/telegram/Requests.h td/telegram/RestrictionReason.h td/telegram/RichMessage.h + td/telegram/RichMessageMedia.h td/telegram/SavedMessagesManager.h td/telegram/SavedMessagesTopicId.h td/telegram/ScheduledServerMessageId.h @@ -1229,6 +1231,7 @@ set(TDLIB_SOURCE_PART2 td/telegram/ReplyMarkup.hpp td/telegram/RequestedDialogType.hpp td/telegram/RichMessage.hpp + td/telegram/RichMessageMedia.hpp td/telegram/ScopeNotificationSettings.hpp td/telegram/SecureValue.hpp td/telegram/SendCodeHelper.hpp diff --git a/SplitSource.php b/SplitSource.php index d682fabd2..78f6c82d3 100644 --- a/SplitSource.php +++ b/SplitSource.php @@ -427,7 +427,8 @@ function split_file($file, $chunks, $undo) { 'referral_program_manager[_(-](?![.]get[(][)])|ReferralProgramManager' => 'ReferralProgramManager', 'ReferralProgramParameters' => 'ReferralProgramParameters', 'RequestActor|RequestOnceActor' => 'RequestActor', - 'RichMessage' => 'RichMessage', + 'RichMessage[^M]' => 'RichMessage', + 'RichMessageMedia' => 'RichMessageMedia', 'saved_messages_manager[_(-](?![.]get[(][)])|SavedMessagesManager' => 'SavedMessagesManager', 'ScopeNotificationSettings|[a-z_]*_scope_notification_settings' => 'ScopeNotificationSettings', 'SearchPostsFlood' => 'SearchPostsFlood', diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 4dac6c8b1..a399e4696 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -122,6 +122,11 @@ formattedText text:string entities:vector<textEntity> = FormattedText; //@is_full True, if the object contains the full message. Otherwise, getFullRichMessage must be used to get the full message richMessage blocks:vector<PageBlock> is_rtl:Bool is_full:Bool = RichMessage; +//@description Describes a media to be used in a sent rich message +//@id Unique identifier of the media +//@media The media to send. Must be one of the following types: inputMessageAnimation, inputMessageAudio, inputMessagePhoto, inputMessageVideo, or inputMessageVoiceNote +inputRichMessageMedia id:string media:InputMessageContent = InputRichMessageMedia; + //@class RichMessageSource @description Describes source of a rich message //@description A Markdown-formatted rich message; for bots only @text Markdown-formatted text of the message diff --git a/td/telegram/RichMessageMedia.cpp b/td/telegram/RichMessageMedia.cpp new file mode 100644 index 000000000..3af4464a1 --- /dev/null +++ b/td/telegram/RichMessageMedia.cpp @@ -0,0 +1,40 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2026 +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +#include "td/telegram/RichMessageMedia.h" + +#include "td/telegram/OptionManager.h" + +namespace td { + +Result<RichMessageMedia> RichMessageMedia::get_rich_message_media( + Td *td, DialogId dialog_id, td_api::object_ptr<td_api::inputRichMessageMedia> &&media) { + if (media == nullptr) { + return Status::Error(400, "Media must be non-empty"); + } + TRY_RESULT(input_message_content, get_input_message_content(dialog_id, std::move(media->media_), td, false)); + switch (input_message_content.content->get_type()) { + case MessageContentType::Animation: + case MessageContentType::Audio: + case MessageContentType::Photo: + case MessageContentType::Video: + case MessageContentType::VoiceNote: + break; + default: + return Status::Error(400, "Unallowed media specified"); + } + RichMessageMedia result; + result.id_ = std::move(media->id_); + result.media_ = std::move(input_message_content.content); + return std::move(result); +} + +unique_ptr<MessageContent> RichMessageMedia::get_message_content(Td *td) const { + return dup_message_content(td, DialogId(), media_.get(), MessageContentDupType::ServerCopy, + MessageCopyOptions(true, false)); +} + +} // namespace td diff --git a/td/telegram/RichMessageMedia.h b/td/telegram/RichMessageMedia.h new file mode 100644 index 000000000..4051d22e4 --- /dev/null +++ b/td/telegram/RichMessageMedia.h @@ -0,0 +1,47 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2026 +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +#pragma once + +#include "td/telegram/MessageContent.h" +#include "td/telegram/td_api.h" +#include "td/telegram/telegram_api.h" + +#include "td/utils/common.h" +#include "td/utils/Status.h" + +namespace td { + +class Td; + +class RichMessageMedia { + string id_; + unique_ptr<MessageContent> media_; + + public: + RichMessageMedia() = default; + + static Result<RichMessageMedia> get_rich_message_media(Td *td, DialogId dialog_id, + td_api::object_ptr<td_api::inputRichMessageMedia> &&media); + + unique_ptr<MessageContent> get_message_content(Td *td) const; + + MessageContent *get_message_content_ref() { + return media_.get(); + } + + const MessageContent *get_message_content_ref() const { + return media_.get(); + } + + template <class StorerT> + void store(StorerT &storer) const; + + template <class ParserT> + void parse(ParserT &parser); +}; + +} // namespace td diff --git a/td/telegram/RichMessageMedia.hpp b/td/telegram/RichMessageMedia.hpp new file mode 100644 index 000000000..ac08506ec --- /dev/null +++ b/td/telegram/RichMessageMedia.hpp @@ -0,0 +1,39 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2026 +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +#pragma once + +#include "td/telegram/RichMessageMedia.h" + +#include "td/utils/tl_helpers.h" + +namespace td { + +template <class StorerT> +void RichMessageMedia::store(StorerT &storer) const { + bool has_id = !id_.empty(); + BEGIN_STORE_FLAGS(); + STORE_FLAG(has_id); + END_STORE_FLAGS(); + if (has_id) { + td::store(title_, storer); + } + store_message_content(media_.get(), storer); +} + +template <class ParserT> +void RichMessageMedia::parse(ParserT &parser) { + bool has_id; + BEGIN_PARSE_FLAGS(); + PARSE_FLAG(has_id); + END_PARSE_FLAGS(); + if (has_id) { + td::parse(id_, parser); + } + parse_message_content(media_, parser); +} + +} // namespace td |
