瀏覽代碼

Merge remote-tracking branch 'Craeckie/master'

Tulir Asokan 2 年之前
父節點
當前提交
f1272e2506
共有 2 個文件被更改,包括 20 次插入0 次删除
  1. 3 0
      mausignald/signald.py
  2. 17 0
      mautrix_signal/commands/auth.py

+ 3 - 0
mausignald/signald.py

@@ -331,6 +331,9 @@ class SignaldClient(SignaldRPCClient):
         resp = await self.request_v1("get_linked_devices", account=username)
         return [DeviceInfo.deserialize(dev) for dev in resp.get("devices", [])]
 
+    async def add_linked_device(self, username: str, uri: str) -> None:
+        await self.request_v1("add_device", account=username, uri=uri)
+
     async def remove_linked_device(self, username: str, device_id: int) -> None:
         await self.request_v1("remove_linked_device", account=username, deviceId=device_id)
 

+ 17 - 0
mautrix_signal/commands/auth.py

@@ -260,6 +260,23 @@ async def list_devices(evt: CommandEvent) -> None:
     )
 
 
+@command_handler(
+    needs_auth=True,
+    management_only=True,
+    help_section=SECTION_AUTH,
+    help_text="Add a device with a `sgnl://linkdevice?...` URI from a QR code",
+)
+async def add_linked_device(evt: CommandEvent) -> EventID:
+    if len(evt.args) == 0:
+        return await evt.reply("**Usage:** `$cmdprefix+sp add-linked-device <URI from QR code>`")
+    try:
+        await evt.bridge.signal.add_linked_device(evt.sender.username, evt.args[0])
+    except AuthorizationFailedError as e:
+        return await evt.reply(f"{e} Only the primary device can add linked devices.")
+    else:
+        return await evt.reply("Device linked successfully")
+
+
 @command_handler(
     needs_auth=True,
     management_only=True,