Pass MessageInfo to need_skip_update_message.

main
levlam 2 months ago
parent 673d173bd8
commit e32e26ca46

@ -16911,7 +16911,7 @@ td::int64 Client::choose_added_member_id(const td_api::messageChatAddMembers *me
return message_add_members->member_user_ids_[0]; return message_add_members->member_user_ids_[0];
} }
bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::message> &message, bool is_edited) const { bool Client::need_skip_update_message(int64 chat_id, const MessageInfo *message_info, bool is_edited) const {
const ChatInfo *chat; const ChatInfo *chat;
ChatInfo::Type chat_type; ChatInfo::Type chat_type;
if (chat_id != 0) { if (chat_id != 0) {
@ -16922,8 +16922,9 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
chat = nullptr; chat = nullptr;
chat_type = ChatInfo::Type::Private; chat_type = ChatInfo::Type::Private;
} }
if (message->is_outgoing_ && chat_id != 0) { auto message_content_id = message_info->content->get_id();
switch (message->content_->get_id()) { if (message_info->is_outgoing && chat_id != 0) {
switch (message_content_id) {
case td_api::messageChatChangeTitle::ID: case td_api::messageChatChangeTitle::ID:
case td_api::messageChatChangePhoto::ID: case td_api::messageChatChangePhoto::ID:
case td_api::messageChatDeletePhoto::ID: case td_api::messageChatDeletePhoto::ID:
@ -16958,7 +16959,7 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
} }
} }
int32 message_date = message->edit_date_ == 0 ? message->date_ : message->edit_date_; int32 message_date = message_info->edit_date == 0 ? message_info->date : message_info->edit_date;
if (message_date <= get_unix_time() - 86400) { if (message_date <= get_unix_time() - 86400) {
// don't send messages received/edited more than 1 day ago // don't send messages received/edited more than 1 day ago
LOG(DEBUG) << "Skip update about message with date " << message_date << ", because current date is " LOG(DEBUG) << "Skip update about message with date " << message_date << ", because current date is "
@ -16972,8 +16973,8 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
if (supergroup_info->status->get_id() == td_api::chatMemberStatusLeft::ID || if (supergroup_info->status->get_id() == td_api::chatMemberStatusLeft::ID ||
supergroup_info->status->get_id() == td_api::chatMemberStatusBanned::ID) { supergroup_info->status->get_id() == td_api::chatMemberStatusBanned::ID) {
// if we have left the chat, send only update about leaving the supergroup // if we have left the chat, send only update about leaving the supergroup
if (message->content_->get_id() == td_api::messageChatDeleteMember::ID) { if (message_content_id == td_api::messageChatDeleteMember::ID) {
auto user_id = static_cast<const td_api::messageChatDeleteMember *>(message->content_.get())->user_id_; auto user_id = static_cast<const td_api::messageChatDeleteMember *>(message_info->content.get())->user_id_;
return user_id != my_id_; return user_id != my_id_;
} }
return true; return true;
@ -16984,23 +16985,23 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
return true; return true;
} }
if (!supergroup_info->is_supergroup && message->content_->get_id() == td_api::messageSupergroupChatCreate::ID) { if (!supergroup_info->is_supergroup && message_content_id == td_api::messageSupergroupChatCreate::ID) {
// don't send message about channel creation, even if the bot was added at exactly the same time // don't send message about channel creation, even if the bot was added at exactly the same time
return true; return true;
} }
} }
if (message->self_destruct_type_ != nullptr) { if (message_info->is_self_destruct) {
return true; return true;
} }
if (message->import_info_ != nullptr) { if (message_info->is_imported) {
return true; return true;
} }
switch (message->content_->get_id()) { switch (message_content_id) {
case td_api::messageChatAddMembers::ID: { case td_api::messageChatAddMembers::ID: {
auto content = static_cast<const td_api::messageChatAddMembers *>(message->content_.get()); auto content = static_cast<const td_api::messageChatAddMembers *>(message_info->content.get());
if (content->member_user_ids_.empty()) { if (content->member_user_ids_.empty()) {
LOG(ERROR) << "Receive empty messageChatAddMembers"; LOG(ERROR) << "Receive empty messageChatAddMembers";
return true; return true;
@ -17015,7 +17016,7 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
break; break;
} }
case td_api::messagePinMessage::ID: { case td_api::messagePinMessage::ID: {
auto content = static_cast<const td_api::messagePinMessage *>(message->content_.get()); auto content = static_cast<const td_api::messagePinMessage *>(message_info->content.get());
auto pinned_message_id = content->message_id_; auto pinned_message_id = content->message_id_;
if (pinned_message_id <= 0) { if (pinned_message_id <= 0) {
return true; return true;
@ -17023,7 +17024,7 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
break; break;
} }
case td_api::messageProximityAlertTriggered::ID: { case td_api::messageProximityAlertTriggered::ID: {
auto content = static_cast<const td_api::messageProximityAlertTriggered *>(message->content_.get()); auto content = static_cast<const td_api::messageProximityAlertTriggered *>(message_info->content.get());
return content->traveler_id_->get_id() != td_api::messageSenderUser::ID || return content->traveler_id_->get_id() != td_api::messageSenderUser::ID ||
content->watcher_id_->get_id() != td_api::messageSenderUser::ID; content->watcher_id_->get_id() != td_api::messageSenderUser::ID;
} }
@ -17059,7 +17060,7 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
} }
if (is_edited && chat_id != 0) { if (is_edited && chat_id != 0) {
const MessageInfo *old_message = get_message(chat_id, message->id_, true); const MessageInfo *old_message = get_message(chat_id, message_info->id, true);
if (old_message != nullptr && !old_message->is_content_changed) { if (old_message != nullptr && !old_message->is_content_changed) {
return true; return true;
} }
@ -17473,8 +17474,8 @@ void Client::process_new_message_queue(int64 chat_id, int state) {
auto is_edited = queue.queue_.front().is_edited; auto is_edited = queue.queue_.front().is_edited;
queue.queue_.pop(); queue.queue_.pop();
state = 0; state = 0;
if (need_skip_update_message(chat_id, message, is_edited)) { const auto *message_info = add_message(std::move(message));
add_message(std::move(message)); if (need_skip_update_message(chat_id, message_info, is_edited)) {
continue; continue;
} }
@ -17490,7 +17491,7 @@ void Client::process_new_message_queue(int64 chat_id, int state) {
update_type = is_edited ? UpdateType::EditedMessage : UpdateType::Message; update_type = is_edited ? UpdateType::EditedMessage : UpdateType::Message;
} }
int32 message_date = message->edit_date_ == 0 ? message->date_ : message->edit_date_; int32 message_date = message_info->edit_date == 0 ? message_info->date : message_info->edit_date;
if (delayed_update_count_ > 0 && (update_type != delayed_update_type_ || chat_id != delayed_chat_id_)) { if (delayed_update_count_ > 0 && (update_type != delayed_update_type_ || chat_id != delayed_chat_id_)) {
if (delayed_update_count_ == 1) { if (delayed_update_count_ == 1) {
LOG(ERROR) << "Receive very old update " << get_update_type_name(delayed_update_type_) << " sent at " LOG(ERROR) << "Receive very old update " << get_update_type_name(delayed_update_type_) << " sent at "
@ -17523,7 +17524,6 @@ void Client::process_new_message_queue(int64 chat_id, int state) {
delayed_update_count_++; delayed_update_count_++;
} }
auto left_time = message_date + 86400 - now; auto left_time = message_date + 86400 - now;
const auto *message_info = add_message(std::move(message));
message_info->is_content_changed = false; message_info->is_content_changed = false;
add_update(update_type, JsonMessage(message_info, true, get_update_type_name(update_type).str(), this), left_time, add_update(update_type, JsonMessage(message_info, true, get_update_type_name(update_type).str(), this), left_time,
@ -17564,19 +17564,19 @@ void Client::process_new_business_message_queue(const td::string &connection_id)
} }
} }
auto message = std::move(message_ref); auto message_info = create_business_message(connection_id, std::move(message_ref));
auto is_edited = queue.queue_.front().is_edited_; auto is_edited = queue.queue_.front().is_edited_;
queue.queue_.pop(); queue.queue_.pop();
if (need_skip_update_message(0, message->message_, is_edited)) {
if (need_skip_update_message(0, message_info.get(), is_edited)) {
continue; continue;
} }
auto message_date = message->message_->edit_date_ == 0 ? message->message_->date_ : message->message_->edit_date_; auto message_date = message_info->edit_date == 0 ? message_info->date : message_info->edit_date;
auto now = get_unix_time(); auto now = get_unix_time();
auto left_time = message_date + 86400 - now; auto left_time = message_date + 86400 - now;
auto webhook_queue_id = message->message_->chat_id_ + (static_cast<int64>(11) << 33); auto webhook_queue_id = message_info->chat_id + (static_cast<int64>(11) << 33);
auto update_type = is_edited ? UpdateType::EditedBusinessMessage : UpdateType::BusinessMessage; auto update_type = is_edited ? UpdateType::EditedBusinessMessage : UpdateType::BusinessMessage;
auto message_info = create_business_message(connection_id, std::move(message));
add_update(update_type, JsonMessage(message_info.get(), true, get_update_type_name(update_type).str(), this), add_update(update_type, JsonMessage(message_info.get(), true, get_update_type_name(update_type).str(), this),
left_time, webhook_queue_id); left_time, webhook_queue_id);
} }
@ -17699,6 +17699,9 @@ void Client::init_message(MessageInfo *message_info, object_ptr<td_api::message>
message_info->paid_message_star_count = message->paid_message_star_count_; message_info->paid_message_star_count = message->paid_message_star_count_;
message_info->effect_id = message->effect_id_; message_info->effect_id = message->effect_id_;
message_info->is_paid_post = message->is_paid_star_suggested_post_ || message->is_paid_ton_suggested_post_; message_info->is_paid_post = message->is_paid_star_suggested_post_ || message->is_paid_ton_suggested_post_;
message_info->is_outgoing = message->is_outgoing_;
message_info->is_self_destruct = message->self_destruct_type_ != nullptr;
message_info->is_imported = message->import_info_ != nullptr;
drop_internal_reply_to_message_in_another_chat(message); drop_internal_reply_to_message_in_another_chat(message);

@ -1149,6 +1149,9 @@ class Client final : public WebhookActor::Callback {
bool is_from_offline = false; bool is_from_offline = false;
bool is_scheduled = false; bool is_scheduled = false;
bool is_paid_post = false; bool is_paid_post = false;
bool is_outgoing = false;
bool is_self_destruct = false;
bool is_imported = false;
mutable bool is_content_changed = false; mutable bool is_content_changed = false;
}; };
@ -1208,7 +1211,7 @@ class Client final : public WebhookActor::Callback {
int64 choose_added_member_id(const td_api::messageChatAddMembers *message_add_members) const; int64 choose_added_member_id(const td_api::messageChatAddMembers *message_add_members) const;
bool need_skip_update_message(int64 chat_id, const object_ptr<td_api::message> &message, bool is_edited) const; bool need_skip_update_message(int64 chat_id, const MessageInfo *message_info, bool is_edited) const;
void json_store_file(td::JsonObjectScope &object, const td_api::file *file, bool with_path = false) const; void json_store_file(td::JsonObjectScope &object, const td_api::file *file, bool with_path = false) const;

Loading…
Cancel
Save