summary refs log tree commit diff
path: root/src/d2m
diff options
context:
space:
mode:
authorCadence Ember <cadence@disroot.org>2025-02-10 00:24:59 +1300
committerCadence Ember <cadence@disroot.org>2025-02-10 00:24:59 +1300
commit6a1be91071bf3dfe3eaed7b73daa59ca002f7f91 (patch)
tree7b4152fe40bc1bb9cff9ba7296749e622653ccb1 /src/d2m
parentCode coverage for matrix log in & guild settings (diff)
downloadout-of-your-element-6a1be91071bf3dfe3eaed7b73daa59ca002f7f91.tar.xz
Fix scanning forwarded messages for mentions
Diffstat (limited to 'src/d2m')
-rw-r--r--src/d2m/converters/message-to-event.js7
-rw-r--r--src/d2m/converters/message-to-event.test.js17
2 files changed, 21 insertions, 3 deletions
diff --git a/src/d2m/converters/message-to-event.js b/src/d2m/converters/message-to-event.js

index f2720bd..41ce09a 100644 --- a/src/d2m/converters/message-to-event.js +++ b/src/d2m/converters/message-to-event.js
@@ -199,10 +199,11 @@ async function attachmentToEvent(mentions, attachment) { /** * @param {DiscordTypes.APIMessage} message * @param {DiscordTypes.APIGuild} guild - * @param {{includeReplyFallback?: boolean, includeEditFallbackStar?: boolean, alwaysReturnFormattedBody?: boolean}} options default values: + * @param {{includeReplyFallback?: boolean, includeEditFallbackStar?: boolean, alwaysReturnFormattedBody?: boolean, scanTextForMentions?: boolean}} options default values: * - includeReplyFallback: true * - includeEditFallbackStar: false * - alwaysReturnFormattedBody: false - formatted_body will be skipped if it is the same as body because the message is plaintext. if you want the formatted_body to be returned anyway, for example to merge it with another message, then set this to true. + * - scanTextForMentions: true - needs to be set to false when converting forwarded messages etc which may be from a different channel that can't be scanned. * @param {{api: import("../../matrix/api")}} di simple-as-nails dependency injection for the matrix API */ async function messageToEvent(message, guild, options = {}, di) { @@ -544,7 +545,7 @@ async function messageToEvent(message, guild, options = {}, di) { // Forwarded content // @ts-ignore - const forwardedEvents = await messageToEvent(message.message_snapshots[0].message, guild, {includeReplyFallback: false, includeEditFallbackStar: false, alwaysReturnFormattedBody: true}, di) + const forwardedEvents = await messageToEvent(message.message_snapshots[0].message, guild, {includeReplyFallback: false, includeEditFallbackStar: false, alwaysReturnFormattedBody: true, scanTextForMentions: false}, di) // Indent for (const event of forwardedEvents) { @@ -570,7 +571,7 @@ async function messageToEvent(message, guild, options = {}, di) { if (message.content) { // Mentions scenario 3: scan the message content for written @mentions of matrix users. Allows for up to one space between @ and mention. const matches = [...message.content.matchAll(/@ ?([a-z0-9._]+)\b/gi)] - if (matches.length && matches.some(m => m[1].match(/[a-z]/i) && m[1] !== "everyone" && m[1] !== "here")) { + if (options.scanTextForMentions !== false && matches.length && matches.some(m => m[1].match(/[a-z]/i) && m[1] !== "everyone" && m[1] !== "here")) { const writtenMentionsText = matches.map(m => m[1].toLowerCase()) const roomID = select("channel_room", "room_id", {channel_id: message.channel_id}).pluck().get() assert(roomID) diff --git a/src/d2m/converters/message-to-event.test.js b/src/d2m/converters/message-to-event.test.js
index 6f77744..78848b8 100644 --- a/src/d2m/converters/message-to-event.test.js +++ b/src/d2m/converters/message-to-event.test.js
@@ -1134,3 +1134,20 @@ test("message2event: constructed forwarded text", async t => { } ]) }) + + +test("message2event: don't scan forwarded messages for mentions", async t => { + const events = await messageToEvent(data.message.forwarded_dont_scan_for_mentions, {}, {}, {}) + t.deepEqual(events, [ + { + $type: "m.room.message", + body: "[๐Ÿ”€ Forwarded message]" + + "\nยป If some folks have spare bandwidth then helping out ArchiveTeam with archiving soon to be deleted research and government data might be worthwhile https://social.luca.run/@luca/113950834185678114", + format: "org.matrix.custom.html", + formatted_body: `๐Ÿ”€ <em>Forwarded message</em>` + + `<br><blockquote>If some folks have spare bandwidth then helping out ArchiveTeam with archiving soon to be deleted research and government data might be worthwhile <a href="https://social.luca.run/@luca/113950834185678114">https://social.luca.run/@luca/113950834185678114</a></blockquote>`, + "m.mentions": {}, + msgtype: "m.notice" + } + ]) +})