Browse Source

Handle user mention story shares

Tulir Asokan 4 years ago
parent
commit
699ea29bd4
2 changed files with 17 additions and 2 deletions
  1. 10 2
      mauigpapi/types/thread_item.py
  2. 7 0
      mautrix_instagram/portal.py

+ 10 - 2
mauigpapi/types/thread_item.py

@@ -177,19 +177,25 @@ class Caption(SerializableAttrs['Caption']):
     pk: int
     user_id: int
     text: str
-    # TODO enum?
+    # TODO enum? 1
     type: int
     created_at: int
     created_at_utc: int
+    # TODO enum? comment
     content_type: str
-    # TODO enum?
+    # TODO enum? Active
     status: str
+    # TODO enum-ish thing?
     bit_flags: int
     user: BaseResponseUser
     did_report_as_spam: bool
     share_enabled: bool
     media_id: int
 
+    # Might not be in all captions
+    is_covered: Optional[bool] = None
+    private_reply_status: Optional[int] = None
+
 
 @dataclass
 class Location(SerializableAttrs['Location']):
@@ -245,6 +251,7 @@ class ReelMediaShareItem(MediaShareItem, SerializableAttrs['ReelMediaShareItem']
     # These three are apparently sometimes not present
     # TODO enum?
     caption_position: Optional[int] = None
+    caption: Optional[Caption] = None
     is_reel_media: Optional[bool] = None
     timezone_offset: Optional[int] = None
     # likers: List[TODO]
@@ -388,6 +395,7 @@ class ReelShareItem(SerializableAttrs['ReelShareItem']):
     reel_type: str
     media: Union[ReelMediaShareItem, ExpiredMediaItem]
     reaction_info: Optional[ReelShareReactionInfo] = None
+    mentioned_user_id: Optional[int] = None
 
     @classmethod
     def deserialize(cls, data: JSON) -> 'ReelShareItem':

+ 7 - 0
mautrix_instagram/portal.py

@@ -458,6 +458,11 @@ class Portal(DBPortal, BasePortal):
                 prefix_html = f"Sent {user_link}'s story"
         elif item.reel_share.type == ReelShareType.REACTION:
             prefix = "Reacted to your story"
+        elif item.reel_share.type == ReelShareType.MENTION:
+            if item.reel_share.mentioned_user_id == source.igpk:
+                prefix = "Mentioned you in their story"
+            else:
+                prefix = "You mentioned them in your story"
         else:
             self.log.debug(f"Unsupported reel share type {item.reel_share.type}")
             return None
@@ -466,6 +471,8 @@ class Portal(DBPortal, BasePortal):
             prefix_content.format = Format.HTML
             prefix_content.formatted_body = prefix_html
         content = TextMessageEventContent(msgtype=MessageType.TEXT, body=item.reel_share.text)
+        if not content.body:
+            content.body = (media.caption.text if media.caption else None) or "<no caption>"
         await self._send_message(intent, prefix_content, timestamp=item.timestamp // 1000)
         if isinstance(media, ExpiredMediaItem):
             # TODO send message about expired story