From 333b13802f066486aac3fe4dab3ebb7772e53d39 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 4 Nov 2020 15:32:21 +0000 Subject: [PATCH] Support thirdparty lookup for phone numbers As per MSC2845. Hidden behind /query for now, until we hook it up to a dial pad. --- src/SlashCommands.tsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index e94cf7a37c..5a44e4058b 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -1001,14 +1001,29 @@ export const Commands = [ description: _td("Opens chat with the given user"), args: "", runFn: function(roomId, userId) { - if (!userId || !userId.startsWith("@") || !userId.includes(":")) { + // easter-egg for now: look up phone numbers through the thirdparty API + // (very dumb phone number detection...) + const isPhoneNumber = userId && /^\+?[0123456789]+$/.test(userId); + if (!userId || (!userId.startsWith("@") || !userId.includes(":")) && !isPhoneNumber) { return reject(this.getUsage()); } return success((async () => { + if (isPhoneNumber) { + const results = await MatrixClientPeg.get().getThirdpartyUser('im.vector.protocol.pstn', { + 'm.id.phone': userId, + }); + if (!results || results.length === 0 || !results[0].userid) { + throw new Error("Unable to find Matrix ID for phone number"); + } + userId = results[0].userid; + } + + const roomId = await ensureDMExists(MatrixClientPeg.get(), userId); + dis.dispatch({ action: 'view_room', - room_id: await ensureDMExists(MatrixClientPeg.get(), userId), + room_id: roomId, }); })()); },