| 
					
				 | 
			
			
				@@ -916,7 +916,7 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = ' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	else if ( aliasInvoke === 'diff' && args.join('') && !querystring && !fragment ) gamepedia_diff(lang, msg, args, wiki, reaction, spoiler); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var noRedirect = ( /(?:^|&)redirect=no(?:&|$)/.test(querystring) || /(?:^|&)action=(?!view(?:&|$))/.test(querystring) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general|namespaces|specialpagealiases&iwurl=true' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=pageimages|categoryinfo|pageprops|extracts&piprop=original|name&ppprop=description|displaytitle&exsentences=10&exintro=true&explaintext=true&titles=' + encodeURIComponent( title ) + '&format=json', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general|namespaces|specialpagealiases&iwurl=true' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=pageimages|categoryinfo|pageprops|extracts&piprop=original|name&ppprop=description|displaytitle&explaintext=true&exsectionformat=raw&exlimit=1&titles=' + encodeURIComponent( title ) + '&format=json', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			responseType: 'json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} ).then( response => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			var body = response.body; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -999,7 +999,7 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = ' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					else if ( ( querypage.missing !== undefined && querypage.known === undefined && !( noRedirect || querypage.categoryinfo ) ) || querypage.invalid !== undefined ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						got.get( wiki + 'api.php?action=query&prop=pageimages|categoryinfo|pageprops|extracts&piprop=original|name&ppprop=description|displaytitle&exsentences=10&exintro=true&explaintext=true&generator=search&gsrnamespace=4|12|14|' + Object.values(body.query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&gsrlimit=1&gsrsearch=' + encodeURIComponent( title ) + '&format=json', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						got.get( wiki + 'api.php?action=query&prop=pageimages|categoryinfo|pageprops|extracts&piprop=original|name&ppprop=description|displaytitle&explaintext=true&exsectionformat=raw&exlimit=1&generator=search&gsrnamespace=4|12|14|' + Object.values(body.query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&gsrlimit=1&gsrsearch=' + encodeURIComponent( title ) + '&format=json', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							responseType: 'json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} ).then( srresponse => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							var srbody = srresponse.body; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1022,16 +1022,16 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = ' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 										if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 										embed.setTitle( displaytitle ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 									} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										var extract = extract_desc(querypage.extract, fragment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										embed.setDescription( extract[0] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										if ( extract[2].length ) embed.addField( extract[1], extract[2] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 									if ( querypage.pageprops && querypage.pageprops.description ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 										var description = htmlToPlain( querypage.pageprops.description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 										if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 										embed.setDescription( description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 									} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									else if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										var extract = querypage.extract.escapeFormatting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										if ( extract.length > 2000 ) extract = extract.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										embed.setDescription( extract ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 									if ( querypage.pageimage && querypage.original && querypage.title !== body.query.general.mainpage ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 										var pageimage = querypage.original.source; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 										if ( querypage.ns === 6 ) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1098,16 +1098,16 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = ' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							embed.setTitle( displaytitle ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							var extract = extract_desc(querypage.extract, ( fragment || ( body.query.redirects && body.query.redirects[0].tofragment ) || '' )); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							embed.setDescription( extract[0] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if ( extract[2].length ) embed.addField( extract[1], extract[2] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						if ( querypage.pageprops && querypage.pageprops.description ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							var description = htmlToPlain( querypage.pageprops.description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							embed.setDescription( description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						else if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							var extract = querypage.extract.escapeFormatting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if ( extract.length > 2000 ) extract = extract.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							embed.setDescription( extract ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						if ( querypage.pageimage && querypage.original && querypage.title !== body.query.general.mainpage ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							var pageimage = querypage.original.source; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( querypage.ns === 6 ) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1202,7 +1202,7 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = ' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					var pagelink = wiki.toLink(body.query.general.mainpage, querystring.toTitle(), fragment, body.query.general); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					var embed = new Discord.MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( body.query.general.mainpage.escapeFormatting() ).setURL( pagelink ).setThumbnail( ( body.query.general.logo.startsWith( '//' ) ? 'https:' : '' ) + body.query.general.logo ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					got.get( wiki + 'api.php?action=query' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=pageprops|extracts&ppprop=description|displaytitle&exsentences=10&exintro=true&explaintext=true&titles=' + encodeURIComponent( body.query.general.mainpage ) + '&format=json', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					got.get( wiki + 'api.php?action=query' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=pageprops|extracts&ppprop=description|displaytitle&explaintext=true&exsectionformat=raw&exlimit=1&titles=' + encodeURIComponent( body.query.general.mainpage ) + '&format=json', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						responseType: 'json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} ).then( mpresponse => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						var mpbody = mpresponse.body; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1216,16 +1216,16 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = ' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								embed.setTitle( displaytitle ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								var extract = extract_desc(querypage.extract, fragment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								embed.setDescription( extract[0] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								if ( extract[2].length ) embed.addField( extract[1], extract[2] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( querypage.pageprops && querypage.pageprops.description ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								var description = htmlToPlain( querypage.pageprops.description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								embed.setDescription( description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							else if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								var extract = querypage.extract.escapeFormatting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								if ( extract.length > 2000 ) extract = extract.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								embed.setDescription( extract ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}, error => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						console.log( '- Error while getting the main page: ' + error ); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2539,8 +2539,8 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} ).then( response => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			var body = response.body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if ( body && body.warnings ) log_warn(body.warnings); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if ( response.statusCode !== 200 || !body || body.batchcomplete === undefined || !body.query || !body.query.blocks ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( body && body.error && ( body.error.code === 'param_ip' || body.error.code === 'cidrtoobroad' ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ( response.statusCode !== 200 || !body || body.batchcomplete === undefined || !body.query || !body.query.blocks || fragment ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( body && body.error && ( body.error.code === 'param_ip' || body.error.code === 'cidrtoobroad' ) || fragment ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if ( querypage.missing !== undefined || querypage.ns === -1 ) msg.reactEmoji('error'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						var pagelink = wiki.toLink(querypage.title, querystring.toTitle(), fragment); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2550,16 +2550,16 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							embed.setTitle( displaytitle ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							var extract = extract_desc(querypage.extract, fragment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							embed.setDescription( extract[0] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if ( extract[2].length ) embed.addField( extract[1], extract[2] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						if ( querypage.pageprops && querypage.pageprops.description ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							var description = htmlToPlain( querypage.pageprops.description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							embed.setDescription( description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						else if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							var extract = querypage.extract.escapeFormatting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if ( extract.length > 2000 ) extract = extract.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							embed.setDescription( extract ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						if ( querypage.pageimage && querypage.original ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							var pageimage = querypage.original.source; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							embed.setThumbnail( pageimage ); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2637,6 +2637,15 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						if ( msg.showEmbed() ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							var text = '<' + pagelink + '>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							var embed = new Discord.MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( username ).setURL( pagelink ).addField( editcount[0], '[' + editcount[1] + '](' + wiki.toLink(contribs + username, '', '', body.query.general, true) + ')' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if ( querypage.pageprops && querypage.pageprops.description ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								var description = htmlToPlain( querypage.pageprops.description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								embed.setDescription( description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							else if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								var extract = extract_desc(querypage.extract); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								embed.setDescription( extract[0] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( blocks.length ) blocks.forEach( block => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								block.text = block.text.replaceSave( '%3$s', '[' + block.by.escapeFormatting() + '](' + wiki.toLink('User:' + block.by, '', '', body.query.general, true) + ')' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								if ( block.reason ) block.text = block.text.replaceSave( '%4$s', block.reason.toMarkdown(wiki, body.query.general) ); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2685,7 +2694,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				var queryuser = body.query.users[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( queryuser.missing !== undefined || queryuser.invalid !== undefined ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( queryuser.missing !== undefined || queryuser.invalid !== undefined || fragment ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if ( querypage.missing !== undefined || querypage.ns === -1 ) msg.reactEmoji('🤷'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						var pagelink = wiki.toLink(querypage.title, querystring.toTitle(), fragment, body.query.general); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2695,16 +2704,16 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							embed.setTitle( displaytitle ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							var extract = extract_desc(querypage.extract, fragment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							embed.setDescription( extract[0] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if ( extract[2].length ) embed.addField( extract[1], extract[2] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						if ( querypage.pageprops && querypage.pageprops.description ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							var description = htmlToPlain( querypage.pageprops.description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							embed.setDescription( description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						else if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							var extract = querypage.extract.escapeFormatting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if ( extract.length > 2000 ) extract = extract.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							embed.setDescription( extract ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						if ( querypage.pageimage && querypage.original ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							var pageimage = querypage.original.source; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							embed.setThumbnail( pageimage ); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2775,9 +2784,8 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							embed.setDescription( description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						else if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							var extract = querypage.extract.escapeFormatting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if ( extract.length > 2000 ) extract = extract.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							embed.setDescription( extract ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							var extract = extract_desc(querypage.extract); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							embed.setDescription( extract[0] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					else { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4588,7 +4596,7 @@ function fandom_diffsend(lang, msg, args, wiki, reaction, spoiler, compare) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function gamepedia_random(lang, msg, wiki, reaction, spoiler) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&prop=pageimages|pageprops|extracts&piprop=original|name&ppprop=description|displaytitle&exsentences=10&exintro=true&explaintext=true&generator=random&grnnamespace=0&format=json', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&prop=pageimages|pageprops|extracts&piprop=original|name&ppprop=description|displaytitle&explaintext=true&exsectionformat=raw&exlimit=1&generator=random&grnnamespace=0&format=json', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		responseType: 'json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} ).then( response => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var body = response.body; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4618,9 +4626,8 @@ function gamepedia_random(lang, msg, wiki, reaction, spoiler) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				embed.setDescription( description ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			else if ( querypage.extract ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				var extract = querypage.extract.escapeFormatting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( extract.length > 2000 ) extract = extract.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				embed.setDescription( extract ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var extract = extract_desc(querypage.extract); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				embed.setDescription( extract[0] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if ( querypage.pageimage && querypage.original && querypage.title !== body.query.general.mainpage ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				embed.setThumbnail( querypage.original.source ); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -5664,6 +5671,70 @@ function discussion_formatting(jsonModel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return description; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function extract_desc(text = '', fragment = '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var sectionIndex = text.indexOf('\ufffd\ufffd'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var extract = ( sectionIndex !== -1 ? text.substring(0, sectionIndex) : text ).trim().escapeFormatting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if ( extract.length > 2000 ) extract = extract.substring(0, 2000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var section = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var regex = /\ufffd{2}(\d)\ufffd{2}([^\n]+)/g; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var sectionHeader = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var sectionText = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	while ( fragment && ( section = regex.exec(text) ) !== null ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ( section[2].replace( / /g, '_' ) !== fragment.replace( / /g, '_' ) ) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		sectionHeader = section[2].escapeFormatting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ( sectionHeader.length > 240 ) sectionHeader = sectionHeader.substring(0, 240) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		sectionHeader = section_formatting(sectionHeader, section[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		sectionText = text.substring(regex.lastIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		switch ( section[1] ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case '6': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sectionIndex = sectionText.indexOf('\ufffd\ufffd6\ufffd\ufffd'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( sectionIndex !== -1 ) sectionText = sectionText.substring(0, sectionIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case '5': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sectionIndex = sectionText.indexOf('\ufffd\ufffd5\ufffd\ufffd'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( sectionIndex !== -1 ) sectionText = sectionText.substring(0, sectionIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case '4': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sectionIndex = sectionText.indexOf('\ufffd\ufffd4\ufffd\ufffd'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( sectionIndex !== -1 ) sectionText = sectionText.substring(0, sectionIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case '3': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sectionIndex = sectionText.indexOf('\ufffd\ufffd3\ufffd\ufffd'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( sectionIndex !== -1 ) sectionText = sectionText.substring(0, sectionIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case '2': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sectionIndex = sectionText.indexOf('\ufffd\ufffd2\ufffd\ufffd'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( sectionIndex !== -1 ) sectionText = sectionText.substring(0, sectionIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case '1': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sectionIndex = sectionText.indexOf('\ufffd\ufffd1\ufffd\ufffd'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( sectionIndex !== -1 ) sectionText = sectionText.substring(0, sectionIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		sectionText = sectionText.trim().escapeFormatting().replace( /\ufffd{2}(\d)\ufffd{2}([^\n]+)/g, (match, n, sectionTitle) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return section_formatting(sectionTitle, n); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ( sectionText.length > 1000 ) sectionText = sectionText.substring(0, 1000) + '\u2026'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return [extract, sectionHeader, sectionText]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function section_formatting(title, n) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch ( n ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case '1': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			title = '***__' + title + '__***'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case '2': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			title = '**__' + title + '__**'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case '3': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			title = '**' + title + '**'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case '4': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			title = '__' + title + '__'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case '5': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			title = '*' + title + '*'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return title; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function htmlToPlain(html) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var text = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var parser = new htmlparser.Parser( { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -5790,12 +5861,14 @@ String.prototype.toFormatting = function(showEmbed = false, ...args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 String.prototype.toMarkdown = function(wiki, path, title = '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var text = this.replace( /[\(\)\\]/g, '\\$&' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var link = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	while ( ( link = /\[\[(?:([^\|\]]+)\|)?([^\]]+)\]\]([a-z]*)/g.exec(text) ) !== null ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var regex = /\[\[(?:([^\|\]]+)\|)?([^\]]+)\]\]([a-z]*)/g; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	while ( ( link = regex.exec(text) ) !== null ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var pagetitle = ( link[1] || link[2] ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var page = wiki.toLink(( /^[#\/]/.test(pagetitle) ? title + ( pagetitle.startsWith( '/' ) ? pagetitle : '' ) : pagetitle ), '', ( pagetitle.startsWith( '#' ) ? pagetitle.substring(1) : '' ), path, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		text = text.replaceSave( link[0], '[' + link[2] + link[3] + '](' + page + ')' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	while ( title !== '' && ( link = /\/\*\s*([^\*]+?)\s*\*\/\s*(.)?/g.exec(text) ) !== null ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	regex = /\/\*\s*([^\*]+?)\s*\*\/\s*(.)?/g; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	while ( title !== '' && ( link = regex.exec(text) ) !== null ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		text = text.replaceSave( link[0], '[→' + link[1] + '](' + wiki.toLink(title, '', link[1], path, true) + ')' + ( link[2] ? ': ' + link[2] : '' ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return text.escapeFormatting(true); 
			 |