m->d: Remove rare "In reply to" fallback text
This commit is contained in:
		
							parent
							
								
									8e3b674d90
								
							
						
					
					
						commit
						d0a3c3ce29
					
				
					 2 changed files with 83 additions and 15 deletions
				
			
		| 
						 | 
					@ -429,7 +429,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(
 | 
				
			||||||
					entities.decodeHTML5Strict( // Remove entities like & "
 | 
										entities.decodeHTML5Strict( // Remove entities like & "
 | 
				
			||||||
						repliedToContent.replace(/.*<\/mx-reply>/, "") // Remove everything before replies, so just use the actual message body
 | 
											repliedToContent.replace(/.*<\/mx-reply>/s, "") // Remove everything before replies, so just use the actual message body
 | 
				
			||||||
						.replace(/^\s*<blockquote>.*?<\/blockquote>(.....)/s, "$1") // If the message starts with a blockquote, don't count it and use the message body afterwards
 | 
											.replace(/^\s*<blockquote>.*?<\/blockquote>(.....)/s, "$1") // 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.)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -713,6 +713,74 @@ test("event2message: rich reply to a sim user", async t => {
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test("event2message: rich reply to a rich reply to a multi-line message should correctly strip reply fallback", async t => {
 | 
				
			||||||
 | 
						t.deepEqual(
 | 
				
			||||||
 | 
							await eventToMessage({
 | 
				
			||||||
 | 
								content: {
 | 
				
			||||||
 | 
									body: "> <@cadence:cadence.moe> I just checked in a fix that will probably work, can you try reproducing this on the latest `main` branch and see if I fixed it?\n\nwill try later (tomorrow if I don't forgor)",
 | 
				
			||||||
 | 
									format: "org.matrix.custom.html",
 | 
				
			||||||
 | 
									formatted_body: "<mx-reply><blockquote><a href=\"https://matrix.to/#/!cBxtVRxDlZvSVhJXVK:cadence.moe/$A0Rj559NKOh2VndCZSTJXcvgi42gZWVfVQt73wA2Hn0?via=matrix.org&via=cadence.moe&via=syndicated.gay\">In reply to</a> <a href=\"https://matrix.to/#/@cadence:cadence.moe\">@cadence:cadence.moe</a><br />I just checked in a fix that will probably work, can you try reproducing this on the latest <code>main</code> branch and see if I fixed it?</blockquote></mx-reply>will try later (tomorrow if I don't forgor)",
 | 
				
			||||||
 | 
									"m.relates_to": {
 | 
				
			||||||
 | 
										"m.in_reply_to": {
 | 
				
			||||||
 | 
											event_id: "$A0Rj559NKOh2VndCZSTJXcvgi42gZWVfVQt73wA2Hn0"
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									msgtype: "m.text"
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								origin_server_ts: 1704857452930,
 | 
				
			||||||
 | 
								sender: "@cadence:cadence.moe",
 | 
				
			||||||
 | 
								type: "m.room.message",
 | 
				
			||||||
 | 
								unsigned: {},
 | 
				
			||||||
 | 
								event_id: "$Q5kNrPxGs31LfWOhUul5I03jNjlxKOwRmWVuivaqCHY",
 | 
				
			||||||
 | 
								room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe"
 | 
				
			||||||
 | 
							}, data.guild.general, {
 | 
				
			||||||
 | 
								api: {
 | 
				
			||||||
 | 
									getEvent: mockGetEvent(t, "!kLRqKKUQXcibIMtOpl:cadence.moe", "$A0Rj559NKOh2VndCZSTJXcvgi42gZWVfVQt73wA2Hn0", {
 | 
				
			||||||
 | 
										"type": "m.room.message",
 | 
				
			||||||
 | 
										"sender": "@cadence:cadence.moe",
 | 
				
			||||||
 | 
										"content": {
 | 
				
			||||||
 | 
											"msgtype": "m.text",
 | 
				
			||||||
 | 
											"body": "> <@solonovamax:matrix.org> multipart messages will be deleted if the message is edited to require less space\n>  \n> \n> steps to reproduce:\n> \n> 1. send a message that is longer than 2000 characters (discord character limit)\n>   - bot will split message into two messages on discord\n> 2. edit message to be under 2000 characters (discord character limit)\n>   - bot will delete one of the messages on discord, and then edit the other one to include the edited content\n>   - the bot will *then* delete the message on matrix (presumably) because one of the messages on discord was deleted (by \n\nI just checked in a fix that will probably work, can you try reproducing this on the latest `main` branch and see if I fixed it?",
 | 
				
			||||||
 | 
											"format": "org.matrix.custom.html",
 | 
				
			||||||
 | 
											"formatted_body": "<mx-reply><blockquote><a href=\"https://matrix.to/#/!cBxtVRxDlZvSVhJXVK:cadence.moe/$u4OD19vd2GETkOyhgFVla92oDKI4ojwBf2-JeVCG7EI?via=cadence.moe&via=matrix.org&via=conduit.rory.gay\">In reply to</a> <a href=\"https://matrix.to/#/@solonovamax:matrix.org\">@solonovamax:matrix.org</a><br /><p>multipart messages will be deleted if the message is edited to require less space</p>\n<p>steps to reproduce:</p>\n<ol>\n<li>send a message that is longer than 2000 characters (discord character limit)</li>\n</ol>\n<ul>\n<li>bot will split message into two messages on discord</li>\n</ul>\n<ol start=\"2\">\n<li>edit message to be under 2000 characters (discord character limit)</li>\n</ol>\n<ul>\n<li>bot will delete one of the messages on discord, and then edit the other one to include the edited content</li>\n<li>the bot will <em>then</em> delete the message on matrix (presumably) because one of the messages on discord was deleted (by</li>\n</ul>\n</blockquote></mx-reply>I just checked in a fix that will probably work, can you try reproducing this on the latest <code>main</code> branch and see if I fixed it?",
 | 
				
			||||||
 | 
											"m.relates_to": {
 | 
				
			||||||
 | 
												"m.in_reply_to": {
 | 
				
			||||||
 | 
													"event_id": "$u4OD19vd2GETkOyhgFVla92oDKI4ojwBf2-JeVCG7EI"
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"origin_server_ts": 1704855484532,
 | 
				
			||||||
 | 
										"unsigned": {
 | 
				
			||||||
 | 
											"age": 19069564
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"event_id": "$A0Rj559NKOh2VndCZSTJXcvgi42gZWVfVQt73wA2Hn0",
 | 
				
			||||||
 | 
										"room_id": "!cBxtVRxDlZvSVhJXVK:cadence.moe"
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								snow: {
 | 
				
			||||||
 | 
									guild: {
 | 
				
			||||||
 | 
										searchGuildMembers: (_, options) => {
 | 
				
			||||||
 | 
											t.fail(`should not search guild members, but actually searched for: ${options.query}`)
 | 
				
			||||||
 | 
											return []
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}),
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								ensureJoined: [],
 | 
				
			||||||
 | 
								messagesToDelete: [],
 | 
				
			||||||
 | 
								messagesToEdit: [],
 | 
				
			||||||
 | 
								messagesToSend: [{
 | 
				
			||||||
 | 
									username: "cadence [they]",
 | 
				
			||||||
 | 
									content: "> <:L1:1144820033948762203><:L2:1144820084079087647>Ⓜ️**cadence [they]**:"
 | 
				
			||||||
 | 
										+ "\n> I just checked in a fix that will probably work..."
 | 
				
			||||||
 | 
										+ "\nwill try later (tomorrow if I don't forgor)",
 | 
				
			||||||
 | 
									avatar_url: undefined
 | 
				
			||||||
 | 
								}]
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test("event2message: rich reply to an already-edited message will quote the new message content", async t => {
 | 
					test("event2message: rich reply to an already-edited message will quote the new message content", async t => {
 | 
				
			||||||
	t.deepEqual(
 | 
						t.deepEqual(
 | 
				
			||||||
		await eventToMessage({
 | 
							await eventToMessage({
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue