Fix bug quoting reply to msg with blockquote

This commit is contained in:
Cadence Ember 2023-10-02 00:14:46 +13:00
parent a56942cf14
commit 9e22101f66
2 changed files with 86 additions and 1 deletions

View file

@ -348,7 +348,7 @@ async function eventToMessage(event, guild, di) {
const repliedToContent = repliedToEvent.content.formatted_body || repliedToEvent.content.body const repliedToContent = repliedToEvent.content.formatted_body || repliedToEvent.content.body
const contentPreviewChunks = chunk( const contentPreviewChunks = chunk(
repliedToContent.replace(/.*<\/mx-reply>/, "") // Remove everything before replies, so just use the actual message body repliedToContent.replace(/.*<\/mx-reply>/, "") // Remove everything before replies, so just use the actual message body
.replace(/.*?<\/blockquote>/, "") // If the message starts with a blockquote, don't count it and use the message body afterwards .replace(/<blockquote>.*?<\/blockquote>/, "") // If the message starts with a blockquote, don't count it and use the message body afterwards
.replace(/(?:\n|<br>)+/g, " ") // Should all be on one line .replace(/(?:\n|<br>)+/g, " ") // Should all be on one line
.replace(/<span [^>]*data-mx-spoiler\b[^>]*>.*?<\/span>/g, "[spoiler]") // Good enough method of removing spoiler content. (I don't want to break out the HTML parser unless I have to.) .replace(/<span [^>]*data-mx-spoiler\b[^>]*>.*?<\/span>/g, "[spoiler]") // Good enough method of removing spoiler content. (I don't want to break out the HTML parser unless I have to.)
.replace(/<[^>]+>/g, ""), 50) // Completely strip all other formatting. .replace(/<[^>]+>/g, ""), 50) // Completely strip all other formatting.

View file

@ -726,6 +726,91 @@ test("event2message: should avoid using blockquote contents as reply preview in
) )
}) })
test("event2message: should include a reply preview when message ends with a blockquote", async t => {
t.deepEqual(
await eventToMessage({
type: "m.room.message",
sender: "@cadence:cadence.moe",
content: {
msgtype: "m.text",
body: "> <@_ooye_cookie:cadence.moe> https://tootsuite.net/Warp-Gate2.gif\n> tanget: @ monster spawner\n> \n> **https://tootsuite.net/Warp-Gate2.gif**\n\naichmophobia",
format: "org.matrix.custom.html",
formatted_body: "<mx-reply><blockquote><a href=\"https://matrix.to/#/!fGgIymcYWOqjbSRUdV:cadence.moe/$uXM2I6w-XMtim14-OSZ_8Z2uQ6MDAZLT37eYIiEU6KQ?via=cadence.moe\">In reply to</a> <a href=\"https://matrix.to/#/@_ooye_cookie:cadence.moe\">@_ooye_cookie:cadence.moe</a><br><a href=\"https://tootsuite.net/Warp-Gate2.gif\">https://tootsuite.net/Warp-Gate2.gif</a><br />tanget: @ monster spawner<blockquote><strong><a href=\"https://tootsuite.net/Warp-Gate2.gif\">https://tootsuite.net/Warp-Gate2.gif</a></strong></blockquote></blockquote></mx-reply>aichmophobia",
"m.relates_to": {
"m.in_reply_to": {
event_id: "$uXM2I6w-XMtim14-OSZ_8Z2uQ6MDAZLT37eYIiEU6KQ"
}
}
},
event_id: "$n6sg1X9rLeMzCYufJTRvaLzFeLQ-oEXjCWkHtRxcem4",
room_id: "!fGgIymcYWOqjbSRUdV:cadence.moe"
}, data.guild.general, {
api: {
getEvent: mockGetEvent(t, "!fGgIymcYWOqjbSRUdV:cadence.moe", "$uXM2I6w-XMtim14-OSZ_8Z2uQ6MDAZLT37eYIiEU6KQ", {
type: 'm.room.message',
sender: '@_ooye_cookie:cadence.moe',
content: {
'm.mentions': {},
msgtype: 'm.text',
body: 'https://tootsuite.net/Warp-Gate2.gif\n' +
'\n' +
'**https://tootsuite.net/Warp-Gate2.gif**',
format: 'org.matrix.custom.html',
formatted_body: '<a href="https://tootsuite.net/Warp-Gate2.gif">https://tootsuite.net/Warp-Gate2.gif</a><blockquote><strong><a href="https://tootsuite.net/Warp-Gate2.gif">https://tootsuite.net/Warp-Gate2.gif</a></strong></blockquote>'
},
unsigned: {
'm.relations': {
'm.replace': {
type: 'm.room.message',
room_id: '!fGgIymcYWOqjbSRUdV:cadence.moe',
sender: '@_ooye_cookie:cadence.moe',
content: {
'm.mentions': {},
msgtype: 'm.text',
body: '* https://tootsuite.net/Warp-Gate2.gif\n' +
'tanget: @ monster spawner\n' +
'\n' +
'**https://tootsuite.net/Warp-Gate2.gif**',
format: 'org.matrix.custom.html',
formatted_body: '* <a href="https://tootsuite.net/Warp-Gate2.gif">https://tootsuite.net/Warp-Gate2.gif</a><br>tanget: @ monster spawner<blockquote><strong><a href="https://tootsuite.net/Warp-Gate2.gif">https://tootsuite.net/Warp-Gate2.gif</a></strong></blockquote>',
'm.new_content': {
'm.mentions': {},
msgtype: 'm.text',
body: 'https://tootsuite.net/Warp-Gate2.gif\n' +
'tanget: @ monster spawner\n' +
'\n' +
'**https://tootsuite.net/Warp-Gate2.gif**',
format: 'org.matrix.custom.html',
formatted_body: '<a href="https://tootsuite.net/Warp-Gate2.gif">https://tootsuite.net/Warp-Gate2.gif</a><br>tanget: @ monster spawner<blockquote><strong><a href="https://tootsuite.net/Warp-Gate2.gif">https://tootsuite.net/Warp-Gate2.gif</a></strong></blockquote>'
},
'm.relates_to': {
rel_type: 'm.replace',
event_id: '$uXM2I6w-XMtim14-OSZ_8Z2uQ6MDAZLT37eYIiEU6KQ'
}
},
event_id: '$onCj1MucuYz6-dFr30jcnnjSEDq50ouyEbRId1wtAa8',
user_id: '@_ooye_cookie:cadence.moe',
}
}
},
user_id: '@_ooye_cookie:cadence.moe',
})
}
}),
{
messagesToDelete: [],
messagesToEdit: [],
messagesToSend: [{
username: "cadence [they]",
content: "> <:L1:1144820033948762203><:L2:1144820084079087647>Ⓜ️**_ooye_cookie**:"
+ "\n> https://tootsuite.net/Warp-Gate2.gif tanget: @..."
+ "\naichmophobia",
avatar_url: "https://matrix.cadence.moe/_matrix/media/r0/download/cadence.moe/azCAhThKTojXSZJRoWwZmhvU"
}]
}
)
})
test("event2message: editing a rich reply to a sim user", async t => { test("event2message: editing a rich reply to a sim user", async t => {
const eventsFetched = [] const eventsFetched = []
t.deepEqual( t.deepEqual(