diff --git a/src/discordbot.ts b/src/discordbot.ts index 7411caef1303306f1de9ed9c749e526abd310faa..fb0146374007e2cd6e4414d1406f49a618e2089c 100644 --- a/src/discordbot.ts +++ b/src/discordbot.ts @@ -27,6 +27,7 @@ export class DiscordBot { this.bot.on("typingStop", (c, u) => { this.OnTyping(c, u, false); }); this.bot.on("userUpdate", (_, newUser) => { this.UpdateUser(newUser); }); this.bot.on("channelUpdate", (_, newChannel) => { this.UpdateRoom(<Discord.TextChannel> newChannel); }); + this.bot.on("presenceUpdate", (_, newMember) => { this.UpdatePresence(newMember); }); this.bot.on("message", this.OnMessage.bind(this)); this.bot.login(this.config.auth.botToken); } @@ -186,6 +187,23 @@ export class DiscordBot { }); } + private UpdatePresence(guildMember: Discord.GuildMember) { + log.info("DiscordBot", `Updating presence for ${guildMember.user.username}#${guildMember.user.discriminator}`); + const intent = this.bridge.getIntentFromLocalpart(`_discord_${guildMember.id}`); + try { + let presence = guildMember.presence.status; + if (presence === "idle" || presence === "dnd") { + presence = "unavailable"; + } + intent.getClient().setPresence({ + presence, + }); + } catch (err) { + log.info("DiscordBot", "Couldn't set presence ", err); + } + // TODO: Set nicknames inside the scope of guild chats. + } + private OnTyping(channel: Discord.Channel, user: Discord.User, isTyping: boolean) { this.GetRoomIdFromChannel(channel).then((room) => { const intent = this.bridge.getIntentFromLocalpart(`_discord_${user.id}`);