Implement Matrix->Telegram redactions

This commit is contained in:
Tulir Asokan
2018-01-27 17:27:44 +02:00
parent f80f407ae0
commit 9722a1ce6f
4 changed files with 18 additions and 2 deletions
+1 -1
View File
@@ -64,7 +64,7 @@ does not do this automatically.
* [ ] Locations (not implemented in Riot)
* [x] Images
* [x] Files
* [ ] Message redactions
* [x] Message redactions
* [ ] Presence (currently always shown as online on Telegram)
* [ ] Typing notifications (may not be possible)
* [ ] Pinning messages
+1 -1
View File
@@ -41,7 +41,7 @@ class Message(Base):
tgid = Column(Integer, primary_key=True)
user = Column(Integer, ForeignKey("user.tgid"), primary_key=True)
__table_args__ = (UniqueConstraint('mxid', 'mx_room', name='_mx_id_room'), )
__table_args__ = (UniqueConstraint('mxid', 'mx_room', 'user', name='_mx_id_room'), )
class User(Base):
+8
View File
@@ -87,6 +87,12 @@ class MatrixHandler:
self.commands.handle(room, sender, command, args, is_management,
is_portal=portal is not None)
def handle_redaction(self, room, sender, event_id):
portal = Portal.get_by_mxid(room)
sender = User.get_by_mxid(sender)
if portal:
portal.handle_matrix_deletion(sender, event_id)
def filter_matrix_event(self, event):
return event["sender"] == self.az.bot_mxid or self.is_puppet(event["sender"])
@@ -106,3 +112,5 @@ class MatrixHandler:
pass
elif type == "m.room.message":
self.handle_message(evt["room_id"], evt["sender"], content, evt["event_id"])
elif type == "m.room.redaction":
self.handle_redaction(evt["room_id"], evt["sender"], evt["redacts"])
+8
View File
@@ -229,6 +229,14 @@ class Portal:
DBMessage(tgid=response.id, mx_room=self.mxid, mxid=event_id, user=sender.tgid))
self.db.commit()
def handle_matrix_deletion(self, deleter, event_id):
message = DBMessage.query.filter(DBMessage.mxid == event_id and
DBMessage.user == deleter.tgid and
DBMessage.mx_room == self.mxid).one_or_none()
if not message:
return
deleter.client.delete_messages(self.peer, [message.tgid])
# endregion
# region Telegram event handling