store the channel_id on event_message
This commit is contained in:
parent
1d6e833b22
commit
0f4f404160
5 changed files with 150 additions and 5 deletions
|
@ -37,7 +37,7 @@ async function sendMessage(message, guild) {
|
||||||
delete eventWithoutType.$type
|
delete eventWithoutType.$type
|
||||||
|
|
||||||
const eventID = await api.sendEvent(roomID, eventType, event, senderMxid)
|
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
|
eventPart = 1 // TODO: use more intelligent algorithm to determine whether primary or supporting
|
||||||
eventIDs.push(eventID)
|
eventIDs.push(eventID)
|
||||||
|
|
|
@ -45,12 +45,22 @@ async function messageToEvent(message, guild) {
|
||||||
|
|
||||||
// Text content appears first
|
// Text content appears first
|
||||||
if (message.content) {
|
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)
|
discordCallback: getDiscordParseCallbacks(message, true)
|
||||||
}, null, null)
|
}, null, null)
|
||||||
|
|
||||||
const body = markdown.toHTML(message.content, {
|
const body = markdown.toHTML(content, {
|
||||||
discordCallback: getDiscordParseCallbacks(message, false), //TODO: library bug!!
|
discordCallback: getDiscordParseCallbacks(message, false),
|
||||||
discordOnly: true,
|
discordOnly: true,
|
||||||
escapeHTML: false,
|
escapeHTML: false,
|
||||||
}, null, null)
|
}, null, null)
|
||||||
|
|
|
@ -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: '<a href="https://matrix.to/#/@_ooye_crunch_god:cadence.moe">@crunch god</a> 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: '<a href="https://matrix.to/#/!kLRqKKUQXcibIMtOpl:cadence.moe/$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg">https://matrix.to/#/!kLRqKKUQXcibIMtOpl:cadence.moe/$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg</a>'
|
||||||
|
}])
|
||||||
|
})
|
||||||
|
|
||||||
test("message2event: attachment with no content", async t => {
|
test("message2event: attachment with no content", async t => {
|
||||||
const events = await messageToEvent(data.message.attachment_no_content, data.guild.general)
|
const events = await messageToEvent(data.message.attachment_no_content, data.guild.general)
|
||||||
t.deepEqual(events, [{
|
t.deepEqual(events, [{
|
||||||
|
|
|
@ -25,7 +25,7 @@ async function sendEvent(event) {
|
||||||
let eventPart = 0 // 0 is primary, 1 is supporting
|
let eventPart = 0 // 0 is primary, 1 is supporting
|
||||||
for (const message of messages) {
|
for (const message of messages) {
|
||||||
const messageResponse = await channelWebhook.sendMessageWithWebhook(channelID, message)
|
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?
|
eventPart = 1 // TODO: use more intelligent algorithm to determine whether primary or supporting?
|
||||||
messageResponses.push(messageResponse)
|
messageResponses.push(messageResponse)
|
||||||
|
|
113
test/data.js
113
test/data.js
|
@ -216,6 +216,119 @@ module.exports = {
|
||||||
flags: 0,
|
flags: 0,
|
||||||
components: []
|
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: "<redacted for privacy>",
|
||||||
|
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: {
|
attachment_no_content: {
|
||||||
id: "1124628646670389348",
|
id: "1124628646670389348",
|
||||||
type: 0,
|
type: 0,
|
||||||
|
|
Loading…
Reference in a new issue