From 1f5865b0d8a14ba56b07cc1d4f94c5e57ed058c4 Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Tue, 14 May 2024 23:09:51 +1200 Subject: [PATCH] Avoid sending ephemeral messages from Discord --- d2m/event-dispatcher.js | 4 ++++ discord/utils.js | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/d2m/event-dispatcher.js b/d2m/event-dispatcher.js index 54d858af..ec047500 100644 --- a/d2m/event-dispatcher.js +++ b/d2m/event-dispatcher.js @@ -244,6 +244,8 @@ module.exports = { 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. } + if (dUtils.isEphemeralMessage(message)) return // Ephemeral messages are for the eyes of the receiver only! + const {affected, row} = await speedbump.maybeDoSpeedbump(message.channel_id, message.id) if (affected) return @@ -262,6 +264,8 @@ module.exports = { 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. } + if (dUtils.isEphemeralMessage(data)) return // Ephemeral messages are for the eyes of the receiver only! + // 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, row} = await speedbump.maybeDoSpeedbump(data.channel_id, data.id) if (affected) return diff --git a/discord/utils.js b/discord/utils.js index 2726a1ad..c7045ec7 100644 --- a/discord/utils.js +++ b/discord/utils.js @@ -101,6 +101,14 @@ function isWebhookMessage(message) { return message.webhook_id && !isInteractionResponse } +/** + * Ephemeral messages can be generated if a slash command is attached to the same bot that OOYE is running on + * @param {DiscordTypes.APIMessage} message + */ +function isEphemeralMessage(message) { + return message.flags & (1 << 6); +} + /** @param {string} snowflake */ function snowflakeToTimestampExact(snowflake) { return Number(BigInt(snowflake) >> 22n) + EPOCH @@ -116,5 +124,6 @@ module.exports.hasPermission = hasPermission module.exports.hasSomePermissions = hasSomePermissions module.exports.hasAllPermissions = hasAllPermissions module.exports.isWebhookMessage = isWebhookMessage +module.exports.isEphemeralMessage = isEphemeralMessage module.exports.snowflakeToTimestampExact = snowflakeToTimestampExact module.exports.timestampToSnowflakeInexact = timestampToSnowflakeInexact