diff --git a/src/bot.ts b/src/bot.ts index 96b8fa9fcb3d6f57f1fa3ceea7a559d2e23f32c5..eb23cf919ca1da4509f977ccf175a62c81f4c7b7 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