浏览代码

Allow configuring portal room name templates

Tulir Asokan 4 年之前
父节点
当前提交
b765285cf9
共有 3 个文件被更改,包括 23 次插入3 次删除
  1. 2 0
      mautrix_instagram/config.py
  2. 5 1
      mautrix_instagram/example-config.yaml
  3. 16 2
      mautrix_instagram/portal.py

+ 2 - 0
mautrix_instagram/config.py

@@ -56,6 +56,8 @@ class Config(BaseBridgeConfig):
 
         copy("bridge.username_template")
         copy("bridge.displayname_template")
+        copy("bridge.private_chat_name_template")
+        copy("bridge.group_chat_name_template")
 
         copy("bridge.displayname_max_length")
 

+ 5 - 1
mautrix_instagram/example-config.yaml

@@ -76,7 +76,11 @@ bridge:
     # Displayname template for Instagram users.
     # {displayname} is replaced with the display name of the Instagram user.
     # {username} is replaced with the username of the Instagram user.
-    displayname_template: "{username} (Instagram)"
+    displayname_template: "{displayname} (Instagram)"
+    # Displayname template for 1:1 chat portals. Same variables as displayname_template.
+    private_chat_name_template: "{displayname}"
+    # Displayname template for group chat portals. Only {name} is available.
+    group_chat_name_template: "{name}"
 
     # Maximum length of displayname
     displayname_max_length: 100

+ 16 - 2
mautrix_instagram/portal.py

@@ -650,10 +650,24 @@ class Portal(DBPortal, BasePortal):
     # endregion
     # region Updating portal info
 
+    def _get_thread_name(self, thread: Thread) -> str:
+        if self.is_direct:
+            if self.other_user_pk == thread.viewer_id and len(thread.users) == 0:
+                return "Instagram chat with yourself"
+            elif len(thread.users) == 1:
+                tpl = self.config["bridge.private_chat_name_template"]
+                ui = thread.users[0]
+                return tpl.format(displayname=ui.full_name, id=ui.pk, username=ui.username)
+            pass
+        elif thread.thread_title:
+            return self.config["bridge.group_chat_name_template"].format(name=thread.thread_title)
+        else:
+            return ""
+
     async def update_info(self, thread: Thread, source: 'u.User') -> None:
         if self.is_direct and self.other_user_pk == source.igpk and not thread.thread_title:
             thread.thread_title = "Instagram chat with yourself"
-        changed = await self._update_name(thread.thread_title)
+        changed = await self._update_name(self._get_thread_name(thread))
         if changed:
             await self.update_bridge_info()
             await self.update()
@@ -661,7 +675,7 @@ class Portal(DBPortal, BasePortal):
         # TODO update power levels with thread.admin_user_ids
 
     async def _update_name(self, name: str) -> bool:
-        if self.name != name:
+        if self.name != name and name:
             self.name = name
             if self.mxid:
                 await self.main_intent.set_room_name(self.mxid, name)