Don't remove all reactions when one is redacted
This commit is contained in:
@@ -2197,17 +2197,24 @@ class Portal(DBPortal, BasePortal):
|
|||||||
raise IgnoredMessageError(f"Ignoring Matrix redaction of unknown event {event_id}")
|
raise IgnoredMessageError(f"Ignoring Matrix redaction of unknown event {event_id}")
|
||||||
elif reaction.tg_sender != deleter.tgid:
|
elif reaction.tg_sender != deleter.tgid:
|
||||||
raise IgnoredMessageError(f"Ignoring Matrix redaction of reaction by another user")
|
raise IgnoredMessageError(f"Ignoring Matrix redaction of reaction by another user")
|
||||||
reaction_target = await DBMessage.get_by_mxid(
|
msg = await DBMessage.get_by_mxid(reaction.msg_mxid, reaction.mx_room, tg_space)
|
||||||
reaction.msg_mxid, reaction.mx_room, tg_space
|
if not msg or msg.redacted:
|
||||||
)
|
|
||||||
if not reaction_target or reaction_target.redacted:
|
|
||||||
raise IgnoredMessageError(
|
raise IgnoredMessageError(
|
||||||
f"Ignoring Matrix redaction of reaction to unknown event {reaction.msg_mxid}"
|
f"Ignoring Matrix redaction of reaction to unknown event {reaction.msg_mxid}"
|
||||||
)
|
)
|
||||||
# TODO keep other reactions for premium users with multiple reactions
|
async with self.reaction_lock(msg.mxid):
|
||||||
async with self.reaction_lock(reaction_target.mxid):
|
|
||||||
await reaction.delete()
|
await reaction.delete()
|
||||||
await deleter.client(SendReactionRequest(peer=self.peer, msg_id=reaction_target.tgid))
|
new_reactions = None
|
||||||
|
if await deleter.get_max_reactions() > 1:
|
||||||
|
new_reactions = [
|
||||||
|
react.telegram
|
||||||
|
for react in await DBReaction.get_by_sender(
|
||||||
|
msg.mxid, msg.mx_room, deleter.tgid
|
||||||
|
)
|
||||||
|
] or None
|
||||||
|
await deleter.client(
|
||||||
|
SendReactionRequest(peer=self.peer, msg_id=msg.tgid, reaction=new_reactions)
|
||||||
|
)
|
||||||
|
|
||||||
async def _handle_matrix_deletion(self, deleter: u.User, event_id: EventID) -> None:
|
async def _handle_matrix_deletion(self, deleter: u.User, event_id: EventID) -> None:
|
||||||
real_deleter = deleter if not await deleter.needs_relaybot(self) else self.bot
|
real_deleter = deleter if not await deleter.needs_relaybot(self) else self.bot
|
||||||
|
|||||||
Reference in New Issue
Block a user