|
@@ -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:
|