From 1657de4eefb45b8db0cfbcf4aa9b76f7a56f80fb Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Tue, 19 Sep 2023 17:43:57 +1200 Subject: [PATCH] d->m bridge emojis in messages --- d2m/converters/message-to-event.js | 8 +++- d2m/converters/message-to-event.test.js | 24 ++++++++++ db/ooye-test-data.sql | 6 ++- db/orm-utils.d.ts | 6 +++ test/data.js | 64 ++++++++++++++++++++++++- 5 files changed, 104 insertions(+), 4 deletions(-) diff --git a/d2m/converters/message-to-event.js b/d2m/converters/message-to-event.js index a64201f..37a6f6f 100644 --- a/d2m/converters/message-to-event.js +++ b/d2m/converters/message-to-event.js @@ -41,8 +41,12 @@ function getDiscordParseCallbacks(message, useHTML) { /** @param {{animated: boolean, name: string, id: string, type: "discordEmoji"}} node */ emoji: node => { if (useHTML) { - // TODO: upload the emoji and actually use the right mxc!! - return `:${node.name}:` + const mxc = select("emoji", "mxc_url", "WHERE emoji_id = ?").pluck().get(node.id) + if (mxc) { + return `:${node.name}:` + } else { + return `:${node.name}:` + } } else { return `:${node.name}:` } diff --git a/d2m/converters/message-to-event.test.js b/d2m/converters/message-to-event.test.js index 94b67ff..c09708d 100644 --- a/d2m/converters/message-to-event.test.js +++ b/d2m/converters/message-to-event.test.js @@ -379,3 +379,27 @@ test("message2event: thread start message reference", async t => { "m.mentions": {} }]) }) + +test("message2event: single large bridged emoji", async t => { + const events = await messageToEvent(data.message.single_emoji, data.guild.general, {}) + t.deepEqual(events, [{ + $type: "m.room.message", + "m.mentions": {}, + msgtype: "m.text", + body: ":hippo:", + format: "org.matrix.custom.html", + formatted_body: ':hippo:' + }]) +}) + +test("message2event: mid-message small bridged emoji", async t => { + const events = await messageToEvent(data.message.surrounded_emoji, data.guild.general, {}) + t.deepEqual(events, [{ + $type: "m.room.message", + "m.mentions": {}, + msgtype: "m.text", + body: "h is for :hippo:!", + format: "org.matrix.custom.html", + formatted_body: 'h is for :hippo:!' + }]) +}) diff --git a/db/ooye-test-data.sql b/db/ooye-test-data.sql index ef66593..d37f7a1 100644 --- a/db/ooye-test-data.sql +++ b/db/ooye-test-data.sql @@ -66,7 +66,11 @@ INSERT INTO file (discord_url, mxc_url) VALUES ('https://cdn.discordapp.com/attachments/112760669178241024/1128084851023675515/RDT_20230704_0936184915846675925224905.jpg', 'mxc://cadence.moe/WlAbFSiNRIHPDEwKdyPeGywa'), ('https://cdn.discordapp.com/guilds/112760669178241024/users/134826546694193153/avatars/38dd359aa12bcd52dd3164126c587f8c.png?size=1024', 'mxc://cadence.moe/rfemHmAtcprjLEiPiEuzPhpl'), ('https://cdn.discordapp.com/icons/112760669178241024/a_f83622e09ead74f0c5c527fe241f8f8c.png?size=1024', 'mxc://cadence.moe/zKXGZhmImMHuGQZWJEFKJbsF'), -('https://cdn.discordapp.com/avatars/113340068197859328/b48302623a12bc7c59a71328f72ccb39.png?size=1024', 'mxc://cadence.moe/UpAeIqeclhKfeiZNdIWNcXXL'); +('https://cdn.discordapp.com/avatars/113340068197859328/b48302623a12bc7c59a71328f72ccb39.png?size=1024', 'mxc://cadence.moe/UpAeIqeclhKfeiZNdIWNcXXL'), +('https://cdn.discordapp.com/emojis/230201364309868544.png', 'mxc://cadence.moe/qWmbXeRspZRLPcjseyLmeyXC'); + +INSERT INTO emoji (emoji_id, animated, mxc_url) VALUES +('230201364309868544', 0, 'mxc://cadence.moe/qWmbXeRspZRLPcjseyLmeyXC'); INSERT INTO member_cache (room_id, mxid, displayname, avatar_url) VALUES ('!kLRqKKUQXcibIMtOpl:cadence.moe', '@cadence:cadence.moe', 'cadence [they]', NULL), diff --git a/db/orm-utils.d.ts b/db/orm-utils.d.ts index 1c6b3a6..43df0dd 100644 --- a/db/orm-utils.d.ts +++ b/db/orm-utils.d.ts @@ -62,6 +62,12 @@ export type Models = { webhook_id: string webhook_token: string } + + emoji: { + emoji_id: string + animated: number + mxc_url: string + } } export type Prepared = { diff --git a/test/data.js b/test/data.js index 07415d8..d6e10ef 100644 --- a/test/data.js +++ b/test/data.js @@ -958,7 +958,69 @@ module.exports = { }, attachments: [], guild_id: "112760669178241024" - } + }, + single_emoji: { + id: "1126733830494093453", + type: 0, + content: "<:hippo:230201364309868544>", + channel_id: "112760669178241024", + author: { + id: "111604486476181504", + username: "kyuugryphon", + avatar: "e4ce31267ca524d19be80e684d4cafa1", + discriminator: "0", + public_flags: 0, + flags: 0, + banner: null, + accent_color: null, + global_name: "KyuuGryphon", + avatar_decoration: null, + display_name: "KyuuGryphon", + banner_color: null + }, + attachments: [], + embeds: [], + mentions: [], + mention_roles: [], + pinned: false, + mention_everyone: false, + tts: false, + timestamp: "2023-07-07T04:37:58.892000+00:00", + edited_timestamp: null, + flags: 0, + components: [] + }, + surrounded_emoji: { + id: "1126733830494093453", + type: 0, + content: "h is for <:hippo:230201364309868544>!", + channel_id: "112760669178241024", + author: { + id: "111604486476181504", + username: "kyuugryphon", + avatar: "e4ce31267ca524d19be80e684d4cafa1", + discriminator: "0", + public_flags: 0, + flags: 0, + banner: null, + accent_color: null, + global_name: "KyuuGryphon", + avatar_decoration: null, + display_name: "KyuuGryphon", + banner_color: null + }, + attachments: [], + embeds: [], + mentions: [], + mention_roles: [], + pinned: false, + mention_everyone: false, + tts: false, + timestamp: "2023-07-07T04:37:58.892000+00:00", + edited_timestamp: null, + flags: 0, + components: [] + }, }, message_with_embeds: { nothing_but_a_field: {