Browse Source

Send message to room on unhandled message types

Tulir Asokan 3 years ago
parent
commit
f731699c90
1 changed files with 25 additions and 9 deletions
  1. 25 9
      mautrix_instagram/portal.py

+ 25 - 9
mautrix_instagram/portal.py

@@ -1,5 +1,5 @@
 # mautrix-instagram - A Matrix-Instagram puppeting bridge.
 # mautrix-instagram - A Matrix-Instagram puppeting bridge.
-# Copyright (C) 2020 Tulir Asokan
+# Copyright (C) 2021 Tulir Asokan
 #
 #
 # This program is free software: you can redistribute it and/or modify
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as published by
 # it under the terms of the GNU Affero General Public License as published by
@@ -525,6 +525,12 @@ class Portal(DBPortal, BasePortal):
         await self._add_instagram_reply(content, item.replied_to_message)
         await self._add_instagram_reply(content, item.replied_to_message)
         return await self._send_message(intent, content, timestamp=item.timestamp // 1000)
         return await self._send_message(intent, content, timestamp=item.timestamp // 1000)
 
 
+    async def _send_instagram_unhandled(self, intent: IntentAPI, item: ThreadItem) -> EventID:
+        content = TextMessageEventContent(msgtype=MessageType.NOTICE,
+                                          body="Unsupported message type")
+        await self._add_instagram_reply(content, item.replied_to_message)
+        return await self._send_message(intent, content, timestamp=item.timestamp // 1000)
+
     async def _handle_instagram_location(self, intent: IntentAPI, item: ThreadItem
     async def _handle_instagram_location(self, intent: IntentAPI, item: ThreadItem
                                          ) -> Optional[EventID]:
                                          ) -> Optional[EventID]:
         loc = item.location
         loc = item.location
@@ -627,6 +633,10 @@ class Portal(DBPortal, BasePortal):
                 event_id = await self._handle_instagram_reel_share(source, intent, item)
                 event_id = await self._handle_instagram_reel_share(source, intent, item)
             elif item.media_share or item.story_share:
             elif item.media_share or item.story_share:
                 event_id = await self._handle_instagram_media_share(source, intent, item)
                 event_id = await self._handle_instagram_media_share(source, intent, item)
+            elif item.action_log:
+                # These probably don't need to be bridged
+                self.log.debug(f"Ignoring action log message {item.item_id}")
+                return
             # TODO handle item.clip?
             # TODO handle item.clip?
             if item.text:
             if item.text:
                 event_id = await self._handle_instagram_text(intent, item, item.text)
                 event_id = await self._handle_instagram_text(intent, item, item.text)
@@ -635,16 +645,22 @@ class Portal(DBPortal, BasePortal):
                 event_id = await self._handle_instagram_text(intent, item, item.like)
                 event_id = await self._handle_instagram_text(intent, item, item.like)
             elif item.link:
             elif item.link:
                 event_id = await self._handle_instagram_text(intent, item, item.link.text)
                 event_id = await self._handle_instagram_text(intent, item, item.link.text)
-            if event_id:
-                msg = DBMessage(mxid=event_id, mx_room=self.mxid, item_id=item.item_id,
-                                receiver=self.receiver, sender=sender.pk)
-                await msg.insert()
-                await self._send_delivery_receipt(event_id)
+            handled = bool(event_id)
+            if not event_id:
+                self.log.debug(f"Unhandled Instagram message {item.item_id}")
+                event_id = await self._send_instagram_unhandled(intent, item)
+
+            msg = DBMessage(mxid=event_id, mx_room=self.mxid, item_id=item.item_id,
+                            receiver=self.receiver, sender=sender.pk)
+            await msg.insert()
+            await self._send_delivery_receipt(event_id)
+            if handled:
                 self.log.debug(f"Handled Instagram message {item.item_id} -> {event_id}")
                 self.log.debug(f"Handled Instagram message {item.item_id} -> {event_id}")
-                if is_backfill and item.reactions:
-                    await self._handle_instagram_reactions(msg, item.reactions.emojis)
             else:
             else:
-                self.log.debug(f"Unhandled Instagram message {item.item_id}")
+                self.log.debug(f"Unhandled Instagram message {item.item_id} "
+                               f"(type {item.item_type} -> fallback error {event_id})")
+            if is_backfill and item.reactions:
+                await self._handle_instagram_reactions(msg, item.reactions.emojis)
 
 
     async def handle_instagram_remove(self, item_id: str) -> None:
     async def handle_instagram_remove(self, item_id: str) -> None:
         message = await DBMessage.get_by_item_id(item_id, self.receiver)
         message = await DBMessage.get_by_item_id(item_id, self.receiver)