aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2026-06-15 21:17:02 +0300
committerlevlam <levlam@telegram.org>2026-06-15 21:17:02 +0300
commit14e281baca2ee21f57b28449364c9f627d6a8652 (patch)
tree2ea41c64eaf682a5ffca7c6102ac8d5fffc30e09
parentb768eb2911f494c0678f4a4ff2c4a0529cb3cc6e (diff)
Add td_api::inputRichMessageMedia,
-rw-r--r--CMakeLists.txt3
-rw-r--r--SplitSource.php3
-rw-r--r--td/generate/scheme/td_api.tl5
-rw-r--r--td/telegram/RichMessageMedia.cpp40
-rw-r--r--td/telegram/RichMessageMedia.h47
-rw-r--r--td/telegram/RichMessageMedia.hpp39
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