here's what I would have done differently
This commit is contained in:
		
							parent
							
								
									5daef9ae47
								
							
						
					
					
						commit
						5bf051c624
					
				
					 1 changed files with 9 additions and 13 deletions
				
			
		| 
						 | 
					@ -157,6 +157,7 @@ async function getMemberFromCacheOrHomeserver(roomID, mxid, api) {
 | 
				
			||||||
		return {displayname: null, avatar_url: null}
 | 
							return {displayname: null, avatar_url: null}
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Splits a display name into one chunk containing <=80 characters, and another chunk containing the rest of the characters. Splits on
 | 
					 * Splits a display name into one chunk containing <=80 characters, and another chunk containing the rest of the characters. Splits on
 | 
				
			||||||
 * whitespace if possible.
 | 
					 * whitespace if possible.
 | 
				
			||||||
| 
						 | 
					@ -165,7 +166,7 @@ async function getMemberFromCacheOrHomeserver(roomID, mxid, api) {
 | 
				
			||||||
 * can be prepended to the message content as-is.
 | 
					 * can be prepended to the message content as-is.
 | 
				
			||||||
 * @summary Splits too-long Matrix names into a display name chunk and a message content chunk.
 | 
					 * @summary Splits too-long Matrix names into a display name chunk and a message content chunk.
 | 
				
			||||||
 * @param  {string} displayName - The Matrix side display name to chop up.
 | 
					 * @param  {string} displayName - The Matrix side display name to chop up.
 | 
				
			||||||
 * @returns {[string, string]} The afformentioned chunks in their respective order.
 | 
					 * @returns {[string, string]} [shortened display name, display name runoff]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
function splitDisplayName(displayName) {
 | 
					function splitDisplayName(displayName) {
 | 
				
			||||||
	/** @type {string[]} */
 | 
						/** @type {string[]} */
 | 
				
			||||||
| 
						 | 
					@ -174,12 +175,9 @@ function splitDisplayName(displayName) {
 | 
				
			||||||
	if (displayNameChunks.length === 1) {
 | 
						if (displayNameChunks.length === 1) {
 | 
				
			||||||
		return [displayName, ""]
 | 
							return [displayName, ""]
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		/** @type {string} */
 | 
					 | 
				
			||||||
		const displayNamePreRunoff = displayNameChunks[0]
 | 
							const displayNamePreRunoff = displayNameChunks[0]
 | 
				
			||||||
		// displayNameRunoff is a substring rather than a concatenation of the rest of the chunks in order to preserve whatever whitespace
 | 
							// displayNameRunoff is a slice of the original rather than a concatenation of the rest of the chunks in order to preserve whatever whitespace it was broken on.
 | 
				
			||||||
		// it was broken on.
 | 
							const displayNameRunoff = `**${displayName.slice(displayNamePreRunoff.length + 1)}**\n`
 | 
				
			||||||
		/** @type {string} */
 | 
					 | 
				
			||||||
		const displayNameRunoff = `**${displayName.substring(displayNamePreRunoff.length + 1)}**\n`
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return [displayNamePreRunoff, displayNameRunoff]
 | 
							return [displayNamePreRunoff, displayNameRunoff]
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -206,11 +204,9 @@ async function eventToMessage(event, guild, di) {
 | 
				
			||||||
	const member = await getMemberFromCacheOrHomeserver(event.room_id, event.sender, di?.api)
 | 
						const member = await getMemberFromCacheOrHomeserver(event.room_id, event.sender, di?.api)
 | 
				
			||||||
	if (member.displayname) displayName = member.displayname
 | 
						if (member.displayname) displayName = member.displayname
 | 
				
			||||||
	if (member.avatar_url) avatarURL = utils.getPublicUrlForMxc(member.avatar_url) || undefined
 | 
						if (member.avatar_url) avatarURL = utils.getPublicUrlForMxc(member.avatar_url) || undefined
 | 
				
			||||||
	// If the display name is too long to be put into the webhook (>80 characters), put the excess characters into displayNameRunoff, later to
 | 
						// If the display name is too long to be put into the webhook (80 characters is the maximum),
 | 
				
			||||||
	// be put at the top of the message
 | 
						// put the excess characters into displayNameRunoff, later to be put at the top of the message
 | 
				
			||||||
	/** @type {string} */
 | 
						let [displayNameShortened, displayNameRunoff] = splitDisplayName(displayName)
 | 
				
			||||||
	let displayNameShortened, displayNameRunoff
 | 
					 | 
				
			||||||
	[displayNameShortened, displayNameRunoff] = splitDisplayName(displayName)
 | 
					 | 
				
			||||||
	// If the message type is m.emote, the full name is already included at the start of the message, so remove any runoff
 | 
						// If the message type is m.emote, the full name is already included at the start of the message, so remove any runoff
 | 
				
			||||||
	if (event.type === "m.room.message" && event.content.msgtype === "m.emote") {
 | 
						if (event.type === "m.room.message" && event.content.msgtype === "m.emote") {
 | 
				
			||||||
		displayNameRunoff = ""
 | 
							displayNameRunoff = ""
 | 
				
			||||||
| 
						 | 
					@ -294,7 +290,7 @@ async function eventToMessage(event, guild, di) {
 | 
				
			||||||
			if (fileReplyContentAlternative) {
 | 
								if (fileReplyContentAlternative) {
 | 
				
			||||||
				contentPreview = " " + fileReplyContentAlternative
 | 
									contentPreview = " " + fileReplyContentAlternative
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
			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>/, "") // If the message starts with a blockquote, don't count it and use the message body afterwards
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue