Add test for a generated embed on a reply
This commit is contained in:
parent
5d91f999f2
commit
5af7d6bf42
4 changed files with 201 additions and 6 deletions
|
@ -24,14 +24,13 @@ function eventCanBeEdited(ev) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {import("discord-api-types/v10").GatewayMessageCreateDispatchData} message
|
* @param {import("discord-api-types/v10").GatewayMessageCreateDispatchData} message
|
||||||
* IMPORTANT: This may not have all the normal fields! The API documentation doesn't provide possible types, just says it's all optional!
|
|
||||||
* Since I don't have a spec, I will have to capture some real traffic and add it as test cases... I hope they don't change anything later...
|
|
||||||
* @param {import("discord-api-types/v10").APIGuild} guild
|
* @param {import("discord-api-types/v10").APIGuild} guild
|
||||||
* @param {import("../../matrix/api")} api simple-as-nails dependency injection for the matrix API
|
* @param {import("../../matrix/api")} api simple-as-nails dependency injection for the matrix API
|
||||||
*/
|
*/
|
||||||
async function editToChanges(message, guild, api) {
|
async function editToChanges(message, guild, api) {
|
||||||
// If it is a user edit, allow deleting old messages (e.g. they might have removed text from an image).
|
// If it is a user edit, allow deleting old messages (e.g. they might have removed text from an image).
|
||||||
// If it is the system adding a generated embed to a message, don't delete old messages since the system only sends partial data.
|
// If it is the system adding a generated embed to a message, don't delete old messages since the system only sends partial data.
|
||||||
|
// Since an update in August 2024, the system always provides the full data of message updates. I'll leave in the old code since it won't cause problems.
|
||||||
|
|
||||||
const isGeneratedEmbed = !("content" in message)
|
const isGeneratedEmbed = !("content" in message)
|
||||||
|
|
||||||
|
|
|
@ -270,3 +270,44 @@ test("edit2changes: generated embed", async t => {
|
||||||
t.equal(senderMxid, "@_ooye_cadence:cadence.moe")
|
t.equal(senderMxid, "@_ooye_cadence:cadence.moe")
|
||||||
t.equal(called, 1)
|
t.equal(called, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test("edit2changes: generated embed on a reply", async t => {
|
||||||
|
const {senderMxid, eventsToRedact, eventsToReplace, eventsToSend, promotions} = await editToChanges(data.message_update.embed_generated_on_reply, data.guild.general, {})
|
||||||
|
t.deepEqual(eventsToRedact, [])
|
||||||
|
t.deepEqual(eventsToReplace, [{
|
||||||
|
oldID: "$UTqiL3Zj3FC4qldxRLggN1fhygpKl8sZ7XGY5f9MNbF",
|
||||||
|
newContent: {
|
||||||
|
$type: "m.room.message",
|
||||||
|
// Unfortunately the edited message doesn't include the message_reference field. Fine. Whatever. It looks normal if you're using a good client.
|
||||||
|
body: "> a Discord user: [Replied-to message content wasn't provided by Discord]"
|
||||||
|
+ "\n\n* https://matrix.to/#/!BnKuBPCvyfOkhcUjEu:cadence.moe/$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM",
|
||||||
|
format: "org.matrix.custom.html",
|
||||||
|
formatted_body: "<mx-reply><blockquote><a href=\"https://matrix.to/#/!BnKuBPCvyfOkhcUjEu:cadence.moe/$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM\">In reply to</a> a Discord user<br>[Replied-to message content wasn't provided by Discord]</blockquote></mx-reply>* <a href=\"https://matrix.to/#/!BnKuBPCvyfOkhcUjEu:cadence.moe/$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM\">https://matrix.to/#/!BnKuBPCvyfOkhcUjEu:cadence.moe/$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM</a>",
|
||||||
|
"m.mentions": {},
|
||||||
|
"m.new_content": {
|
||||||
|
body: "https://matrix.to/#/!BnKuBPCvyfOkhcUjEu:cadence.moe/$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM",
|
||||||
|
format: "org.matrix.custom.html",
|
||||||
|
formatted_body: "<a href=\"https://matrix.to/#/!BnKuBPCvyfOkhcUjEu:cadence.moe/$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM\">https://matrix.to/#/!BnKuBPCvyfOkhcUjEu:cadence.moe/$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM</a>",
|
||||||
|
"m.mentions": {},
|
||||||
|
msgtype: "m.text",
|
||||||
|
},
|
||||||
|
"m.relates_to": {
|
||||||
|
event_id: "$UTqiL3Zj3FC4qldxRLggN1fhygpKl8sZ7XGY5f9MNbF",
|
||||||
|
rel_type: "m.replace",
|
||||||
|
},
|
||||||
|
msgtype: "m.text",
|
||||||
|
},
|
||||||
|
}])
|
||||||
|
t.deepEqual(eventsToSend, [{
|
||||||
|
$type: "m.room.message",
|
||||||
|
msgtype: "m.notice",
|
||||||
|
body: "| ## Matrix - Decentralised and secure communication https://matrix.to/"
|
||||||
|
+ "\n| \n| You're invited to talk on Matrix. If you don't already have a client this link will help you pick one, and join the conversation. If you already have one, this link will help you join the conversation",
|
||||||
|
format: "org.matrix.custom.html",
|
||||||
|
formatted_body: `<blockquote><p><strong><a href="https://matrix.to/">Matrix - Decentralised and secure communication</a></strong>`
|
||||||
|
+ `</p><p>You're invited to talk on Matrix. If you don't already have a client this link will help you pick one, and join the conversation. If you already have one, this link will help you join the conversation</p></blockquote>`,
|
||||||
|
"m.mentions": {}
|
||||||
|
}])
|
||||||
|
t.deepEqual(promotions, []) // TODO: it would be ideal to promote this to reaction_part = 0. this is OK to do because the main message won't have had any reactions yet.
|
||||||
|
t.equal(senderMxid, "@_ooye_cadence:cadence.moe")
|
||||||
|
})
|
||||||
|
|
149
test/data.js
149
test/data.js
|
@ -1990,6 +1990,91 @@ module.exports = {
|
||||||
edited_timestamp: null,
|
edited_timestamp: null,
|
||||||
flags: 0,
|
flags: 0,
|
||||||
components: []
|
components: []
|
||||||
|
},
|
||||||
|
embed_will_be_generated_on_reply: {
|
||||||
|
type: 19,
|
||||||
|
content: "https://matrix.to/#/!BnKuBPCvyfOkhcUjEu:cadence.moe/$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM",
|
||||||
|
mentions: [],
|
||||||
|
mention_roles: [],
|
||||||
|
attachments: [],
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
type: "link",
|
||||||
|
url: "https://matrix.to/",
|
||||||
|
title: "Matrix - Decentralised and secure communication",
|
||||||
|
description: "You're invited to talk on Matrix. If you don't already have a client this link will help you pick one, and join the conversation. If you already have one, this link will help you join the conversation",
|
||||||
|
reference_id: "1278002262400176128",
|
||||||
|
thumbnail: {
|
||||||
|
url: "https://matrix.org/blog/img/matrix-logo.png",
|
||||||
|
proxy_url: "https://images-ext-1.discordapp.net/external/3yPmfN-_U_7Xn8hLSG77nY9IvdtITH0GPrB6OX3JjEI/https/matrix.org/blog/img/matrix-logo.png",
|
||||||
|
width: 800,
|
||||||
|
height: 400,
|
||||||
|
placeholder: "OAgOBIComJeHeId/dXgAAAAAAA==",
|
||||||
|
placeholder_version: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
timestamp: "2024-08-27T14:44:43.490000+00:00",
|
||||||
|
edited_timestamp: null,
|
||||||
|
flags: 0,
|
||||||
|
components: [],
|
||||||
|
id: "1278002262400176128",
|
||||||
|
channel_id: "1100319550446252084",
|
||||||
|
author: {
|
||||||
|
id: "772659086046658620",
|
||||||
|
username: "cadence.worm",
|
||||||
|
avatar: "4b5c4b28051144e4c111f0113a0f1cf1",
|
||||||
|
discriminator: "0",
|
||||||
|
public_flags: 0,
|
||||||
|
flags: 0,
|
||||||
|
banner: null,
|
||||||
|
accent_color: null,
|
||||||
|
global_name: "cadence",
|
||||||
|
avatar_decoration_data: null,
|
||||||
|
banner_color: null,
|
||||||
|
clan: null
|
||||||
|
},
|
||||||
|
pinned: false,
|
||||||
|
mention_everyone: false,
|
||||||
|
tts: false,
|
||||||
|
message_reference: {
|
||||||
|
type: 0,
|
||||||
|
channel_id: "1100319550446252084",
|
||||||
|
message_id: "1278001833876525057",
|
||||||
|
guild_id: "1100319549670301727"
|
||||||
|
},
|
||||||
|
position: 0,
|
||||||
|
referenced_message: {
|
||||||
|
type: 0,
|
||||||
|
content: "b",
|
||||||
|
mentions: [],
|
||||||
|
mention_roles: [],
|
||||||
|
attachments: [],
|
||||||
|
embeds: [],
|
||||||
|
timestamp: "2024-08-27T14:43:01.322000+00:00",
|
||||||
|
edited_timestamp: "2024-08-27T14:43:06.277000+00:00",
|
||||||
|
flags: 0,
|
||||||
|
components: [],
|
||||||
|
id: "1278001833876525057",
|
||||||
|
channel_id: "1100319550446252084",
|
||||||
|
author: {
|
||||||
|
id: "772659086046658620",
|
||||||
|
username: "cadence.worm",
|
||||||
|
avatar: "4b5c4b28051144e4c111f0113a0f1cf1",
|
||||||
|
discriminator: "0",
|
||||||
|
public_flags: 0,
|
||||||
|
flags: 0,
|
||||||
|
banner: null,
|
||||||
|
accent_color: null,
|
||||||
|
global_name: "cadence",
|
||||||
|
avatar_decoration_data: null,
|
||||||
|
banner_color: null,
|
||||||
|
clan: null
|
||||||
|
},
|
||||||
|
pinned: false,
|
||||||
|
mention_everyone: false,
|
||||||
|
tts: false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
pk_message: {
|
pk_message: {
|
||||||
|
@ -3709,6 +3794,70 @@ module.exports = {
|
||||||
],
|
],
|
||||||
guild_id: "112760669178241024",
|
guild_id: "112760669178241024",
|
||||||
id: "1210387798297682020"
|
id: "1210387798297682020"
|
||||||
|
},
|
||||||
|
embed_generated_on_reply: {
|
||||||
|
attachments: [],
|
||||||
|
author: {
|
||||||
|
avatar: "4b5c4b28051144e4c111f0113a0f1cf1",
|
||||||
|
avatar_decoration_data: null,
|
||||||
|
clan: null,
|
||||||
|
discriminator: "0",
|
||||||
|
global_name: "cadence",
|
||||||
|
id: "772659086046658620",
|
||||||
|
public_flags: 0,
|
||||||
|
username: "cadence.worm"
|
||||||
|
},
|
||||||
|
channel_id: "1100319550446252084",
|
||||||
|
components: [],
|
||||||
|
content: "https://matrix.to/#/!BnKuBPCvyfOkhcUjEu:cadence.moe/$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM",
|
||||||
|
edited_timestamp: null,
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
description: "You're invited to talk on Matrix. If you don't already have a client this link will help you pick one, and join the conversation. If you already have one, this link will help you join the conversation",
|
||||||
|
reference_id: "1278002262400176128",
|
||||||
|
thumbnail: {
|
||||||
|
height: 400,
|
||||||
|
placeholder: "OAgOBIComJeHeId/dXgAAAAAAA==",
|
||||||
|
placeholder_version: 1,
|
||||||
|
proxy_url: "https://images-ext-1.discordapp.net/external/3yPmfN-_U_7Xn8hLSG77nY9IvdtITH0GPrB6OX3JjEI/https/matrix.org/blog/img/matrix-logo.png",
|
||||||
|
url: "https://matrix.org/blog/img/matrix-logo.png",
|
||||||
|
width: 800
|
||||||
|
},
|
||||||
|
title: "Matrix - Decentralised and secure communication",
|
||||||
|
type: "link",
|
||||||
|
url: "https://matrix.to/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
flags: 0,
|
||||||
|
guild_id: "1100319549670301727",
|
||||||
|
id: "1278002262400176128",
|
||||||
|
member: {
|
||||||
|
avatar: null,
|
||||||
|
banner: null,
|
||||||
|
communication_disabled_until: null,
|
||||||
|
deaf: false,
|
||||||
|
flags: 0,
|
||||||
|
joined_at: "2023-04-25T07:17:03.696000+00:00",
|
||||||
|
mute: false,
|
||||||
|
nick: "worm",
|
||||||
|
pending: false,
|
||||||
|
premium_since: null,
|
||||||
|
roles: []
|
||||||
|
},
|
||||||
|
mention_everyone: false,
|
||||||
|
mention_roles: [],
|
||||||
|
mentions: [],
|
||||||
|
message_reference: {
|
||||||
|
channel_id: "1100319550446252084",
|
||||||
|
guild_id: "1100319549670301727",
|
||||||
|
message_id: "1278001833876525057",
|
||||||
|
type: 0
|
||||||
|
},
|
||||||
|
pinned: false,
|
||||||
|
position: 0,
|
||||||
|
timestamp: "2024-08-27T14:44:43.490000+00:00",
|
||||||
|
tts: false,
|
||||||
|
type: 19
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
special_message: {
|
special_message: {
|
||||||
|
|
|
@ -24,13 +24,15 @@ INSERT INTO sim (user_id, sim_name, localpart, mxid) VALUES
|
||||||
('111604486476181504', 'kyuugryphon', '_ooye_kyuugryphon', '@_ooye_kyuugryphon:cadence.moe'),
|
('111604486476181504', 'kyuugryphon', '_ooye_kyuugryphon', '@_ooye_kyuugryphon:cadence.moe'),
|
||||||
('1109360903096369153', 'amanda', '_ooye_amanda', '@_ooye_amanda:cadence.moe'),
|
('1109360903096369153', 'amanda', '_ooye_amanda', '@_ooye_amanda:cadence.moe'),
|
||||||
('43d378d5-1183-47dc-ab3c-d14e21c3fe58', '_pk_zoego', '_ooye__pk_zoego', '@_ooye__pk_zoego:cadence.moe'),
|
('43d378d5-1183-47dc-ab3c-d14e21c3fe58', '_pk_zoego', '_ooye__pk_zoego', '@_ooye__pk_zoego:cadence.moe'),
|
||||||
('320067006521147393', 'papiophidian', '_ooye_papiophidian', '@_ooye_papiophidian:cadence.moe');
|
('320067006521147393', 'papiophidian', '_ooye_papiophidian', '@_ooye_papiophidian:cadence.moe'),
|
||||||
|
('772659086046658620', 'cadence', '_ooye_cadence', '@_ooye_cadence:cadence.moe');
|
||||||
|
|
||||||
INSERT INTO sim_proxy (user_id, proxy_owner_id, displayname) VALUES
|
INSERT INTO sim_proxy (user_id, proxy_owner_id, displayname) VALUES
|
||||||
('43d378d5-1183-47dc-ab3c-d14e21c3fe58', '196188877885538304', 'Azalea &flwr; 🌺');
|
('43d378d5-1183-47dc-ab3c-d14e21c3fe58', '196188877885538304', 'Azalea &flwr; 🌺');
|
||||||
|
|
||||||
INSERT INTO sim_member (mxid, room_id, hashed_profile_content) VALUES
|
INSERT INTO sim_member (mxid, room_id, hashed_profile_content) VALUES
|
||||||
('@_ooye_bojack_horseman:cadence.moe', '!hYnGGlPHlbujVVfktC:cadence.moe', NULL);
|
('@_ooye_bojack_horseman:cadence.moe', '!hYnGGlPHlbujVVfktC:cadence.moe', NULL),
|
||||||
|
('@_ooye_cadence:cadence.moe', '!BnKuBPCvyfOkhcUjEu:cadence.moe', NULL);
|
||||||
|
|
||||||
INSERT INTO message_channel (message_id, channel_id) VALUES
|
INSERT INTO message_channel (message_id, channel_id) VALUES
|
||||||
('1106366167788044450', '122155380120748034'),
|
('1106366167788044450', '122155380120748034'),
|
||||||
|
@ -57,7 +59,9 @@ INSERT INTO message_channel (message_id, channel_id) VALUES
|
||||||
('1207486471489986620', '1160894080998461480'),
|
('1207486471489986620', '1160894080998461480'),
|
||||||
('1210387798297682020', '112760669178241024'),
|
('1210387798297682020', '112760669178241024'),
|
||||||
('1273204543739396116', '687028734322147344'),
|
('1273204543739396116', '687028734322147344'),
|
||||||
('1273743950028607530', '1100319550446252084');
|
('1273743950028607530', '1100319550446252084'),
|
||||||
|
('1278002262400176128', '1100319550446252084'),
|
||||||
|
('1278001833876525057', '1100319550446252084');
|
||||||
|
|
||||||
INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, reaction_part, source) VALUES
|
INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, reaction_part, source) VALUES
|
||||||
('$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg', 'm.room.message', 'm.text', '1126786462646550579', 0, 0, 1),
|
('$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg', 'm.room.message', 'm.text', '1126786462646550579', 0, 0, 1),
|
||||||
|
@ -94,7 +98,9 @@ INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part
|
||||||
('$OEEK-Wam2FTh6J-6kVnnJ6KnLA_lLRnLTHatKKL62-Y', 'm.room.message', 'm.image', '1207486471489986620', 0, 0, 0),
|
('$OEEK-Wam2FTh6J-6kVnnJ6KnLA_lLRnLTHatKKL62-Y', 'm.room.message', 'm.image', '1207486471489986620', 0, 0, 0),
|
||||||
('$mPSzglkCu-6cZHbYro0RW2u5mHvbH9aXDjO5FCzosc0', 'm.room.message', 'm.text', '1210387798297682020', 0, 0, 1),
|
('$mPSzglkCu-6cZHbYro0RW2u5mHvbH9aXDjO5FCzosc0', 'm.room.message', 'm.text', '1210387798297682020', 0, 0, 1),
|
||||||
('$qmyjr-ISJtnOM5WTWLI0fT7uSlqRLgpyin2d2NCglCU', 'm.room.message', 'm.text', '1273204543739396116', 0, 0, 0),
|
('$qmyjr-ISJtnOM5WTWLI0fT7uSlqRLgpyin2d2NCglCU', 'm.room.message', 'm.text', '1273204543739396116', 0, 0, 0),
|
||||||
('$W1nsDhNIojWrcQOdnOD9RaEvrz2qyZErQoNhPRs1nK4', 'm.room.message', 'm.text', '1273743950028607530', 0, 0, 0);
|
('$W1nsDhNIojWrcQOdnOD9RaEvrz2qyZErQoNhPRs1nK4', 'm.room.message', 'm.text', '1273743950028607530', 0, 0, 0),
|
||||||
|
('$UTqiL3Zj3FC4qldxRLggN1fhygpKl8sZ7XGY5f9MNbF', 'm.room.message', 'm.text', '1278002262400176128', 0, 0, 1),
|
||||||
|
('$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM', 'm.room.message', 'm.text', '1278001833876525057', 0, 0, 1);
|
||||||
|
|
||||||
INSERT INTO file (discord_url, mxc_url) VALUES
|
INSERT INTO file (discord_url, mxc_url) VALUES
|
||||||
('https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png', 'mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM'),
|
('https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png', 'mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM'),
|
||||||
|
|
Loading…
Reference in a new issue