From 51e18cd43d72147906003bd0ea8c5b08d9a116c0 Mon Sep 17 00:00:00 2001 From: turt2live <travpc@gmail.com> Date: Tue, 12 Sep 2017 13:52:11 -0600 Subject: [PATCH] Add config options to disable typing notifications and presence. These are negative flags so that existing configurations can still work without modification. Otherwise the fields would be required and potentially break existing installs. --- config/config.sample.yaml | 2 ++ config/config.schema.yaml | 4 ++++ src/bot.ts | 31 ++++++++++++++++++++----------- src/config.ts | 2 ++ 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/config/config.sample.yaml b/config/config.sample.yaml index 16c4883..f995e94 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 3a1f19f..f515f8b 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 40b8cc8..016872a 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,7 @@ export class DiscordBot { } private BulkPresenceUpdate() { + if (this.config.bridge.disablePresence) return; log.verbose("DiscordBot", "Bulk presence update"); const members = []; for (const guild of this.bot.guilds.values()) { @@ -439,6 +447,7 @@ export class DiscordBot { } private UpdatePresence(guildMember: Discord.GuildMember) { + if (this.config.bridge.disablePresence) return; const intent = this.bridge.getIntentFromLocalpart(`_discord_${guildMember.id}`); try { const presence: any = {}; diff --git a/src/config.ts b/src/config.ts index 124aebd..959f144 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 { -- GitLab