Browse Source

Add parsed desc to user info

Markus-Rost 4 năm trước cách đây
mục cha
commit
b5be0a6879
2 tập tin đã thay đổi với 31 bổ sung31 xóa
  1. 14 16
      cmds/wiki/user.js
  2. 17 15
      functions/parse_page.js

+ 14 - 16
cmds/wiki/user.js

@@ -132,6 +132,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 					console.log( '- ' + ucresponse.statusCode + ': Error while getting the search results: ' + ( ucbody && ucbody.error && ucbody.error.info ) );
 					console.log( '- ' + ucresponse.statusCode + ': Error while getting the search results: ' + ( ucbody && ucbody.error && ucbody.error.info ) );
 					msg.sendChannelError( spoiler + '<' + wiki.toLink(namespace + username, querystring, fragment) + '>' + spoiler );
 					msg.sendChannelError( spoiler + '<' + wiki.toLink(namespace + username, querystring, fragment) + '>' + spoiler );
 				}
 				}
+				if ( reaction ) reaction.removeEmoji();
 				return;
 				return;
 			}
 			}
 			var editcount = [lang.get('user.info.editcount'), ( username.includes( '/' ) && ( ( username.includes( ':' ) && range % 16 ) || range % 8 ) ? '~' : '' ) + ucbody.query.usercontribs.length.toLocaleString(lang.get('dateformat')) + ( ucbody.continue ? '+' : '' )];
 			var editcount = [lang.get('user.info.editcount'), ( username.includes( '/' ) && ( ( username.includes( ':' ) && range % 16 ) || range % 8 ) ? '~' : '' ) + ucbody.query.usercontribs.length.toLocaleString(lang.get('dateformat')) + ( ucbody.continue ? '+' : '' )];
@@ -140,14 +141,15 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 			if ( msg.showEmbed() ) {
 			if ( msg.showEmbed() ) {
 				var text = '<' + pagelink + '>';
 				var text = '<' + pagelink + '>';
 				var embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( username ).setURL( pagelink ).addField( editcount[0], '[' + editcount[1] + '](' + wiki.toLink(contribs + username, '', '', true) + ')' );
 				var embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( username ).setURL( pagelink ).addField( editcount[0], '[' + editcount[1] + '](' + wiki.toLink(contribs + username, '', '', true) + ')' );
+				embed.forceTitle = true;
 				if ( querypage.pageprops && querypage.pageprops.description ) {
 				if ( querypage.pageprops && querypage.pageprops.description ) {
 					var description = htmlToDiscord( querypage.pageprops.description );
 					var description = htmlToDiscord( querypage.pageprops.description );
 					if ( description.length > 1000 ) description = description.substring(0, 1000) + '\u2026';
 					if ( description.length > 1000 ) description = description.substring(0, 1000) + '\u2026';
-					embed.setDescription( description );
+					embed.backupDescription = description;
 				}
 				}
 				else if ( querypage.extract ) {
 				else if ( querypage.extract ) {
 					var extract = extract_desc(querypage.extract);
 					var extract = extract_desc(querypage.extract);
-					embed.setDescription( extract[0] );
+					embed.backupDescription = extract[0];
 				}
 				}
 				if ( blocks.length ) blocks.forEach( block => {
 				if ( blocks.length ) blocks.forEach( block => {
 					block.text = block.text.replaceSave( /\$3/g, '[' + block.by.escapeFormatting() + '](' + wiki.toLink('User:' + block.by, '', '', true) + ')' );
 					block.text = block.text.replaceSave( /\$3/g, '[' + block.by.escapeFormatting() + '](' + wiki.toLink('User:' + block.by, '', '', true) + ')' );
@@ -169,14 +171,13 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 				if ( msg.showEmbed() ) embed.addField( '\u200b', '<a:loading:641343250661113886> **' + lang.get('user.info.loading') + '**' );
 				if ( msg.showEmbed() ) embed.addField( '\u200b', '<a:loading:641343250661113886> **' + lang.get('user.info.loading') + '**' );
 				else text += '\n\n<a:loading:641343250661113886> **' + lang.get('user.info.loading') + '**';
 				else text += '\n\n<a:loading:641343250661113886> **' + lang.get('user.info.loading') + '**';
 
 
-				msg.sendChannel( spoiler + text + spoiler, {embed} ).then( message => global_block(lang, message, username, text, embed, wiki, spoiler) );
+				parse_page(lang, msg, spoiler + text + spoiler, embed, wiki, reaction, querypage).then( message => global_block(lang, message, username, text, embed, wiki, spoiler) );
 			}
 			}
-			else msg.sendChannel( spoiler + text + spoiler, {embed} );
+			else parse_page(lang, msg, spoiler + text + spoiler, embed, wiki, reaction, querypage);
 		}, error => {
 		}, error => {
 			if ( rangeprefix && !username.includes( '/' ) ) username = rangeprefix;
 			if ( rangeprefix && !username.includes( '/' ) ) username = rangeprefix;
 			console.log( '- Error while getting the search results: ' + error );
 			console.log( '- Error while getting the search results: ' + error );
 			msg.sendChannelError( spoiler + '<' + wiki.toLink(namespace + username, querystring, fragment) + '>' + spoiler );
 			msg.sendChannelError( spoiler + '<' + wiki.toLink(namespace + username, querystring, fragment) + '>' + spoiler );
-		} ).finally( () => {
 			if ( reaction ) reaction.removeEmoji();
 			if ( reaction ) reaction.removeEmoji();
 		} );
 		} );
 	}, error => {
 	}, error => {
@@ -272,7 +273,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 		var groupnames = [];
 		var groupnames = [];
 		groupnames.push(...groups);
 		groupnames.push(...groups);
 		groupnames.push(...globalgroups);
 		groupnames.push(...globalgroups);
-		got.get( wiki + 'api.php?action=query&meta=allmessages&amenableparser=true&amincludelocal=true&amargs=' + encodeURIComponent( username ) + '&amlang=' + lang.lang + '&ammessages=' + groupnames.map( group => `group-${group}|group-${group}-member` ).join('|') + '&format=json' ).then( gresponse => {
+		got.get( wiki + 'api.php?action=query&meta=allmessages&amenableparser=true&amincludelocal=true&amargs=' + encodeURIComponent( username ) + '&amlang=' + querypage.uselang + '&ammessages=' + groupnames.map( group => `group-${group}|group-${group}-member` ).join('|') + '&format=json' ).then( gresponse => {
 			var gbody = gresponse.body;
 			var gbody = gresponse.body;
 			if ( gbody && gbody.warnings ) log_warn(gbody.warnings);
 			if ( gbody && gbody.warnings ) log_warn(gbody.warnings);
 			if ( gresponse.statusCode !== 200 || !gbody || gbody.batchcomplete === undefined || !gbody?.query?.allmessages?.length ) {
 			if ( gresponse.statusCode !== 200 || !gbody || gbody.batchcomplete === undefined || !gbody?.query?.allmessages?.length ) {
@@ -341,6 +342,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 			if ( msg.showEmbed() ) {
 			if ( msg.showEmbed() ) {
 				var text = '<' + pagelink + '>';
 				var text = '<' + pagelink + '>';
 				var embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( username.escapeFormatting() ).setURL( pagelink ).addField( editcount[0], '[' + editcount[1] + '](' + wiki.toLink(contribs + username, '', '', true) + ')', true );
 				var embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( username.escapeFormatting() ).setURL( pagelink ).addField( editcount[0], '[' + editcount[1] + '](' + wiki.toLink(contribs + username, '', '', true) + ')', true );
+				embed.forceTitle = true;
 				if ( wiki.hasCentralAuth() ) {
 				if ( wiki.hasCentralAuth() ) {
 					embed.addField( lang.get('user.info.globaleditcount'), '[' + body.query.globaluserinfo.editcount.toLocaleString(lang.get('dateformat')) + '](' + wiki.toLink('Special:CentralAuth/' + username, '', '', true) + ')', true ).addField( lang.get('user.info.wikisedited'), '[' + body.query.globaluserinfo.merged.filter( mergedWiki => mergedWiki.editcount ).length.toLocaleString(lang.get('dateformat')) + '](' + wiki.toLink('Special:CentralAuth/' + username, '', '', true) + ')', true );
 					embed.addField( lang.get('user.info.globaleditcount'), '[' + body.query.globaluserinfo.editcount.toLocaleString(lang.get('dateformat')) + '](' + wiki.toLink('Special:CentralAuth/' + username, '', '', true) + ')', true ).addField( lang.get('user.info.wikisedited'), '[' + body.query.globaluserinfo.merged.filter( mergedWiki => mergedWiki.editcount ).length.toLocaleString(lang.get('dateformat')) + '](' + wiki.toLink('Special:CentralAuth/' + username, '', '', true) + ')', true );
 				}
 				}
@@ -358,11 +360,11 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 				if ( querypage.pageprops && querypage.pageprops.description ) {
 				if ( querypage.pageprops && querypage.pageprops.description ) {
 					var description = htmlToDiscord( querypage.pageprops.description );
 					var description = htmlToDiscord( querypage.pageprops.description );
 					if ( description.length > 1000 ) description = description.substring(0, 1000) + '\u2026';
 					if ( description.length > 1000 ) description = description.substring(0, 1000) + '\u2026';
-					embed.setDescription( description );
+					embed.backupDescription = description;
 				}
 				}
 				else if ( querypage.extract ) {
 				else if ( querypage.extract ) {
 					var extract = extract_desc(querypage.extract);
 					var extract = extract_desc(querypage.extract);
-					embed.setDescription( extract[0] );
+					embed.backupDescription = extract[0];
 				}
 				}
 			}
 			}
 			else {
 			else {
@@ -399,7 +401,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 					if ( pbody.userData.bio && !embed.description ) {
 					if ( pbody.userData.bio && !embed.description ) {
 						let bio = pbody.userData.bio.escapeFormatting();
 						let bio = pbody.userData.bio.escapeFormatting();
 						if ( bio.length > 1000 ) bio = bio.substring(0, 1000) + '\u2026';
 						if ( bio.length > 1000 ) bio = bio.substring(0, 1000) + '\u2026';
-						embed.setDescription( bio );
+						embed.backupDescription = bio;
 					}
 					}
 				}
 				}
 				else {
 				else {
@@ -485,11 +487,9 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 					if ( msg.showEmbed() ) embed.addField( '\u200b', '<a:loading:641343250661113886> **' + lang.get('user.info.loading') + '**' );
 					if ( msg.showEmbed() ) embed.addField( '\u200b', '<a:loading:641343250661113886> **' + lang.get('user.info.loading') + '**' );
 					else text += '\n\n<a:loading:641343250661113886> **' + lang.get('user.info.loading') + '**';
 					else text += '\n\n<a:loading:641343250661113886> **' + lang.get('user.info.loading') + '**';
 					
 					
-					msg.sendChannel( spoiler + text + spoiler, {embed} ).then( message => global_block(lang, message, username, text, embed, wiki, spoiler, queryuser.gender) );
+					parse_page(lang, msg, spoiler + text + spoiler, embed, wiki, reaction, querypage).then( message => global_block(lang, message, username, text, embed, wiki, spoiler, queryuser.gender) );
 				}
 				}
-				else msg.sendChannel( spoiler + text + spoiler, {embed} );
-				
-				if ( reaction ) reaction.removeEmoji();
+				else parse_page(lang, msg, spoiler + text + spoiler, embed, wiki, reaction, querypage);
 			} );
 			} );
 			if ( body.query.pages ) {
 			if ( body.query.pages ) {
 				let revision = Object.values(body.query.pages)[0]?.revisions?.[0];
 				let revision = Object.values(body.query.pages)[0]?.revisions?.[0];
@@ -523,9 +523,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 				else text += '\n\n**' + lang.get('user.gblock.header', username, gender).escapeFormatting() + '**';
 				else text += '\n\n**' + lang.get('user.gblock.header', username, gender).escapeFormatting() + '**';
 			}
 			}
 			
 			
-			msg.sendChannel( spoiler + text + spoiler, {embed} );
-			
-			if ( reaction ) reaction.removeEmoji();
+			parse_page(lang, msg, spoiler + text + spoiler, embed, wiki, reaction, querypage);
 		} );
 		} );
 	}, error => {
 	}, error => {
 		console.log( '- Error while getting the search results: ' + error );
 		console.log( '- Error while getting the search results: ' + error );

+ 17 - 15
functions/parse_page.js

@@ -83,17 +83,17 @@ const removeClassesExceptions = [
  * @param {String} [querypage.pageprops.disambiguation] - The disambiguation property of the page.
  * @param {String} [querypage.pageprops.disambiguation] - The disambiguation property of the page.
  * @param {String} [querypage.pageprops.uselang] - The language of the page description.
  * @param {String} [querypage.pageprops.uselang] - The language of the page description.
  * @param {Boolean} [querypage.pageprops.noRedirect] - If the page is allowed to be redirected.
  * @param {Boolean} [querypage.pageprops.noRedirect] - If the page is allowed to be redirected.
- * @param {String} thumbnail - The default thumbnail for the wiki.
+ * @param {String} [thumbnail] - The default thumbnail for the wiki.
  * @param {String} [fragment] - The section title to embed.
  * @param {String} [fragment] - The section title to embed.
  * @param {String} [pagelink] - The link to the page.
  * @param {String} [pagelink] - The link to the page.
+ * @returns {Promise<import('discord.js').Message>} The edited message.
  */
  */
-function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmodel, pageprops: {infoboxes, disambiguation} = {}, uselang = lang.lang, noRedirect = false}, thumbnail, fragment = '', pagelink = '') {
+function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmodel, pageprops: {infoboxes, disambiguation} = {}, uselang = lang.lang, noRedirect = false}, thumbnail = '', fragment = '', pagelink = '') {
 	if ( reaction ) reaction.removeEmoji();
 	if ( reaction ) reaction.removeEmoji();
-	if ( !msg?.showEmbed?.() ) {
-		msg.sendChannel( content, {embed} );
-		return;
+	if ( !msg?.showEmbed?.() || embed.description ) {
+		return msg.sendChannel( content, {embed} );
 	}
 	}
-	msg.sendChannel( content, {
+	return msg.sendChannel( content, {
 		embed: new MessageEmbed(embed).setDescription( '<a:loading:641343250661113886> **' + lang.get('search.loading') + '**' )
 		embed: new MessageEmbed(embed).setDescription( '<a:loading:641343250661113886> **' + lang.get('search.loading') + '**' )
 	} ).then( message => {
 	} ).then( message => {
 		if ( !message ) return;
 		if ( !message ) return;
@@ -112,7 +112,7 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 				if ( embed.backupDescription && embed.length < 5000 ) {
 				if ( embed.backupDescription && embed.length < 5000 ) {
 					embed.setDescription( embed.backupDescription );
 					embed.setDescription( embed.backupDescription );
 				}
 				}
-				return;
+				return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
 			}
 			}
 			if ( !embed.description && embed.length < 4000 ) {
 			if ( !embed.description && embed.length < 4000 ) {
 				var description = revision['*'];
 				var description = revision['*'];
@@ -138,6 +138,7 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 					embed.setDescription( embed.backupDescription );
 					embed.setDescription( embed.backupDescription );
 				}
 				}
 			}
 			}
+			return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
 		}, error => {
 		}, error => {
 			console.log( '- Error while getting the page content: ' + error );
 			console.log( '- Error while getting the page content: ' + error );
 			if ( embed.backupField && embed.length < 4750 && embed.fields.length < 25 ) {
 			if ( embed.backupField && embed.length < 4750 && embed.fields.length < 25 ) {
@@ -146,8 +147,7 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 			if ( embed.backupDescription && embed.length < 5000 ) {
 			if ( embed.backupDescription && embed.length < 5000 ) {
 				embed.setDescription( embed.backupDescription );
 				embed.setDescription( embed.backupDescription );
 			}
 			}
-		} ).finally( () => {
-			message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
+			return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
 		} );
 		} );
 		if ( !fragment && !embed.fields.length && infoboxes ) {
 		if ( !fragment && !embed.fields.length && infoboxes ) {
 			try {
 			try {
@@ -169,11 +169,13 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 				if ( embed.backupField && embed.length < 4750 && embed.fields.length < 25 ) {
 				if ( embed.backupField && embed.length < 4750 && embed.fields.length < 25 ) {
 					embed.spliceFields( 0, 0, embed.backupField );
 					embed.spliceFields( 0, 0, embed.backupField );
 				}
 				}
-				return;
+				return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
+			}
+			if ( !embed.forceTitle ) {
+				var displaytitle = htmlToDiscord( response.body.parse.displaytitle );
+				if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026';
+				embed.setTitle( displaytitle );
 			}
 			}
-			var displaytitle = htmlToDiscord( response.body.parse.displaytitle );
-			if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026';
-			embed.setTitle( displaytitle );
 			var $ = cheerio.load(response.body.parse.text['*'].replace( /\n?<br(?: ?\/)?>\n?/g, '<br>' ));
 			var $ = cheerio.load(response.body.parse.text['*'].replace( /\n?<br(?: ?\/)?>\n?/g, '<br>' ));
 			if ( embed.brokenInfobox && $('aside.portable-infobox').length ) {
 			if ( embed.brokenInfobox && $('aside.portable-infobox').length ) {
 				let infobox = $('aside.portable-infobox');
 				let infobox = $('aside.portable-infobox');
@@ -358,6 +360,7 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 					embed.setDescription( embed.backupDescription );
 					embed.setDescription( embed.backupDescription );
 				}
 				}
 			}
 			}
+			return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
 		}, error => {
 		}, error => {
 			console.log( '- Error while parsing the page: ' + error );
 			console.log( '- Error while parsing the page: ' + error );
 			if ( embed.backupDescription && embed.length < 5000 ) {
 			if ( embed.backupDescription && embed.length < 5000 ) {
@@ -366,8 +369,7 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 			if ( embed.backupField && embed.length < 4750 && embed.fields.length < 25 ) {
 			if ( embed.backupField && embed.length < 4750 && embed.fields.length < 25 ) {
 				embed.spliceFields( 0, 0, embed.backupField );
 				embed.spliceFields( 0, 0, embed.backupField );
 			}
 			}
-		} ).finally( () => {
-			message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
+			return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
 		} );
 		} );
 	} );
 	} );
 }
 }