diff options
| author | levlam <levlam@telegram.org> | 2026-06-30 18:56:16 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2026-06-30 18:56:16 +0300 |
| commit | bc4d9701607fb91a985af06640074b90411d1718 (patch) | |
| tree | 55acf282d36ef940669d85116975095ad9edd216 | |
| parent | a534ded0ae60166b178b0fdc55f22af15af17e5c (diff) | |
Use EphemeralMessageId.
| -rw-r--r-- | td/telegram/MessageInputReplyTo.cpp | 4 | ||||
| -rw-r--r-- | td/telegram/MessageInputReplyTo.h | 7 | ||||
| -rw-r--r-- | td/telegram/MessageInputReplyTo.hpp | 2 | ||||
| -rw-r--r-- | td/telegram/MessagesManager.cpp | 36 | ||||
| -rw-r--r-- | td/telegram/MessagesManager.h | 6 |
5 files changed, 29 insertions, 26 deletions
diff --git a/td/telegram/MessageInputReplyTo.cpp b/td/telegram/MessageInputReplyTo.cpp index 883edb128..e3262647e 100644 --- a/td/telegram/MessageInputReplyTo.cpp +++ b/td/telegram/MessageInputReplyTo.cpp @@ -111,8 +111,8 @@ telegram_api::object_ptr<telegram_api::InputReplyTo> MessageInputReplyTo::get_in story_full_id_.get_story_id().get()); } CHECK(!message_topic.is_saved_messages()); - if (ephemeral_message_id_ != 0) { - return telegram_api::make_object<telegram_api::inputReplyToEphemeralMessage>(ephemeral_message_id_); + if (ephemeral_message_id_.is_valid()) { + return telegram_api::make_object<telegram_api::inputReplyToEphemeralMessage>(ephemeral_message_id_.get()); } auto reply_to_message_id = message_id_; if (reply_to_message_id == MessageId()) { diff --git a/td/telegram/MessageInputReplyTo.h b/td/telegram/MessageInputReplyTo.h index 14cf4b693..531410845 100644 --- a/td/telegram/MessageInputReplyTo.h +++ b/td/telegram/MessageInputReplyTo.h @@ -7,6 +7,7 @@ #pragma once #include "td/telegram/DialogId.h" +#include "td/telegram/EphemeralMessageId.h" #include "td/telegram/MessageFullId.h" #include "td/telegram/MessageId.h" #include "td/telegram/MessageQuote.h" @@ -26,7 +27,7 @@ class Td; class MessageInputReplyTo { MessageId message_id_; - int32 ephemeral_message_id_ = 0; + EphemeralMessageId ephemeral_message_id_; DialogId dialog_id_; MessageQuote quote_; int32 todo_item_id_ = 0; @@ -49,8 +50,8 @@ class MessageInputReplyTo { MessageInputReplyTo &operator=(MessageInputReplyTo &&) = default; ~MessageInputReplyTo(); - MessageInputReplyTo(MessageId message_id, int32 ephemeral_message_id, DialogId dialog_id, MessageQuote quote, - int32 todo_item_id, const string &poll_option_id, const char *debug_source) + MessageInputReplyTo(MessageId message_id, EphemeralMessageId ephemeral_message_id, DialogId dialog_id, + MessageQuote quote, int32 todo_item_id, const string &poll_option_id, const char *debug_source) : message_id_(message_id) , ephemeral_message_id_(ephemeral_message_id) , dialog_id_(dialog_id) diff --git a/td/telegram/MessageInputReplyTo.hpp b/td/telegram/MessageInputReplyTo.hpp index 5bd66ae51..afa7e06d4 100644 --- a/td/telegram/MessageInputReplyTo.hpp +++ b/td/telegram/MessageInputReplyTo.hpp @@ -24,7 +24,7 @@ void MessageInputReplyTo::store(StorerT &storer) const { bool has_quote = !quote_.is_empty(); bool has_todo_item_id = todo_item_id_ != 0; bool has_poll_option_id = !poll_option_id_.empty(); - bool has_ephemeral_message_id = ephemeral_message_id_ != 0; + bool has_ephemeral_message_id = ephemeral_message_id_.is_valid(); BEGIN_STORE_FLAGS(); STORE_FLAG(has_message_id); STORE_FLAG(has_story_full_id); diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index c2166d893..51887b568 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -2323,7 +2323,7 @@ void MessagesManager::Message::store(StorerT &storer) const { bool has_sender_rank = !sender_rank.empty(); bool has_guest_bot_via_dialog_id = guest_bot_via_dialog_id.is_valid(); bool has_receiver_user_id = receiver_user_id.is_valid(); - bool has_ephemeral_message_id = ephemeral_message_id != 0; + bool has_ephemeral_message_id = ephemeral_message_id.is_valid(); BEGIN_STORE_FLAGS(); STORE_FLAG(is_channel_post); STORE_FLAG(is_outgoing); @@ -3004,10 +3004,13 @@ void MessagesManager::Message::parse(ParserT &parser) { } if (has_receiver_user_id) { parse(receiver_user_id, parser); + if (!receiver_user_id.is_valid()) { + parser.set_error("Invalid ephemeral message receiver identifier"); + } } if (has_ephemeral_message_id) { parse(ephemeral_message_id, parser); - if (ephemeral_message_id == 0) { + if (!ephemeral_message_id.is_valid()) { parser.set_error("Invalid ephemeral message identifier"); } } @@ -3295,7 +3298,7 @@ void MessagesManager::Dialog::store(StorerT &storer) const { store(business_bot_manage_bar, storer); } if (has_ephemeral_message_ids) { - vector<std::pair<int32, MessageId>> stored_data; + vector<std::pair<EphemeralMessageId, MessageId>> stored_data; for (const auto &it : ephemeral_message_ids) { stored_data.emplace_back(it.first, it.second); } @@ -3647,10 +3650,10 @@ void MessagesManager::Dialog::parse(ParserT &parser) { parse(business_bot_manage_bar, parser); } if (has_ephemeral_message_ids) { - vector<std::pair<int32, MessageId>> stored_data; + vector<std::pair<EphemeralMessageId, MessageId>> stored_data; parse(stored_data, parser); for (const auto &it : stored_data) { - if (it.first == 0 || !it.second.is_valid()) { + if (!it.first.is_valid() || !it.second.is_valid()) { parser.set_error("Have invalid ephemeral message"); } else { ephemeral_message_ids.emplace(it.first, it.second); @@ -4257,7 +4260,7 @@ void MessagesManager::on_delete_ephemeral_messages(DialogId dialog_id, vector<in } vector<MessageId> message_ids; for (auto ephemeral_message_id : ephemeral_message_ids) { - auto it = d->ephemeral_message_ids.find(ephemeral_message_id); + auto it = d->ephemeral_message_ids.find(EphemeralMessageId(ephemeral_message_id)); if (it != d->ephemeral_message_ids.end()) { message_ids.push_back(it->second); } @@ -8140,7 +8143,7 @@ bool MessagesManager::can_reply_to_message(const Dialog *d, MessageId message_id CHECK(d != nullptr); auto dialog_id = d->dialog_id; if (is_ephemeral_message(m)) { - return m->ephemeral_message_id != 0 && !m->is_outgoing; + return m->ephemeral_message_id.is_valid() && !m->is_outgoing; } if (!td_->auth_manager_->is_bot() && m != nullptr && m->is_topic_message && d->is_forum) { auto forum_topic_id = ForumTopicId::from_top_thread_message_id(m->top_thread_message_id); @@ -11334,11 +11337,11 @@ MessagesManager::MessageInfo MessagesManager::parse_ephemeral_message( MessageInfo message_info; auto dialog_id = DialogId(message->peer_id_); message_info.receiver_user_id = UserId(message->receiver_id_); - message_info.ephemeral_message_id = message->id_; + message_info.ephemeral_message_id = EphemeralMessageId(message->id_); message_info.sender_dialog_id = DialogId(message->from_id_); - if (!dialog_id.is_valid() || !message_info.receiver_user_id.is_valid() || message_info.ephemeral_message_id == 0 || - !message_info.sender_dialog_id.is_valid()) { - LOG(ERROR) << "Ignore ephemeral message " << message_info.ephemeral_message_id << " in " << dialog_id << " sent by " + if (!dialog_id.is_valid() || !message_info.receiver_user_id.is_valid() || + !message_info.ephemeral_message_id.is_valid() || !message_info.sender_dialog_id.is_valid()) { + LOG(ERROR) << "Ignore " << message_info.ephemeral_message_id << " in " << dialog_id << " sent by " << message_info.sender_dialog_id << " and received by " << message_info.receiver_user_id; return message_info; } @@ -11429,9 +11432,8 @@ std::pair<DialogId, unique_ptr<MessagesManager::Message>> MessagesManager::creat LOG(ERROR) << "Receive message receiver " << message_info.receiver_user_id; message_info.receiver_user_id = UserId(); } - if (message_info.ephemeral_message_id != 0 && message_info.receiver_user_id == UserId()) { - LOG(ERROR) << "Receive ephemeral message " << message_info.ephemeral_message_id << " without receiver in " - << dialog_id; + if (message_info.ephemeral_message_id.is_valid() && message_info.receiver_user_id == UserId()) { + LOG(ERROR) << "Receive " << message_info.ephemeral_message_id << " without receiver in " << dialog_id; return {DialogId(), nullptr}; } @@ -13523,7 +13525,7 @@ void MessagesManager::on_message_deleted(Dialog *d, Message *m, bool is_permanen default: UNREACHABLE(); } - if (m->ephemeral_message_id != 0 && is_permanently_deleted) { + if (m->ephemeral_message_id.is_valid() && is_permanently_deleted) { auto is_erased = d->ephemeral_message_ids.erase(m->ephemeral_message_id) > 0; CHECK(is_erased); on_dialog_updated(d->dialog_id, "delete_ephemeral_message"); @@ -15191,7 +15193,7 @@ void MessagesManager::get_message_properties(DialogId dialog_id, MessageId messa can_delete_for_all_users = !can_delete_for_self; } if (is_ephemeral) { - can_delete_for_self = m->ephemeral_message_id == 0; + can_delete_for_self = !m->ephemeral_message_id.is_valid(); can_delete_for_all_users = !can_delete_for_self; } @@ -31156,7 +31158,7 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq default: UNREACHABLE(); } - if (m->ephemeral_message_id != 0) { + if (m->ephemeral_message_id.is_valid()) { if (d->ephemeral_message_ids.emplace(m->ephemeral_message_id, m->message_id).second && d->ephemeral_message_ids.size() > MAX_DIALOG_EPHEMERAL_MESSAGES) { auto oldest_message_id = m->message_id; diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index d263d8b25..4b8036697 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -1043,7 +1043,7 @@ class MessagesManager final : public Actor { UserId sender_user_id; DialogId sender_dialog_id; UserId receiver_user_id; - int32 ephemeral_message_id = 0; + EphemeralMessageId ephemeral_message_id; SavedMessagesTopicId saved_messages_topic_id; int32 date = 0; int32 schedule_repeat_period = 0; @@ -1099,7 +1099,7 @@ class MessagesManager final : public Actor { UserId sender_user_id; DialogId sender_dialog_id; UserId receiver_user_id; - int32 ephemeral_message_id = 0; + EphemeralMessageId ephemeral_message_id; SavedMessagesTopicId saved_messages_topic_id; int32 date = 0; int32 edit_date = 0; @@ -1418,7 +1418,7 @@ class MessagesManager final : public Actor { MessageId pending_read_channel_inbox_max_message_id; // for channels only FlatHashMap<int64, MessageId> random_id_to_message_id; // for secret chats and yet unsent messages only - FlatHashMap<int32, MessageId> ephemeral_message_ids; + FlatHashMap<EphemeralMessageId, MessageId, EphemeralMessageIdHash> ephemeral_message_ids; MessageId last_assigned_message_id; // identifier of the last local or yet unsent message, assigned after // application start, used to guarantee that all assigned message identifiers |
