diff --git a/d2m/actions/send-message.js b/d2m/actions/send-message.js
index 4f111b0..f5fe5ef 100644
--- a/d2m/actions/send-message.js
+++ b/d2m/actions/send-message.js
@@ -37,7 +37,7 @@ async function sendMessage(message, guild) {
delete eventWithoutType.$type
const eventID = await api.sendEvent(roomID, eventType, event, senderMxid)
- db.prepare("INSERT INTO event_message (event_id, message_id, part, source) VALUES (?, ?, ?, 1)").run(eventID, message.id, eventPart) // source 1 = discord
+ db.prepare("INSERT INTO event_message (event_id, message_id, channel_id, part, source) VALUES (?, ?, ?, ?, 1)").run(eventID, message.id, message.channel_id, eventPart) // source 1 = discord
eventPart = 1 // TODO: use more intelligent algorithm to determine whether primary or supporting
eventIDs.push(eventID)
diff --git a/d2m/converters/message-to-event.js b/d2m/converters/message-to-event.js
index 90023ee..fc76bf2 100644
--- a/d2m/converters/message-to-event.js
+++ b/d2m/converters/message-to-event.js
@@ -45,12 +45,22 @@ async function messageToEvent(message, guild) {
// Text content appears first
if (message.content) {
- const html = markdown.toHTML(message.content, {
+ let content = message.content
+ content = content.replace(/https:\/\/(?:ptb\.|canary\.|www\.)?discord(?:app)?\.com\/channels\/([0-9]+)\/([0-9]+)\/([0-9]+)/, (whole, guildID, channelID, messageID) => {
+ const row = db.prepare("SELECT room_id, event_id FROM event_message INNER JOIN channel_room USING (channel_id) WHERE channel_id = ? AND message_id = ? AND part = 0").get(channelID, messageID)
+ if (row) {
+ return `https://matrix.to/#/${row.room_id}/${row.event_id}`
+ } else {
+ return `${whole} [event not found]`
+ }
+ })
+
+ const html = markdown.toHTML(content, {
discordCallback: getDiscordParseCallbacks(message, true)
}, null, null)
- const body = markdown.toHTML(message.content, {
- discordCallback: getDiscordParseCallbacks(message, false), //TODO: library bug!!
+ const body = markdown.toHTML(content, {
+ discordCallback: getDiscordParseCallbacks(message, false),
discordOnly: true,
escapeHTML: false,
}, null, null)
diff --git a/d2m/converters/message-to-event.test.js b/d2m/converters/message-to-event.test.js
index 6e673f1..a456a94 100644
--- a/d2m/converters/message-to-event.test.js
+++ b/d2m/converters/message-to-event.test.js
@@ -22,6 +22,28 @@ test("message2event: simple user mention", async t => {
}])
})
+test("message2event: simple room mention", async t => {
+ const events = await messageToEvent(data.message.simple_room_mention, data.guild.general)
+ t.deepEqual(events, [{
+ $type: "m.room.message",
+ msgtype: "m.text",
+ body: "@crunch god: Tell me about Phil, renowned martial arts master and creator of the Chin Trick",
+ format: "org.matrix.custom.html",
+ formatted_body: '@crunch god Tell me about Phil, renowned martial arts master and creator of the Chin Trick'
+ }])
+})
+
+test("message2event: simple message link", async t => {
+ const events = await messageToEvent(data.message.simple_message_link, data.guild.general)
+ t.deepEqual(events, [{
+ $type: "m.room.message",
+ msgtype: "m.text",
+ body: "https://matrix.to/#/!kLRqKKUQXcibIMtOpl:cadence.moe/$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg",
+ format: "org.matrix.custom.html",
+ formatted_body: 'https://matrix.to/#/!kLRqKKUQXcibIMtOpl:cadence.moe/$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg'
+ }])
+})
+
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/m2d/actions/send-event.js b/m2d/actions/send-event.js
index 56a660f..c05f08c 100644
--- a/m2d/actions/send-event.js
+++ b/m2d/actions/send-event.js
@@ -25,7 +25,7 @@ async function sendEvent(event) {
let eventPart = 0 // 0 is primary, 1 is supporting
for (const message of messages) {
const messageResponse = await channelWebhook.sendMessageWithWebhook(channelID, message)
- db.prepare("INSERT INTO event_message (event_id, message_id, part, source) VALUES (?, ?, ?, 0)").run(event.event_id, messageResponse.id, eventPart) // source 0 = matrix
+ db.prepare("INSERT INTO event_message (event_id, message_id, channel_id, part, source) VALUES (?, ?, ?, ?, 0)").run(event.event_id, messageResponse.id, channelID, eventPart) // source 0 = matrix
eventPart = 1 // TODO: use more intelligent algorithm to determine whether primary or supporting?
messageResponses.push(messageResponse)
diff --git a/test/data.js b/test/data.js
index f4326a6..52b8770 100644
--- a/test/data.js
+++ b/test/data.js
@@ -216,6 +216,119 @@ module.exports = {
flags: 0,
components: []
},
+ simple_message_link: {
+ id: "1126788210308161626",
+ type: 0,
+ content: "https://ptb.discord.com/channels/112760669178241024/112760669178241024/1126786462646550579",
+ channel_id: "112760669178241024",
+ author: {
+ id: "113340068197859328",
+ username: "kumaccino",
+ avatar: "b48302623a12bc7c59a71328f72ccb39",
+ discriminator: "0",
+ public_flags: 128,
+ flags: 128,
+ banner: null,
+ accent_color: null,
+ global_name: "kumaccino",
+ avatar_decoration: null,
+ display_name: "kumaccino",
+ banner_color: null
+ },
+ attachments: [],
+ embeds: [],
+ mentions: [],
+ mention_roles: [],
+ pinned: false,
+ mention_everyone: false,
+ tts: false,
+ timestamp: "2023-07-07T08:14:04.050000+00:00",
+ edited_timestamp: null,
+ flags: 0,
+ components: []
+ },
+ simple_reply: {
+ id: "1126604870762369124",
+ type: 19,
+ content: "",
+ channel_id: "112760669178241024",
+ author: {
+ id: "116718249567059974",
+ username: "rnl",
+ avatar: "67e70f6424eead669e076b44474164c3",
+ discriminator: "0",
+ public_flags: 768,
+ flags: 768,
+ banner: null,
+ accent_color: null,
+ global_name: "▲",
+ avatar_decoration: null,
+ display_name: "▲",
+ banner_color: null
+ },
+ attachments: [],
+ embeds: [],
+ mentions: [
+ {
+ id: "113340068197859328",
+ username: "kumaccino",
+ avatar: "b48302623a12bc7c59a71328f72ccb39",
+ discriminator: "0",
+ public_flags: 128,
+ flags: 128,
+ banner: null,
+ accent_color: null,
+ global_name: "kumaccino",
+ avatar_decoration: null,
+ display_name: "kumaccino",
+ banner_color: null
+ }
+ ],
+ mention_roles: [],
+ pinned: false,
+ mention_everyone: false,
+ tts: false,
+ timestamp: "2023-07-06T20:05:32.496000+00:00",
+ edited_timestamp: null,
+ flags: 0,
+ components: [],
+ message_reference: {
+ channel_id: "112760669178241024",
+ message_id: "1126577139723026564",
+ guild_id: "112760669178241024"
+ },
+ referenced_message: {
+ id: "1126577139723026564",
+ type: 0,
+ content: "this message was replied to",
+ channel_id: "112760669178241024",
+ author: {
+ id: "113340068197859328",
+ username: "kumaccino",
+ avatar: "b48302623a12bc7c59a71328f72ccb39",
+ discriminator: "0",
+ public_flags: 128,
+ flags: 128,
+ banner: null,
+ accent_color: null,
+ global_name: "kumaccino",
+ avatar_decoration: null,
+ display_name: "kumaccino",
+ banner_color: null
+ },
+ attachments: [],
+ embeds: [],
+ mentions: [],
+ mention_roles: [],
+ pinned: false,
+ mention_everyone: false,
+ tts: false,
+ timestamp: "2023-07-06T18:15:20.901000+00:00",
+ edited_timestamp: null,
+ flags: 0,
+ components: []
+ }
+ },
attachment_no_content: {
id: "1124628646670389348",
type: 0,