From 4b6bf4439a1aae99dfd7705dc81e17393dfc8bab Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 6 Dec 2017 17:02:43 +0200 Subject: [PATCH] Allow specifying preferred order of displayname source. Fixes #20 --- example-config.yaml | 17 ++++++++++++++++ src/telegram-user.js | 46 ++++++++++++++++++++++++++++---------------- 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/example-config.yaml b/example-config.yaml index 44b3a9c2..290c8b45 100644 --- a/example-config.yaml +++ b/example-config.yaml @@ -21,6 +21,23 @@ bridge: username_template: "telegram_${ID}" # ${DISPLAYNAME} is replaced with the display name of the Telegram user. displayname_template: "${DISPLAYNAME} (Telegram)" + # Set the preferred order of user identifiers which to use in the Matrix puppet display name. + # In the (hopefully unlikely) scenario that none of the given keys are found, the numeric user ID is used. + # + # If the bridge is working properly, a phone number or an username should always be known, but the other one can + # very well be empty. + # + # Valid keys: + # fullName (First and/or last name) + # fullNameReversed (Last and/or first name) + # firstName + # lastName + # username + # phoneNumber + displayname_preference: + - fullName + - username + - phoneNumber # ${NAME} is replaced with the name part of the public channel/group invite link ( https://t.me/${NAME} ) alias_template: "telegram_${NAME}" # Username of the bot. The registration must be regenerated to change this. diff --git a/src/telegram-user.js b/src/telegram-user.js index 22ed87de..6da83ba2 100644 --- a/src/telegram-user.js +++ b/src/telegram-user.js @@ -82,17 +82,19 @@ class TelegramUser { } } let changed = false - if (user.first_name && this.firstName !== user.first_name) { - this.firstName = user.first_name - changed = true - } - if (user.last_name && this.lastName !== user.last_name) { - this.lastName = user.last_name - changed = true - } - if (user.username && this.username !== user.username) { - this.username = user.username - changed = true + if (user.first_name || user.last_name || user.username) { + if (this.firstName !== user.first_name) { + this.firstName = user.first_name + changed = true + } + if (this.lastName !== user.last_name) { + this.lastName = user.last_name + changed = true + } + if (user.username && this.username !== user.username) { + this.username = user.username + changed = true + } } if (user.access_hash && telegramPOV && this.accessHashes.get(telegramPOV.userID) !== user.access_hash) { this.accessHashes.set(telegramPOV.userID, user.access_hash) @@ -129,13 +131,23 @@ class TelegramUser { return [this.firstName, this.lastName].filter(s => !!s).join(" ") } + getLastAndFirstName() { + return [this.lastName, this.firstName].filter(s => !!s).join(" ") + } + getDisplayName() { - if (this.firstName || this.lastName) { - return this.getFirstAndLastName() - } else if (this.username) { - return this.username - } else if (this.phoneNumber) { - return this.phoneNumber + for (const preference of this.app.config.bridge.displayname_preference) { + if (preference === "fullName") { + if (this.firstName || this.lastName) { + return this.getFirstAndLastName() + } + } else if (preference === "fullNameReversed") { + if (this.firstName || this.lastName) { + return this.getLastAndFirstName() + } + } else if (this[preference]) { + return this[preference] + } } return this.id }