diff --git a/config/config.sample.yaml b/config/config.sample.yaml index 16c4883e0cf2199ff270fb86918cff938b81c2f4..f995e948abd86c94b06869face19ea5b84b99fc2 100644 --- a/config/config.sample.yaml +++ b/config/config.sample.yaml @@ -1,6 +1,8 @@ bridge: domain: "localhost" homeserverUrl: "http://localhost:8008" + disablePresence: false + disableTypingNotifications: false auth: clientID: "12345" # Get from discord secret: "blah" diff --git a/config/config.schema.yaml b/config/config.schema.yaml index 3a1f19f58520cdd3b2039dde149d054378b5d9c9..f515f8bf98754aa32d0e7de1cbf72131d1ea0e38 100644 --- a/config/config.schema.yaml +++ b/config/config.schema.yaml @@ -10,6 +10,10 @@ properties: type: "string" homeserverUrl: type: "string" + disablePresence: + type: "boolean" + disableTypingNotifications: + type: "boolean" auth: type: "object" required: ["botToken"] diff --git a/src/bot.ts b/src/bot.ts index 40b8cc8059021f2fbb580d191f09f5b98d7b1a2f..2b7622cc1c0d03d895d9c89af33ed32b3a5ad07a 100644 --- a/src/bot.ts +++ b/src/bot.ts @@ -53,11 +53,15 @@ export class DiscordBot { return this.clientFactory.init().then(() => { return this.clientFactory.getClient(); }).then((client: any) => { - client.on("typingStart", (c, u) => { this.OnTyping(c, u, true); }); - client.on("typingStop", (c, u) => { this.OnTyping(c, u, false); }); + if (!this.config.bridge.disableTypingNotifications) { + client.on("typingStart", (c, u) => { this.OnTyping(c, u, true); }); + client.on("typingStop", (c, u) => { this.OnTyping(c, u, false); }); + } + if (!this.config.bridge.disablePresence) { + client.on("presenceUpdate", (_, newMember) => { this.UpdatePresence(newMember); }); + } client.on("userUpdate", (_, newUser) => { this.UpdateUser(newUser); }); client.on("channelUpdate", (_, newChannel) => { this.UpdateRooms(newChannel); }); - client.on("presenceUpdate", (_, newMember) => { this.UpdatePresence(newMember); }); client.on("guildMemberAdd", (newMember) => { this.AddGuildMember(newMember); }); client.on("guildMemberRemove", (oldMember) => { this.RemoveGuildMember(oldMember); }); client.on("guildMemberUpdate", (_, newMember) => { this.UpdateGuildMember(newMember); }); @@ -68,14 +72,17 @@ export class DiscordBot { }); log.info("DiscordBot", "Discord bot client logged in."); this.bot = client; - /* Currently synapse sadly times out presence after a minute. - * This will set the presence for each user who is not offline */ - this.presenceInterval = setInterval( - this.BulkPresenceUpdate.bind(this), - PRESENCE_UPDATE_DELAY, - ); - this.BulkPresenceUpdate(); - return null; + + if (!this.config.bridge.disablePresence) { + /* Currently synapse sadly times out presence after a minute. + * This will set the presence for each user who is not offline */ + this.presenceInterval = setInterval( + this.BulkPresenceUpdate.bind(this), + PRESENCE_UPDATE_DELAY, + ); + this.BulkPresenceUpdate(); + return null; + } }); } @@ -423,6 +430,10 @@ export class DiscordBot { } private BulkPresenceUpdate() { + if (this.config.bridge.disablePresence) { + return; // skip if there's nothing to do + } + log.verbose("DiscordBot", "Bulk presence update"); const members = []; for (const guild of this.bot.guilds.values()) { @@ -439,6 +450,10 @@ export class DiscordBot { } private UpdatePresence(guildMember: Discord.GuildMember) { + if (this.config.bridge.disablePresence) { + return; // skip if there's nothing to do + } + const intent = this.bridge.getIntentFromLocalpart(`_discord_${guildMember.id}`); try { const presence: any = {}; diff --git a/src/config.ts b/src/config.ts index 124aebded0c3f96640d75dc9191a471641d7b73b..959f1448e7e56258c1538deccfd19b1dd8aac776 100644 --- a/src/config.ts +++ b/src/config.ts @@ -10,6 +10,8 @@ export class DiscordBridgeConfig { class DiscordBridgeConfigBridge { public domain: string; public homeserverUrl: string; + public disablePresence: boolean; + public disableTypingNotifications: boolean; } class DiscordBridgeConfigDatabase {