diff --git a/d2m/actions/delete-message.js b/d2m/actions/delete-message.js index 496d827..4386ae5 100644 --- a/d2m/actions/delete-message.js +++ b/d2m/actions/delete-message.js @@ -11,7 +11,7 @@ const speedbump = sync.require("./speedbump") * @param {import("discord-api-types/v10").GatewayMessageDeleteDispatchData} data */ async function deleteMessage(data) { - const row = select("channel_room", ["room_id", "speedbump_id", "speedbump_checked"], {channel_id: data.channel_id}).get() + const row = select("channel_room", ["room_id", "speedbump_checked"], {channel_id: data.channel_id}).get() if (!row) return const eventsToRedact = select("event_message", "event_id", {message_id: data.id}).pluck().all() @@ -22,7 +22,7 @@ async function deleteMessage(data) { await api.redactEvent(row.room_id, eventID) } - speedbump.updateCache(data.channel_id, row.speedbump_id, row.speedbump_checked) + speedbump.updateCache(data.channel_id, row.speedbump_checked) } /** diff --git a/d2m/actions/speedbump.js b/d2m/actions/speedbump.js index ac1ce67..f49a378 100644 --- a/d2m/actions/speedbump.js +++ b/d2m/actions/speedbump.js @@ -15,12 +15,11 @@ const KNOWN_BOTS = new Set([ /** * Fetch new speedbump data for the channel and put it in the database as cache * @param {string} channelID - * @param {string?} speedbumpID - * @param {number?} speedbumpChecked + * @param {number?} lastChecked */ -async function updateCache(channelID, speedbumpID, speedbumpChecked) { +async function updateCache(channelID, lastChecked) { const now = Math.floor(Date.now() / 1000) - if (speedbumpChecked && now - speedbumpChecked < SPEEDBUMP_UPDATE_FREQUENCY) return + if (lastChecked && now - lastChecked < SPEEDBUMP_UPDATE_FREQUENCY) return const webhooks = await discord.snow.webhook.getChannelWebhooks(channelID) const found = webhooks.find(b => KNOWN_BOTS.has(b.application_id)) const foundApplication = found?.application_id diff --git a/d2m/event-dispatcher.js b/d2m/event-dispatcher.js index 6003152..c630bfb 100644 --- a/d2m/event-dispatcher.js +++ b/d2m/event-dispatcher.js @@ -241,11 +241,13 @@ module.exports = { const guild = client.guilds.get(channel.guild_id) assert(guild) - const row = select("channel_room", ["speedbump_id", "speedbump_webhook_id"], {channel_id: message.channel_id}).get() if (message.webhook_id) { const row = select("webhook", "webhook_id", {webhook_id: message.webhook_id}).pluck().get() if (row) return // The message was sent by the bridge's own webhook on discord. We don't want to reflect this back, so just drop it. - } else if (row) { + } + + const row = select("channel_room", ["speedbump_id", "speedbump_webhook_id"], {channel_id: message.channel_id}).get() + if (row && row.speedbump_id) { const affected = await speedbump.doSpeedbump(message.id) if (affected) return } @@ -260,11 +262,13 @@ module.exports = { * @param {DiscordTypes.GatewayMessageUpdateDispatchData} data */ async onMessageUpdate(client, data) { - const row = select("channel_room", ["speedbump_id", "speedbump_webhook_id"], {channel_id: data.channel_id}).get() if (data.webhook_id) { const row = select("webhook", "webhook_id", {webhook_id: data.webhook_id}).pluck().get() if (row) return // The message was sent by the bridge's own webhook on discord. We don't want to reflect this back, so just drop it. - } else if (row) { + } + + const row = select("channel_room", ["speedbump_id", "speedbump_webhook_id"], {channel_id: data.channel_id}).get() + if (row) { // Edits need to go through the speedbump as well. If the message is delayed but the edit isn't, we don't have anything to edit from. const affected = await speedbump.doSpeedbump(data.id) if (affected) return