diff --git a/src/d2m/converters/message-to-event.js b/src/d2m/converters/message-to-event.js index 251ce90..73106cd 100644 --- a/src/d2m/converters/message-to-event.js +++ b/src/d2m/converters/message-to-event.js @@ -199,10 +199,9 @@ 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}} 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) { @@ -497,7 +496,7 @@ async function messageToEvent(message, guild, options = {}, di) { const isPlaintext = body === html - if (!isPlaintext || options.alwaysReturnFormattedBody) { + if (!isPlaintext) { Object.assign(newTextMessageEvent, { format: "org.matrix.custom.html", formatted_body: html @@ -521,20 +520,18 @@ 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 (room) { - const roomName = room && (room.nick || room.name) + if (eventID && room) { const via = await getViaServersMemo(room.room_id) - if (eventID) { - forwardedNotice.addLine( - `[๐Ÿ”€ Forwarded from #${roomName}]`, - tag`๐Ÿ”€ Forwarded from ${roomName}` - ) - } else { - forwardedNotice.addLine( - `[๐Ÿ”€ Forwarded from #${roomName}]`, - tag`๐Ÿ”€ Forwarded from ${roomName}` - ) - } + 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}` + ) } else { forwardedNotice.addLine( `[๐Ÿ”€ Forwarded message]`, @@ -544,7 +541,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}, di) // Indent for (const event of forwardedEvents) { @@ -558,8 +555,9 @@ async function messageToEvent(message, guild, options = {}, di) { // Try to merge the forwarded content with the forwarded notice let {body, formatted_body} = forwardedNotice.get() if (forwardedEvents.length >= 1 && ["m.text", "m.notice"].includes(forwardedEvents[0].msgtype)) { // Try to merge the forwarded content and the forwarded notice - forwardedEvents[0].body = body + "\n" + forwardedEvents[0].body - forwardedEvents[0].formatted_body = formatted_body + "
" + forwardedEvents[0].formatted_body + forwardedNotice.add("\n", "
") + forwardedEvents[0].body = body + forwardedEvents[0].body + forwardedEvents[0].formatted_body = formatted_body + forwardedEvents[0].formatted_body } else { await addTextEvent(body, formatted_body, "m.notice") } diff --git a/src/d2m/converters/message-to-event.test.js b/src/d2m/converters/message-to-event.test.js index 50f0908..115d99a 100644 --- a/src/d2m/converters/message-to-event.test.js +++ b/src/d2m/converters/message-to-event.test.js @@ -1043,94 +1043,3 @@ 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() { - 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 #wonderland]" - + "\nยป What's cooking, good looking? :hipposcope:", - format: "org.matrix.custom.html", - formatted_body: `๐Ÿ”€ Forwarded from wonderland` - + `
What's cooking, good looking? :hipposcope:
`, - "m.mentions": {}, - msgtype: "m.notice", - }, - { - $type: "m.room.message", - body: "100km.gif", - external_url: "https://bridge.example.org/download/discordcdn/112760669178241024/1296237494987133070/100km.gif", - filename: "100km.gif", - info: { - h: 300, - mimetype: "image/gif", - size: 2965649, - w: 300, - }, - "m.mentions": {}, - msgtype: "m.image", - url: "mxc://cadence.moe/qDAotmebTfEIfsAIVCEZptLh", - }, - { - $type: "m.room.message", - body: "ยป | ## This man" - + "\nยป | " - + "\nยป | ## This man is 100 km away from your house" - + "\nยป | " - + "\nยป | ### Distance away" - + "\nยป | 99 km" - + "\nยป | " - + "\nยป | ### Distance away" - + "\nยป | 98 km", - format: "org.matrix.custom.html", - formatted_body: "

This man

This man is 100 km away from your house

Distance away
99 km

Distance away
98 km

", - "m.mentions": {}, - msgtype: "m.notice" - } - ]) -}) - -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 1c7983a..6b49108 100644 --- a/test/data.js +++ b/test/data.js @@ -2190,132 +2190,6 @@ module.exports = { } } ] - }, - constructed_forwarded_message: { type: 0, - content: "", - 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: "176333891320283136", - message_id: "1191567971970191490" - }, - position: 0, - message_snapshots: [ - { - message: { - type: 0, - content: "What's cooking, good looking? <:hipposcope:393635038903926784>", - mentions: [], - mention_roles: [], - attachments: [ - { - id: "1296237494987133070", - filename: "100km.gif", - size: 2965649, - url: "https://cdn.discordapp.com/attachments/112760669178241024/1296237494987133070/100km.gif?ex=67118ebd&is=67103d3d&hm=8ed76d424f92f11366989f2ebc713d4f8206706ef712571e934da45b59944f77&", proxy_url: "https://media.discordapp.net/attachments/112760669178241024/1296237494987133070/100km.gif?ex=67118ebd&is=67103d3d&hm=8ed76d424f92f11366989f2ebc713d4f8206706ef712571e934da45b59944f77&", width: 300, - height: 300, - content_type: "image/gif" - } - ], - embeds: [{ - type: "rich", - title: "This man is 100 km away from your house", - author: { - name: "This man" - }, - fields: [{ - name: "Distance away", - value: "99 km" - }, { - name: "Distance away", - value: "98 km" - }] - }], - timestamp: "2022-09-15T01:20:58.177000+00:00", - edited_timestamp: null, - flags: 0, - components: [] - } - } - ] - }, - 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: { diff --git a/test/ooye-test-data.sql b/test/ooye-test-data.sql index af7ea7b..7e22e9f 100644 --- a/test/ooye-test-data.sql +++ b/test/ooye-test-data.sql @@ -64,8 +64,7 @@ INSERT INTO message_channel (message_id, channel_id) VALUES ('1273204543739396116', '687028734322147344'), ('1273743950028607530', '1100319550446252084'), ('1278002262400176128', '1100319550446252084'), -('1278001833876525057', '1100319550446252084'), -('1191567971970191490', '176333891320283136'); +('1278001833876525057', '1100319550446252084'); INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, reaction_part, source) VALUES ('$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg', 'm.room.message', 'm.text', '1126786462646550579', 0, 0, 1), @@ -104,8 +103,7 @@ INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part ('$qmyjr-ISJtnOM5WTWLI0fT7uSlqRLgpyin2d2NCglCU', 'm.room.message', 'm.text', '1273204543739396116', 0, 0, 0), ('$W1nsDhNIojWrcQOdnOD9RaEvrz2qyZErQoNhPRs1nK4', 'm.room.message', 'm.text', '1273743950028607530', 0, 0, 0), ('$UTqiL3Zj3FC4qldxRLggN1fhygpKl8sZ7XGY5f9MNbF', 'm.room.message', 'm.text', '1278002262400176128', 0, 0, 1), -('$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM', 'm.room.message', 'm.text', '1278001833876525057', 0, 0, 1), -('$tBIT8mO7XTTCgIINyiAIy6M2MSoPAdJenRl_RLyYuaE', 'm.room.message', 'm.text', '1191567971970191490', 0, 0, 1); +('$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM', 'm.room.message', 'm.text', '1278001833876525057', 0, 0, 1); INSERT INTO file (discord_url, mxc_url) VALUES ('https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png', 'mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM'),