diff --git a/d2m/converters/message-to-event.js b/d2m/converters/message-to-event.js
index b9e13dd..24c7f2d 100644
--- a/d2m/converters/message-to-event.js
+++ b/d2m/converters/message-to-event.js
@@ -268,6 +268,7 @@ async function messageToEvent(message, guild, options = {}, di) {
* @param {string} content Partial or complete Discord message content
*/
async function transformContentMessageLinks(content) {
+ let offset = 0
for (const match of [...content.matchAll(/https:\/\/(?:ptb\.|canary\.|www\.)?discord(?:app)?\.com\/channels\/([0-9]+)\/([0-9]+)\/([0-9]+)/g)]) {
assert(typeof match.index === "number")
const channelID = match[2]
@@ -286,7 +287,8 @@ async function messageToEvent(message, guild, options = {}, di) {
} else {
result = `${match[0]} [event is from another server]`
}
- content = content.slice(0, match.index) + result + content.slice(match.index + match[0].length)
+ content = content.slice(0, match.index + offset) + result + content.slice(match.index + match[0].length + offset)
+ offset += result.length - match[0].length
}
return content
}
diff --git a/d2m/converters/message-to-event.test.js b/d2m/converters/message-to-event.test.js
index 980b1f5..f3ac895 100644
--- a/d2m/converters/message-to-event.test.js
+++ b/d2m/converters/message-to-event.test.js
@@ -136,6 +136,19 @@ test("message2event: message link that OOYE doesn't know about", async t => {
t.equal(called, 1, "getEventForTimestamp should be called once")
})
+test("message2event: message link from another server", async t => {
+ const events = await messageToEvent(data.message.message_link_from_another_server, data.guild.general)
+ t.deepEqual(events, [{
+ $type: "m.room.message",
+ "m.mentions": {},
+ msgtype: "m.text",
+ body: "Neither of these servers are known to OOYE: https://discord.com/channels/111/222/333 [event is from another server] https://canary.discordapp.com/channels/444/555/666 [event is from another server]",
+ format: "org.matrix.custom.html",
+ formatted_body: 'Neither of these servers are known to OOYE: https://discord.com/channels/111/222/333 [event is from another server]'
+ + ' https://canary.discordapp.com/channels/444/555/666 [event is from another server]'
+ }])
+})
+
test("message2event: attachment with no content", async t => {
const events = await messageToEvent(data.message.attachment_no_content, data.guild.general, {})
t.deepEqual(events, [{
diff --git a/test/data.js b/test/data.js
index a7154b4..648c2c8 100644
--- a/test/data.js
+++ b/test/data.js
@@ -603,6 +603,37 @@ module.exports = {
flags: 0,
components: []
},
+ message_link_from_another_server: {
+ id: "1160824382755708948",
+ type: 0,
+ content: "Neither of these servers are known to OOYE: https://discord.com/channels/111/222/333 https://canary.discordapp.com/channels/444/555/666",
+ channel_id: "112760669178241024",
+ author: {
+ id: "271237147401045000",
+ username: "jinx",
+ avatar: "a0ba563c16aff137289f67f38545807f",
+ discriminator: "0",
+ public_flags: 0,
+ premium_type: 0,
+ flags: 0,
+ banner: null,
+ accent_color: null,
+ global_name: "Jinx",
+ avatar_decoration_data: null,
+ banner_color: null
+ },
+ attachments: [],
+ embeds: [],
+ mentions: [],
+ mention_roles: [],
+ pinned: false,
+ mention_everyone: false,
+ tts: false,
+ timestamp: '2023-10-09T06:21:39.923000+00:00',
+ edited_timestamp: null,
+ flags: 0,
+ components: []
+ },
simple_written_at_mention_for_matrix: {
id: "1159030564049915915",
type: 0,