From 7aadcf0138c2789b4b0025e8361785ae6ffa9b40 Mon Sep 17 00:00:00 2001 From: Will Hunt <will@half-shot.uk> Date: Fri, 26 Oct 2018 00:59:12 +0100 Subject: [PATCH] Update the other functions too --- src/bot.ts | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/bot.ts b/src/bot.ts index 96b8fa9..eb23cf9 100644 --- a/src/bot.ts +++ b/src/bot.ts @@ -19,9 +19,6 @@ import * as mime from "mime"; const log = new Log("DiscordBot"); -// Due to messages often arriving before we get a response from the send call, -// messages get delayed from discord. -const MSG_PROCESS_DELAY = 750; const MIN_PRESENCE_UPDATE_DELAY = 250; // TODO: This is bad. We should be serving the icon from the own homeserver. @@ -107,17 +104,24 @@ export class DiscordBot { client.on("guildUpdate", (_, newGuild) => { this.channelSync.OnGuildUpdate(newGuild); }); client.on("guildDelete", (guild) => { this.channelSync.OnGuildDelete(guild); }); - client.on("messageDelete", (msg: Discord.Message) => { - this.discordMessageQueue[msg.channel.id] = Promise.all([ - this.discordMessageQueue[msg.channel.id] || Promise.resolve(), - Bluebird.delay(this.config.limits.discordSendDelay), - ]).then(() => this.DeleteDiscordMessage(msg)); + // Due to messages often arriving before we get a response from the send call, + // messages get delayed from discord. We use Bluebird.delay to handle this. + + client.on("messageDelete", async (msg: Discord.Message) => { + // tslint:disable-next-line:await-promise + await Bluebird.delay(this.config.limits.discordSendDelay); + this.discordMessageQueue[msg.channel.id] = (async () => { + await (this.discordMessageQueue[msg.channel.id] || Promise.resolve()); + await this.OnMessage(msg); + })(); }); - client.on("messageUpdate", (oldMessage: Discord.Message, newMessage: Discord.Message) => { - this.discordMessageQueue[newMessage.channel.id] = Promise.all([ - this.discordMessageQueue[newMessage.channel.id] || Promise.resolve(), - Bluebird.delay(this.config.limits.discordSendDelay), - ]).then(() => this.OnMessageUpdate(oldMessage, newMessage)); + client.on("messageUpdate", async (oldMessage: Discord.Message, newMessage: Discord.Message) => { + // tslint:disable-next-line:await-promise + await Bluebird.delay(this.config.limits.discordSendDelay); + this.discordMessageQueue[newMessage.channel.id] = (async () => { + await (this.discordMessageQueue[newMessage.channel.id] || Promise.resolve()); + await this.OnMessageUpdate(oldMessage, newMessage); + })(); }); client.on("message", async (msg: Discord.Message) => { // tslint:disable-next-line:await-promise -- GitLab