From e4e28daf083a6d8b330ac436c032490895ea8be0 Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Thu, 7 Sep 2023 23:48:44 +1200 Subject: [PATCH] m->d replies to file should use emoji indicator --- m2d/converters/event-to-message.js | 24 +++++++--- m2d/converters/event-to-message.test.js | 58 +++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 6 deletions(-) diff --git a/m2d/converters/event-to-message.js b/m2d/converters/event-to-message.js index 1e66c7a..91dea5e 100644 --- a/m2d/converters/event-to-message.js +++ b/m2d/converters/event-to-message.js @@ -239,14 +239,26 @@ async function eventToMessage(event, guild, di) { const senderName = sender.match(/@([^:]*)/)?.[1] || sender const authorID = db.prepare("SELECT discord_id FROM sim WHERE mxid = ?").pluck().get(repliedToEvent.sender) if (authorID) { - replyLine += `<@${authorID}>:` + replyLine += `<@${authorID}>` } else { - replyLine += `Ⓜ️**${senderName}**:` + replyLine += `Ⓜ️**${senderName}**` } - const repliedToContent = repliedToEvent.content.formatted_body || repliedToEvent.content.body - const contentPreviewChunks = chunk(repliedToContent.replace(/.*<\/mx-reply>/, "").replace(/.*?<\/blockquote>/, "").replace(/(?:\n|
)+/g, " ").replace(/<[^>]+>/g, ""), 50) - const contentPreview = contentPreviewChunks.length > 1 ? contentPreviewChunks[0] + "..." : contentPreviewChunks[0] - replyLine = `> ${replyLine}\n> ${contentPreview}\n` + let contentPreview + const fileReplyContentAlternative = + ( repliedToEvent.content.msgtype === "m.image" ? "🖼️" + : repliedToEvent.content.msgtype === "m.video" ? "🎞️" + : repliedToEvent.content.msgtype === "m.audio" ? "🎶" + : repliedToEvent.content.msgtype === "m.file" ? "📄" + : null) + if (fileReplyContentAlternative) { + contentPreview = " " + fileReplyContentAlternative + } else { + const repliedToContent = repliedToEvent.content.formatted_body || repliedToEvent.content.body + const contentPreviewChunks = chunk(repliedToContent.replace(/.*<\/mx-reply>/, "").replace(/.*?<\/blockquote>/, "").replace(/(?:\n|
)+/g, " ").replace(/<[^>]+>/g, ""), 50) + contentPreview = ":\n> " + contentPreview += contentPreviewChunks.length > 1 ? contentPreviewChunks[0] + "..." : contentPreviewChunks[0] + } + replyLine = `> ${replyLine}${contentPreview}\n` })() if (event.content.format === "org.matrix.custom.html" && event.content.formatted_body) { diff --git a/m2d/converters/event-to-message.test.js b/m2d/converters/event-to-message.test.js index 40a4daa..4d85092 100644 --- a/m2d/converters/event-to-message.test.js +++ b/m2d/converters/event-to-message.test.js @@ -992,6 +992,64 @@ test("event2message: rich reply to a matrix user's long message with formatting" ) }) +test("event2message: rich reply to an image", async t => { + t.deepEqual( + await eventToMessage({ + "type": "m.room.message", + "sender": "@cadence:cadence.moe", + "content": { + "msgtype": "m.text", + "body": "> <@cadence:cadence.moe> sent an image.\n\nCaught in 8K UHD VR QLED Epic Edition", + "format": "org.matrix.custom.html", + "formatted_body": "
In reply to @cadence:cadence.moe
sent an image.
Caught in 8K UHD VR QLED Epic Edition", + "m.relates_to": { + "m.in_reply_to": { + "event_id": "$Fxy8SMoJuTduwReVkHZ1uHif9EuvNx36Hg79cltiA04" + } + } + }, + "origin_server_ts": 1693037401693, + "unsigned": { + "age": 381, + "transaction_id": "m1693037401592.521" + }, + "event_id": "$v_Gtr-bzv9IVlSLBO5DstzwmiDd-GSFaNfHX66IupV8", + "room_id": "!fGgIymcYWOqjbSRUdV:cadence.moe" + }, data.guild.general, { + api: { + getEvent: mockGetEvent(t, "!fGgIymcYWOqjbSRUdV:cadence.moe", "$Fxy8SMoJuTduwReVkHZ1uHif9EuvNx36Hg79cltiA04", { + type: "m.room.message", + sender: "@_ooye_kyuugryphon:cadence.moe", + content: { + "m.mentions": {}, + msgtype: "m.image", + url: "mxc://cadence.moe/ABfYgGdcIECnraZLGpRnoArG", + external_url: "https://cdn.discordapp.com/attachments/1100319550446252084/1149300251648339998/arcafeappx2.png", + body: "arcafeappx2.png", + filename: "arcafeappx2.png", + info: { + mimetype: "image/png", + w: 512, + h: 512, + size: 43990 + } + } + }) + } + }), + { + messagesToDelete: [], + messagesToEdit: [], + messagesToSend: [{ + username: "cadence [they]", + content: "> <:L1:1144820033948762203><:L2:1144820084079087647>https://discord.com/channels/112760669178241024/687028734322147344/1144865310588014633 <@111604486476181504> 🖼️" + + "\nCaught in 8K UHD VR QLED Epic Edition", + avatar_url: "https://matrix.cadence.moe/_matrix/media/r0/download/cadence.moe/azCAhThKTojXSZJRoWwZmhvU" + }] + } + ) +}) + test("event2message: with layered rich replies, the preview should only be the real text", async t => { t.deepEqual( await eventToMessage({