From 0d9937f73f67d9eea8fe44e3e30291d2f037af64 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Fri, 1 Dec 2017 16:02:34 +0200 Subject: [PATCH] Allow calling updateInfo without data --- src/portal.js | 15 ++++++++++++--- src/telegram-user.js | 9 +++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/portal.js b/src/portal.js index 01cba7ce..4189f836 100644 --- a/src/portal.js +++ b/src/portal.js @@ -61,6 +61,7 @@ class Portal { } for (const userData of users) { const user = await this.app.getTelegramUser(userData.id) + // We don't want to update avatars here, as it would likely cause a flood error await user.updateInfo(telegramPOV, userData, { updateAvatar: false }) await user.intent.join(this.roomID) } @@ -404,17 +405,25 @@ class Portal { } async updateInfo(telegramPOV, dialog) { + if (!dialog) { + console.log("updateInfo called without dialog data") + const { user } = this.peer.getInfo(telegramPOV) + if (!user) { + throw new Error("Dialog data not given and fetching data failed") + } + dialog = user + } let changed = false if (this.peer.type === "channel") { if (telegramPOV && this.accessHashes.get(telegramPOV.userID) !== dialog.access_hash) { this.accessHashes.set(telegramPOV.userID, dialog.access_hash) changed = true } - } else if (this.peer.type === "user") { + } + if (this.peer.type === "user") { const user = await this.app.getTelegramUser(this.peer.id) await user.updateInfo(telegramPOV, dialog) - } - if (dialog.photo && dialog.photo.photo_big) { + } else if (dialog.photo && dialog.photo.photo_big) { changed = await this.updateAvatar(telegramPOV, dialog.photo.photo_big) || changed } changed = this.peer.updateInfo(dialog) || changed diff --git a/src/telegram-user.js b/src/telegram-user.js index f3cb525a..6969f962 100644 --- a/src/telegram-user.js +++ b/src/telegram-user.js @@ -72,6 +72,15 @@ class TelegramUser { } async updateInfo(telegramPOV, user, { updateAvatar = false } = {}) { + if (!user) { + console.log("updateInfo called without user data") + user = await telegramPOV.client("users.getFullUser", { + id: this.toPeer(telegramPOV).toInputObject(), + }) + if (!user) { + throw new Error("User data not given and fetching data failed") + } + } let changed = false if (user.first_name && this.firstName !== user.first_name) { this.firstName = user.first_name