diff --git a/changelog.d/888.bugfix b/changelog.d/888.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..dbb1c3b33cd31cbb5adda0132d869b60e4dfc5a7 --- /dev/null +++ b/changelog.d/888.bugfix @@ -0,0 +1 @@ +Prefer server-level display names when available. diff --git a/src/bot.ts b/src/bot.ts index 0ca0b768ab28c73af095abc216b5da394d786c9e..67993ca85d9375deac3c8a41a0524efcffcca11d 100644 --- a/src/bot.ts +++ b/src/bot.ts @@ -1027,7 +1027,7 @@ export class DiscordBot { } // Update presence because sometimes discord misses people. - await this.userSync.OnUpdateUser(msg.author, Boolean(msg.webhookID)); + await this.userSync.OnUpdateUser(msg.author, Boolean(msg.webhookID), msg); let rooms: string[]; try { rooms = await this.channelSync.GetRoomIdsFromChannel(msg.channel); diff --git a/src/usersyncroniser.ts b/src/usersyncroniser.ts index 51805200672eb67f4ea4d424896b10dde89f7036..1cdcf82e49fef45b9586f91629b653f2c7b524bb 100644 --- a/src/usersyncroniser.ts +++ b/src/usersyncroniser.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { User, GuildMember } from "better-discord.js"; +import { User, GuildMember, Message } from "better-discord.js"; import { DiscordBot } from "./bot"; import { Util } from "./util"; import { DiscordBridgeConfig } from "./config"; @@ -96,8 +96,8 @@ export class UserSyncroniser { * @returns {Promise<void>} * @constructor */ - public async OnUpdateUser(discordUser: User, isWebhook: boolean = false) { - const userState = await this.GetUserUpdateState(discordUser, isWebhook); + public async OnUpdateUser(discordUser: User, isWebhook: boolean = false, msg?: Message) { + const userState = await this.GetUserUpdateState(discordUser, isWebhook, msg); try { await this.ApplyStateToProfile(userState); } catch (e) { @@ -230,7 +230,7 @@ export class UserSyncroniser { } } - public async GetUserUpdateState(discordUser: User, isWebhook: boolean = false): Promise<IUserState> { + public async GetUserUpdateState(discordUser: User, isWebhook: boolean = false, msg?: Message): Promise<IUserState> { log.verbose(`State update requested for ${discordUser.id}`); let mxidExtra = ""; if (isWebhook) { @@ -244,7 +244,7 @@ export class UserSyncroniser { id: discordUser.id + mxidExtra, mxUserId: `@_discord_${discordUser.id}${mxidExtra}:${this.config.bridge.domain}`, }); - const displayName = Util.ApplyPatternString(this.config.ghosts.usernamePattern, { + const displayName = msg?.member?.nickname || Util.ApplyPatternString(this.config.ghosts.usernamePattern, { id: discordUser.id, tag: discordUser.discriminator, username: discordUser.username,