From 049fc2232668bdc5af184aa3eacc92111e6d16ac Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Thu, 21 Sep 2023 01:39:09 +1200 Subject: [PATCH 1/2] fix the order of fetching emojis for messages --- d2m/converters/message-to-event.js | 41 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/d2m/converters/message-to-event.js b/d2m/converters/message-to-event.js index d9b8940..15eaf34 100644 --- a/d2m/converters/message-to-event.js +++ b/d2m/converters/message-to-event.js @@ -156,11 +156,30 @@ async function messageToEvent(message, guild, options = {}, di) { } }) + // Handling emojis that we don't know about. The emoji has to be present in the DB for it to be picked up in the emoji markdown converter. + // So we scan the message ahead of time for all its emojis and ensure they are in the DB. + const emojiMatches = [...content.matchAll(/<(a?):([^:>]{2,20}):([0-9]+)>/g)] + const emojiDownloads = [] + for (const match of emojiMatches) { + const id = match[3] + const name = match[2] + const animated = +!!match[1] + const row = select("emoji", "id", "WHERE id = ?").pluck().get(id) + if (!row) { + // The custom emoji is not registered. We will register it and then add it. + emojiDownloads.push( + file.uploadDiscordFileToMxc(file.emoji(id, animated)).then(mxc => { + db.prepare("INSERT OR IGNORE INTO emoji (id, name, animated, mxc_url) VALUES (?, ?, ?, ?)").run(id, name, animated, mxc) + }) + ) + } + } + await Promise.all(emojiDownloads) + let html = markdown.toHTML(content, { discordCallback: getDiscordParseCallbacks(message, true) }, null, null) - // TODO: add a string return type to my discord-markdown library let body = markdown.toHTML(content, { discordCallback: getDiscordParseCallbacks(message, false), discordOnly: true, @@ -209,26 +228,6 @@ async function messageToEvent(message, guild, options = {}, di) { } } - // Handling emojis that we don't know about. The emoji has to be present in the DB for it to be picked up in the emoji markdown converter. - // So we scan the message ahead of time for all its emojis and ensure they are in the DB. - const emojiMatches = [...content.matchAll(/<(a?):([^:>]{2,20}):([0-9]+)>/g)] - const emojiDownloads = [] - for (const match of emojiMatches) { - const id = match[3] - const name = match[2] - const animated = +!!match[1] - const row = select("emoji", "id", "WHERE id = ?").pluck().get(id) - if (!row) { - // The custom emoji is not registered. We will register it and then add it. - emojiDownloads.push( - file.uploadDiscordFileToMxc(file.emoji(id, animated)).then(mxc => { - db.prepare("INSERT OR IGNORE INTO emoji (id, name, animated, mxc_url) VALUES (?, ?, ?, ?)").run(id, name, animated, mxc) - }) - ) - } - } - await Promise.all(emojiDownloads) - // Star * prefix for fallback edits if (options.includeEditFallbackStar) { body = "* " + body From b1d959f944dc686b3204ffe5b01d1ee07bf1bf6c Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Thu, 21 Sep 2023 01:46:07 +1200 Subject: [PATCH 2/2] fix tests due to emojis working now --- d2m/converters/edit-to-changes.test.js | 4 ++-- db/ooye-test-data.sql | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/d2m/converters/edit-to-changes.test.js b/d2m/converters/edit-to-changes.test.js index d1644fd..9a7460b 100644 --- a/d2m/converters/edit-to-changes.test.js +++ b/d2m/converters/edit-to-changes.test.js @@ -60,7 +60,7 @@ test("edit2changes: bot response", async t => { msgtype: "m.text", body: "* :ae_botrac4r: @cadence asked ``­``, I respond: Stop drinking paint. (No)\n\nHit :bn_re: to reroll.", format: "org.matrix.custom.html", - formatted_body: '* :ae_botrac4r: @cadence asked ­, I respond: Stop drinking paint. (No)

Hit :bn_re: to reroll.', + formatted_body: '* :ae_botrac4r: @cadence asked ­, I respond: Stop drinking paint. (No)

Hit :bn_re: to reroll.', "m.mentions": { // Client-Server API spec 11.37.7: Copy Discord's behaviour by not re-notifying anyone that an *edit occurred* }, @@ -69,7 +69,7 @@ test("edit2changes: bot response", async t => { msgtype: "m.text", body: ":ae_botrac4r: @cadence asked ``­``, I respond: Stop drinking paint. (No)\n\nHit :bn_re: to reroll.", format: "org.matrix.custom.html", - formatted_body: ':ae_botrac4r: @cadence asked ­, I respond: Stop drinking paint. (No)

Hit :bn_re: to reroll.', + formatted_body: ':ae_botrac4r: @cadence asked ­, I respond: Stop drinking paint. (No)

Hit :bn_re: to reroll.', "m.mentions": { // Client-Server API spec 11.37.7: This should contain the mentions for the final version of the event "user_ids": ["@cadence:cadence.moe"] diff --git a/db/ooye-test-data.sql b/db/ooye-test-data.sql index 9ea11de..68c6d00 100644 --- a/db/ooye-test-data.sql +++ b/db/ooye-test-data.sql @@ -72,7 +72,9 @@ INSERT INTO file (discord_url, mxc_url) VALUES INSERT INTO emoji (id, name, animated, mxc_url) VALUES ('230201364309868544', 'hippo', 0, 'mxc://cadence.moe/qWmbXeRspZRLPcjseyLmeyXC'), -('393635038903926784', 'hipposcope', 1, 'mxc://cadence.moe/WbYqNlACRuicynBfdnPYtmvc'); +('393635038903926784', 'hipposcope', 1, 'mxc://cadence.moe/WbYqNlACRuicynBfdnPYtmvc'), +('362741439211503616', 'bn_re', 0, 'mxc://cadence.moe/OIpqpfxTnHKokcsYqDusxkBT'), +('551636841284108289', 'ae_botrac4r', 0, 'mxc://cadence.moe/skqfuItqxNmBYekzmVKyoLzs'); INSERT INTO member_cache (room_id, mxid, displayname, avatar_url) VALUES ('!kLRqKKUQXcibIMtOpl:cadence.moe', '@cadence:cadence.moe', 'cadence [they]', NULL),