From 0d8b9d570546121b6818eee50c1afda873f07ba0 Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Fri, 1 Nov 2024 16:50:28 +1300 Subject: [PATCH] Forwarded messages code coverage and plaintext fix --- src/d2m/converters/message-to-event.js | 31 ++++++------ src/d2m/converters/message-to-event.test.js | 35 +++++++++++++- test/data.js | 52 +++++++++++++++++++++ 3 files changed, 103 insertions(+), 15 deletions(-) diff --git a/src/d2m/converters/message-to-event.js b/src/d2m/converters/message-to-event.js index afdb4b8..251ce90 100644 --- a/src/d2m/converters/message-to-event.js +++ b/src/d2m/converters/message-to-event.js @@ -199,9 +199,10 @@ async function attachmentToEvent(mentions, attachment) { /** * @param {DiscordTypes.APIMessage} message * @param {DiscordTypes.APIGuild} guild - * @param {{includeReplyFallback?: boolean, includeEditFallbackStar?: boolean}} options default values: + * @param {{includeReplyFallback?: boolean, includeEditFallbackStar?: boolean, alwaysReturnFormattedBody?: 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. * @param {{api: import("../../matrix/api")}} di simple-as-nails dependency injection for the matrix API */ async function messageToEvent(message, guild, options = {}, di) { @@ -496,7 +497,7 @@ async function messageToEvent(message, guild, options = {}, di) { const isPlaintext = body === html - if (!isPlaintext) { + if (!isPlaintext || options.alwaysReturnFormattedBody) { Object.assign(newTextMessageEvent, { format: "org.matrix.custom.html", formatted_body: html @@ -520,18 +521,20 @@ async function messageToEvent(message, guild, options = {}, di) { const eventID = select("event_message", "event_id", {message_id: message.message_reference.message_id}).pluck().get() const room = select("channel_room", ["room_id", "name", "nick"], {channel_id: message.message_reference.channel_id}).get() const forwardedNotice = new mxUtils.MatrixStringBuilder() - if (eventID && room) { + if (room) { + const roomName = room && (room.nick || room.name) const via = await getViaServersMemo(room.room_id) - forwardedNotice.addLine( - `[๐Ÿ”€ Forwarded from #${room.nick || room.name}]`, - tag`๐Ÿ”€ Forwarded from ${room.nick || room.name}` - ) - } else if (room) { - const via = await getViaServersMemo(room.room_id) - forwardedNotice.addLine( - `[๐Ÿ”€ Forwarded from #${room.nick || room.name}]`, - tag`๐Ÿ”€ Forwarded from ${room.nick || room.name}` - ) + if (eventID) { + forwardedNotice.addLine( + `[๐Ÿ”€ Forwarded from #${roomName}]`, + tag`๐Ÿ”€ Forwarded from ${roomName}` + ) + } else { + forwardedNotice.addLine( + `[๐Ÿ”€ Forwarded from #${roomName}]`, + tag`๐Ÿ”€ Forwarded from ${roomName}` + ) + } } else { forwardedNotice.addLine( `[๐Ÿ”€ Forwarded message]`, @@ -541,7 +544,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}, di) + const forwardedEvents = await messageToEvent(message.message_snapshots[0].message, guild, {includeReplyFallback: false, includeEditFallbackStar: false, alwaysReturnFormattedBody: true}, di) // Indent for (const event of forwardedEvents) { diff --git a/src/d2m/converters/message-to-event.test.js b/src/d2m/converters/message-to-event.test.js index 4ae342c..50f0908 100644 --- a/src/d2m/converters/message-to-event.test.js +++ b/src/d2m/converters/message-to-event.test.js @@ -1047,7 +1047,7 @@ test("message2event: forwarded image", async t => { test("message2event: constructed forwarded message", async t => { const events = await messageToEvent(data.message.constructed_forwarded_message, {}, {}, { api: { - async getJoinedMembers(roomID) { + async getJoinedMembers() { return { joined: { "@_ooye_bot:cadence.moe": {display_name: null, avatar_url: null}, @@ -1101,3 +1101,36 @@ test("message2event: constructed forwarded message", async t => { } ]) }) + +test("message2event: constructed forwarded text", async t => { + const events = await messageToEvent(data.message.constructed_forwarded_text, {}, {}, { + api: { + async getJoinedMembers() { + return { + joined: { + "@_ooye_bot:cadence.moe": {display_name: null, avatar_url: null}, + "@user:matrix.org": {display_name: null, avatar_url: null} + } + } + } + } + }) + t.deepEqual(events, [ + { + $type: "m.room.message", + body: "[๐Ÿ”€ Forwarded from #amanda-spam]" + + "\nยป What's cooking, good looking?", + format: "org.matrix.custom.html", + formatted_body: `๐Ÿ”€ Forwarded from amanda-spam` + + `
What's cooking, good looking?
`, + "m.mentions": {}, + msgtype: "m.notice", + }, + { + $type: "m.room.message", + body: "What's cooking everybody โ€ผ๏ธ", + "m.mentions": {}, + msgtype: "m.text", + } + ]) +}) diff --git a/test/data.js b/test/data.js index 8adc459..1c7983a 100644 --- a/test/data.js +++ b/test/data.js @@ -2264,6 +2264,58 @@ module.exports = { } } ] + }, + constructed_forwarded_text: { type: 0, + content: "What's cooking everybody โ€ผ๏ธ", + mentions: [], + mention_roles: [], + attachments: [], + embeds: [], + timestamp: "2024-10-16T22:25:01.973000+00:00", + edited_timestamp: null, + flags: 16384, + components: [], + id: "1296237495993892916", + channel_id: "112760669178241024", + author: { + id: "113340068197859328", + username: "kumaccino", + avatar: "a8829abe66866d7797b36f0bfac01086", + discriminator: "0", + public_flags: 128, + flags: 128, + banner: null, + accent_color: null, + global_name: "kumaccino", + avatar_decoration_data: null, + banner_color: null, + clan: null + }, + pinned: false, + mention_everyone: false, + tts: false, + message_reference: { + type: 1, + channel_id: "497161350934560778", + message_id: "0" + }, + position: 0, + message_snapshots: [ + { + message: { + type: 0, + content: "What's cooking, good looking?", + mentions: [], + mention_roles: [], + attachments: [], + embeds: [], + timestamp: "2022-09-15T01:20:58.177000+00:00", + edited_timestamp: null, + flags: 0, + components: [] + } + } + ] } }, pk_message: {