feat: reply to deleted messages

This commit is contained in:
AlexeyZavar
2026-02-06 22:51:17 +03:00
parent 48c7a4046c
commit cf72307b95
6 changed files with 183 additions and 12 deletions
+46
View File
@@ -308,6 +308,25 @@ void SendExistingDocument(
MessageToSend &&message,
not_null<DocumentData*> document,
std::optional<MsgId> localMessageId) {
if (!document->sticker()
&& !document->isVideoMessage()
&& !document->isVoiceMessage()) {
const auto clearReplyTo = prependPseudoReply(message);
if (clearReplyTo) {
message.action.replyTo.messageId = FullMsgId(
message.action.replyTo.messageId.peer,
message.action.replyTo.topicRootId);
}
} else if (message.action.replyTo && message.action.history) {
if (const auto item = message.action.history->session().data().message(message.action.replyTo.messageId)) {
if (item->isDeleted()) {
message.action.replyTo.messageId = FullMsgId(
message.action.replyTo.messageId.peer,
message.action.replyTo.topicRootId);
}
}
}
const auto inputMedia = [=] {
return MTP_inputMediaDocument(
MTP_flags(message.action.options.mediaSpoiler
@@ -335,6 +354,13 @@ void SendExistingPhoto(
MessageToSend &&message,
not_null<PhotoData*> photo,
std::optional<MsgId> localMessageId) {
const auto clearReplyTo = prependPseudoReply(message);
if (clearReplyTo) {
message.action.replyTo.messageId = FullMsgId(
message.action.replyTo.messageId.peer,
message.action.replyTo.topicRootId);
}
const auto inputMedia = [=] {
return MTP_inputMediaPhoto(
MTP_flags(0),
@@ -558,6 +584,26 @@ void SendConfirmedFile(
const auto history = session->data().history(file->to.peer);
const auto peer = history->peer;
if (!isEditing
&& file->type != SendMediaType::Audio
&& file->type != SendMediaType::Round) {
const auto clearReplyTo = prependPseudoReply(
session, history, file->caption, file->to.replyTo);
if (clearReplyTo) {
file->to.replyTo.messageId = FullMsgId(
file->to.replyTo.messageId.peer,
file->to.replyTo.topicRootId);
}
} else if (!isEditing && file->to.replyTo) {
if (const auto item = session->data().message(file->to.replyTo.messageId)) {
if (item->isDeleted()) {
file->to.replyTo.messageId = FullMsgId(
file->to.replyTo.messageId.peer,
file->to.replyTo.topicRootId);
}
}
}
if (!isEditing) {
const auto histories = &session->data().histories();
file->to.replyTo.messageId = histories->convertTopicReplyToId(