Forráskód Böngészése

Automatically create portals when receiving message

Tulir Asokan 4 éve
szülő
commit
62131c4b2b
2 módosított fájl, 12 hozzáadás és 10 törlés
  1. 2 2
      ROADMAP.md
  2. 10 8
      mautrix_instagram/user.py

+ 2 - 2
ROADMAP.md

@@ -36,9 +36,9 @@
 * Misc
   * [x] Multi-user support
   * [x] Shared group chat portals
-  * [ ] Automatic portal creation
+  * [x] Automatic portal creation
     * [x] At startup
-    * [ ] When receiving message
+    * [x] When receiving message
   * [ ] Private chat creation by inviting Matrix puppet of Instagram user to new room
   * [ ] Option to use own Matrix account for messages sent from other Instagram clients
     * [x] Automatic login with shared secret

+ 10 - 8
mautrix_instagram/user.py

@@ -256,14 +256,16 @@ class User(DBUser, BaseUser):
     @async_time(METRIC_MESSAGE)
     async def handle_message(self, evt: MessageSyncEvent) -> None:
         portal = await po.Portal.get_by_thread_id(evt.message.thread_id, receiver=self.igpk)
-        if not portal:
-            # TODO try to find the thread?
-            self.log.warning(f"Ignoring message to unknown thread {evt.message.thread_id}")
-            return
-        elif not portal.mxid:
-            # TODO create portal room?
-            self.log.warning(f"Ignoring message to thread with no room {evt.message.thread_id}")
-            return
+        if not portal or not portal.mxid:
+            self.log.debug("Got message in thread with no portal, getting info...")
+            resp = await self.client.get_thread(evt.message.thread_id)
+            portal = await po.Portal.get_by_thread(resp.thread, self.igpk)
+            self.log.debug("Got info for unknown portal, creating room")
+            await portal.create_matrix_room(self, resp.thread)
+            if not portal.mxid:
+                self.log.warning("Room creation appears to have failed, "
+                                 f"dropping message in {evt.message.thread_id}")
+                return
         self.log.trace(f"Received message sync event {evt.message}")
         sender = await pu.Puppet.get_by_pk(evt.message.user_id) if evt.message.user_id else None
         if evt.message.op == Operation.ADD: