Jelajahi Sumber

Parse incoming reactions (no bridging yet)

Tulir Asokan 4 tahun lalu
induk
melakukan
41204f9366
4 mengubah file dengan 23 tambahan dan 3 penghapusan
  1. 1 1
      ROADMAP.md
  2. 17 1
      mauigpapi/types/mqtt.py
  3. 1 1
      mautrix_instagram/portal.py
  4. 4 0
      mautrix_instagram/puppet.py

+ 1 - 1
ROADMAP.md

@@ -10,7 +10,7 @@
       * [ ] Locations
       * [ ] †Files
   * [ ] Message redactions
-  * [ ] Message reactions
+  * [x] Message reactions
   * [ ] Presence
   * [ ] Typing notifications
   * [ ] Read receipts

+ 17 - 1
mauigpapi/types/mqtt.py

@@ -84,6 +84,22 @@ class IrisPayload(SerializableAttrs['IrisPayload']):
     sampled: Optional[bool] = None
 
 
+@dataclass
+class Reaction(SerializableAttrs['Reaction']):
+    sender_id: int
+    timestamp: int
+    client_context: int
+    emoji: str = "❤️"
+    super_react_type: Optional[str] = None
+
+
+@dataclass
+class Reactions(SerializableAttrs['Reactions']):
+    likes_count: int = 0
+    likes: List[Reaction] = attr.ib(factory=lambda: [])
+    emojis: List[Reaction] = attr.ib(factory=lambda: [])
+
+
 @dataclass(kw_only=True)
 class MessageSyncMessage(ThreadItem, SerializableAttrs['MessageSyncMessage']):
     path: str
@@ -93,7 +109,7 @@ class MessageSyncMessage(ThreadItem, SerializableAttrs['MessageSyncMessage']):
     admin_user_ids: Optional[int] = None
     approval_required_for_new_members: Optional[bool] = None
     participants: Optional[Dict[str, str]] = None
-    reactions: Optional[dict] = None
+    reactions: Optional[Reactions] = None
     thread_id: Optional[str] = None
 
 

+ 1 - 1
mautrix_instagram/portal.py

@@ -128,7 +128,7 @@ class Portal(DBPortal, BasePortal):
         else:
             self.log.debug(f"_upsert_reaction inserting {mxid} (message: {message.mxid})")
             await DBReaction(mxid=mxid, mx_room=message.mx_room, ig_item_id=message.item_id,
-                             ig_receiver=self.receiver, ig_sender=sender.pk, reaction=reaction
+                             ig_receiver=self.receiver, ig_sender=sender.igpk, reaction=reaction
                              ).insert()
 
     # endregion

+ 4 - 0
mautrix_instagram/puppet.py

@@ -76,6 +76,10 @@ class Puppet(DBPuppet, BasePuppet):
         cls.login_device_name = "Instagram Bridge"
         return (puppet.try_start() async for puppet in cls.all_with_custom_mxid())
 
+    @property
+    def igpk(self) -> int:
+        return self.pk
+
     def intent_for(self, portal: 'p.Portal') -> IntentAPI:
         if portal.other_user_pk == self.pk or (self.config["bridge.backfill.invite_own_puppet"]
                                                and portal.backfill_lock.locked):