Browse Source

default requests to json

Markus-Rost 4 years ago
parent
commit
74f593e97c

+ 2 - 1
bot.js

@@ -13,7 +13,8 @@ global.got = require('got').extend( {
 	timeout: 5000,
 	headers: {
 		'User-Agent': 'Wiki-Bot/' + ( isDebug ? 'testing' : process.env.npm_package_version ) + ' (Discord; ' + process.env.npm_package_name + ')'
-	}
+	},
+	responseType: 'json'
 } );
 
 const {defaultSettings, wikiProjects} = require('./util/default.json');

+ 2 - 6
cmds/minecraft/bug.js

@@ -18,9 +18,7 @@ function minecraft_bug(lang, msg, args, title, cmd, querystring, fragment, react
 	if ( invoke && /\d+$/.test(invoke) && !args.length ) {
 		if ( /^\d+$/.test(invoke) ) invoke = 'MC-' + invoke;
 		var link = 'https://bugs.mojang.com/browse/';
-		got.get( 'https://bugs.mojang.com/rest/api/2/issue/' + encodeURIComponent( invoke ) + '?fields=summary,issuelinks,fixVersions,resolution,status', {
-			responseType: 'json'
-		} ).then( response => {
+		got.get( 'https://bugs.mojang.com/rest/api/2/issue/' + encodeURIComponent( invoke ) + '?fields=summary,issuelinks,fixVersions,resolution,status' ).then( response => {
 			var body = response.body;
 			if ( response.statusCode !== 200 || !body || body['status-code'] === 404 || body.errorMessages || body.errors ) {
 				if ( body && body.errorMessages ) {
@@ -78,9 +76,7 @@ function minecraft_bug(lang, msg, args, title, cmd, querystring, fragment, react
 	else if ( invoke && invoke.toLowerCase() === 'version' && args.length && args.join(' ').length < 100 ) {
 		var jql = 'fixVersion="' + args.join(' ').replace( /(["\\])/g, '\\$1' ).toSearch() + '"+order+by+key';
 		var link = 'https://bugs.mojang.com/issues/?jql=' + jql;
-		got.get( 'https://bugs.mojang.com/rest/api/2/search?fields=summary,resolution,status&jql=' + jql + '&maxResults=25', {
-			responseType: 'json'
-		} ).then( response => {
+		got.get( 'https://bugs.mojang.com/rest/api/2/search?fields=summary,resolution,status&jql=' + jql + '&maxResults=25' ).then( response => {
 			var body = response.body;
 			if ( response.statusCode !== 200 || !body || body['status-code'] === 404 || body.errorMessages || body.errors ) {
 				if ( body && body.errorMessages ) {

+ 11 - 24
cmds/rcscript.js

@@ -62,9 +62,7 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 				wikinew = input_to_wiki(wikinew.replace( /^(?:https?:)?\/\//, 'https://' ));
 				if ( !wikinew ) return msg.replyMsg( wikiinvalid, {}, true );
 			}
-			return msg.reactEmoji('⏳', true).then( reaction => got.get( wikinew + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-RcGcDw|recentchanges&amenableparser=true&siprop=general|extensions&titles=Special:RecentChanges&format=json', {
-				responseType: 'json'
-			} ).then( response => {
+			return msg.reactEmoji('⏳', true).then( reaction => got.get( wikinew + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-RcGcDw|recentchanges&amenableparser=true&siprop=general|extensions&titles=Special:RecentChanges&format=json' ).then( response => {
 				var body = response.body;
 				if ( response.statusCode !== 200 || !body?.query?.allmessages || !body?.query?.general || !body?.query?.extensions || !body?.query?.pages?.['-1'] ) {
 					console.log( '- ' + response.statusCode + ': Error while testing the wiki: ' + body?.error?.info );
@@ -94,20 +92,17 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 						if ( reaction ) reaction.removeEmoji();
 						return msg.replyMsg( ( row.reason ? lang.get('rcscript.blocked_reason', row.reason) : lang.get('rcscript.blocked') ), {}, true );
 					}
-					if ( wikinew.isFandom() ) return got.get( 'https://community.fandom.com/api/v1/Wikis/ByString?includeDomain=true&limit=10&string=' + body.query.general.servername + body.query.general.scriptpath + '&format=json', {
-						responseType: 'json'
-					} ).then( wiresponse => {
+					if ( wikinew.isFandom() ) return got.get( 'https://community.fandom.com/api/v1/Wikis/ByString?includeDomain=true&limit=10&string=' + body.query.general.servername + body.query.general.scriptpath + '&format=json&cache=' + Date.now() ).then( wiresponse => {
 						var wibody = wiresponse.body;
 						if ( wiresponse.statusCode !== 200 || !wibody || wibody.exception || !wibody.items || !wibody.items.length ) {
 							console.log( '- ' + wiresponse.statusCode + ': Error while getting the wiki id: ' + wibody?.exception?.details );
 							return createWebhook();
 						}
 						var site = wibody.items.find( site => site.domain === body.query.general.servername + body.query.general.scriptpath );
-						if ( site ) return got.get( 'https://services.fandom.com/discussion/' + site.id + '/posts?limit=1&format=json', {
+						if ( site ) return got.get( 'https://services.fandom.com/discussion/' + site.id + '/posts?limit=1&format=json&cache=' + Date.now(), {
 							headers: {
 								Accept: 'application/hal+json'
-							},
-							responseType: 'json'
+							}
 						} ).then( dsresponse => {
 							var dsbody = dsresponse.body;
 							if ( dsresponse.statusCode !== 200 || !dsbody || dsbody.title ) {
@@ -226,9 +221,7 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 				var wikiinvalid = lang.get('settings.wikiinvalid') + '\n`' + cmd + ' wiki ' + lang.get('rcscript.new_wiki') + '`\n' + lang.get('rcscript.help_wiki');
 				var wikinew = input_to_wiki(args[1].replace( /^(?:https?:)?\/\//, 'https://' ));
 				if ( !wikinew ) return msg.replyMsg( wikiinvalid, {}, true );
-				return msg.reactEmoji('⏳', true).then( reaction => got.get( wikinew + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-RcGcDw&amenableparser=true&siprop=general|extensions&titles=Special:RecentChanges&format=json', {
-					responseType: 'json'
-				} ).then( response => {
+				return msg.reactEmoji('⏳', true).then( reaction => got.get( wikinew + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-RcGcDw&amenableparser=true&siprop=general|extensions&titles=Special:RecentChanges&format=json' ).then( response => {
 					var body = response.body;
 					if ( response.statusCode !== 200 || !body?.query?.allmessages || !body?.query?.general || !body?.query?.extensions || !body?.query?.pages?.['-1'] ) {
 						console.log( '- ' + response.statusCode + ': Error while testing the wiki: ' + body?.error?.info );
@@ -258,20 +251,17 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 							if ( reaction ) reaction.removeEmoji();
 							return msg.replyMsg( ( row.reason ? lang.get('rcscript.blocked_reason', row.reason) : lang.get('rcscript.blocked') ), {}, true );
 						}
-						if ( wikinew.isFandom() ) return got.get( 'https://community.fandom.com/api/v1/Wikis/ByString?includeDomain=true&limit=10&string=' + body.query.general.servername + body.query.general.scriptpath + '&format=json', {
-							responseType: 'json'
-						} ).then( wiresponse => {
+						if ( wikinew.isFandom() ) return got.get( 'https://community.fandom.com/api/v1/Wikis/ByString?includeDomain=true&limit=10&string=' + body.query.general.servername + body.query.general.scriptpath + '&format=json&cache=' + Date.now() ).then( wiresponse => {
 							var wibody = wiresponse.body;
 							if ( wiresponse.statusCode !== 200 || !wibody || wibody.exception || !wibody.items || !wibody.items.length ) {
 								console.log( '- ' + wiresponse.statusCode + ': Error while getting the wiki id: ' + wibody?.exception?.details );
 								return updateWiki();
 							}
 							var site = wibody.items.find( site => site.domain === body.query.general.servername + body.query.general.scriptpath );
-							if ( site ) return got.get( 'https://services.fandom.com/discussion/' + site.id + '/posts?limit=1&format=json', {
+							if ( site ) return got.get( 'https://services.fandom.com/discussion/' + site.id + '/posts?limit=1&format=json&cache=' + Date.now(), {
 								headers: {
 									Accept: 'application/hal+json'
-								},
-								responseType: 'json'
+								}
 							} ).then( dsresponse => {
 								var dsbody = dsresponse.body;
 								if ( dsresponse.statusCode !== 200 || !dsbody || dsbody.title ) {
@@ -414,9 +404,7 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 				}
 
 				let scriptPath = selected_row.wiki.replace( /^https:\/\/(.*)\/$/, '$1' );
-				return msg.reactEmoji('⏳', true).then( reaction => got.get( 'https://community.fandom.com/api/v1/Wikis/ByString?includeDomain=true&limit=10&string=' + scriptPath + '&format=json', {
-					responseType: 'json'
-				} ).then( wiresponse => {
+				return msg.reactEmoji('⏳', true).then( reaction => got.get( 'https://community.fandom.com/api/v1/Wikis/ByString?includeDomain=true&limit=10&string=' + scriptPath + '&format=json&cache=' + Date.now() ).then( wiresponse => {
 					var wibody = wiresponse.body;
 					if ( wiresponse.statusCode !== 200 || !wibody || wibody.exception || !wibody.items || !wibody.items.length ) {
 						console.log( '- ' + wiresponse.statusCode + ': Error while getting the wiki id: ' + wibody?.exception?.details );
@@ -424,11 +412,10 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 						return msg.replyMsg( lang.get('rcscript.no_feeds'), {}, true );
 					}
 					var site = wibody.items.find( site => site.domain === scriptPath );
-					if ( site ) return got.get( 'https://services.fandom.com/discussion/' + site.id + '/posts?limit=1&format=json', {
+					if ( site ) return got.get( 'https://services.fandom.com/discussion/' + site.id + '/posts?limit=1&format=json&cache=' + Date.now(), {
 						headers: {
 							Accept: 'application/hal+json'
-						},
-						responseType: 'json'
+						}
 					} ).then( dsresponse => {
 						var dsbody = dsresponse.body;
 						if ( dsresponse.statusCode !== 200 || !dsbody || dsbody.title ) {

+ 1 - 3
cmds/settings.js

@@ -95,9 +95,7 @@ function cmd_settings(lang, msg, args, line, wiki) {
 				if ( site ) wikinew = 'https://' + ( site.wiki_crossover || site.wiki_domain ) + '/';
 			}
 			return msg.reactEmoji('⏳', true).then( reaction => {
-				got.get( wikinew + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-GamepediaNotice|custom-FandomMergeNotice&amenableparser=true&siprop=general|extensions&format=json', {
-					responseType: 'json'
-				} ).then( response => {
+				got.get( wikinew + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-GamepediaNotice|custom-FandomMergeNotice&amenableparser=true&siprop=general|extensions&format=json' ).then( response => {
 					var body = response.body;
 					if ( response.statusCode !== 200 || !body?.query?.allmessages || !body?.query?.general || !body?.query?.extensions ) {
 						console.log( '- ' + response.statusCode + ': Error while testing the wiki: ' + body?.error?.info );

+ 1 - 3
cmds/test.js

@@ -35,9 +35,7 @@ function cmd_test(lang, msg, args, line, wiki) {
 			var then = Date.now();
 			var embed = new MessageEmbed().setTitle( lang.get('test.time') ).addField( 'Discord', ( then - now ) + 'ms' );
 			now = Date.now();
-			got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general|extensions&format=json', {
-				responseType: 'json'
-			} ).then( response => {
+			got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general|extensions&format=json' ).then( response => {
 				then = Date.now();
 				var body = response.body;
 				if ( body && body.warnings ) log_warn(body.warnings);

+ 1 - 3
cmds/verification.js

@@ -171,9 +171,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 				}
 				if ( usergroups.length > 10 ) return msg.replyMsg( lang.get('verification.usergroup_max'), {}, true );
 				if ( usergroups.some( usergroup => usergroup.length > 100 ) ) return msg.replyMsg( lang.get('verification.usergroup_too_long'), {}, true );
-				if ( usergroups.length ) return msg.reactEmoji('⏳').then( reaction => got.get( wiki + 'api.php?action=query&meta=allmessages&amprefix=group-&amincludelocal=true&amenableparser=true&format=json', {
-					responseType: 'json'
-				} ).then( response => {
+				if ( usergroups.length ) return msg.reactEmoji('⏳').then( reaction => got.get( wiki + 'api.php?action=query&meta=allmessages&amprefix=group-&amincludelocal=true&amenableparser=true&format=json' ).then( response => {
 					var body = response.body;
 					if ( body && body.warnings ) log_warn(body.warnings);
 					if ( response.statusCode !== 200 || !body || !body.query || !body.query.allmessages ) {

+ 10 - 16
cmds/verify.js

@@ -44,9 +44,7 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 			if ( args[0] === 'verification' ) args[0] = ( lang.localNames.verify || 'verify' );
 			return this.help(lang, msg, args, line);
 		}
-		msg.reactEmoji('⏳').then( reaction => got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=users&usprop=blockinfo|groups|groupmemberships|editcount|registration&ususers=' + encodeURIComponent( username ) + '&format=json', {
-			responseType: 'json'
-		} ).then( response => {
+		msg.reactEmoji('⏳').then( reaction => got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=users&usprop=blockinfo|groups|groupmemberships|editcount|registration&ususers=' + encodeURIComponent( username ) + '&format=json' ).then( response => {
 			var body = response.body;
 			if ( body && body.warnings ) log_warn(body.warnings);
 			if ( response.statusCode !== 200 || !body || !body.query || !body.query.users ) {
@@ -72,9 +70,7 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 			if ( body.query.users.length !== 1 || queryuser.missing !== undefined || queryuser.invalid !== undefined ) {
 				username = ( body.query.users.length === 1 ? queryuser.name : username );
 				embed.setTitle( ( old_username || username ).escapeFormatting() ).setColor('#0000FF').setDescription( lang.get('verify.user_missing', ( old_username || username ).escapeFormatting()) );
-				if ( ( wiki.isFandom() || wiki.endsWith( '.gamepedia.com/' ) ) && !old_username ) return got.get( 'https://community.fandom.com/api/v1/User/UsersByName?limit=1&query=' + encodeURIComponent( username ) + '&format=json', {
-					responseType: 'json'
-				} ).then( wsresponse => {
+				if ( ( wiki.isFandom() || wiki.endsWith( '.gamepedia.com/' ) ) && !old_username ) return got.get( 'https://community.fandom.com/api/v1/User/UsersByName?limit=1&query=' + encodeURIComponent( username ) + '&format=json' ).then( wsresponse => {
 					var wsbody = wsresponse.body;
 					if ( wsresponse.statusCode !== 200 || wsbody?.exception || wsbody?.users?.[0]?.name?.length !== username.length ) {
 						if ( !wsbody?.users ) console.log( '- ' + wsresponse.statusCode + ': Error while searching the user: ' + wsbody?.exception?.details );
@@ -109,12 +105,14 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 			var comment = [];
 			var url = '';
 			if ( wiki.endsWith( '.gamepedia.com/' ) ) {
-				url = 'https://help.gamepedia.com/Special:GlobalBlockList/' + encodeURIComponent( username ) + '?uselang=qqx';
+				url = 'https://help.gamepedia.com/Special:GlobalBlockList/' + encodeURIComponent( username ) + '?uselang=qqx&cache=' + Date.now();
 			}
 			else if ( wiki.isFandom() ) {
-				url = 'https://community.fandom.com/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1';
+				url = 'https://community.fandom.com/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1&cache=' + Date.now();
 			}
-			if ( url ) return got.get( url ).then( gbresponse => {
+			if ( url ) return got.get( url, {
+				responseType: 'text'
+			} ).then( gbresponse => {
 				if ( gbresponse.statusCode !== 200 || !gbresponse.body ) {
 					console.log( '- ' + gbresponse.statusCode + ': Error while getting the global block.' );
 					comment.push(lang.get('verify.failed_gblock'));
@@ -151,16 +149,14 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 				// async check for editcount on Gamepedia, workaround for https://gitlab.com/hydrawiki/hydra/-/issues/5054
 				if ( wiki.endsWith( '.gamepedia.com/' ) ) {
 					try {
-						let ucresponse = await got.get( wiki + 'api.php?action=query&list=usercontribs&ucprop=&uclimit=500&ucuser=' + encodeURIComponent( username ) + '&format=json', {
-							responseType: 'json'
-						} );
+						let ucresponse = await got.get( wiki + 'api.php?action=query&list=usercontribs&ucprop=&uclimit=500&ucuser=' + encodeURIComponent( username ) + '&format=json' );
 						if ( !ucresponse.body.continue ) queryuser.editcount = ucresponse.body.query.usercontribs.length;
 					} catch ( ucerror ) {
 						console.log( '- Error while working around the edit count: ' + ucerror )
 					}
 				}
 				
-				var options = {responseType: 'json'};
+				var options = {};
 				if ( wiki.endsWith( '.gamepedia.com/' ) ) {
 					url = wiki + 'api.php?action=profile&do=getPublicProfile&user_name=' + encodeURIComponent( username ) + '&format=json&cache=' + Date.now();
 				}
@@ -278,9 +274,7 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 				if ( reaction ) reaction.removeEmoji();
 			} );
 			
-			got.get( wiki + 'api.php?action=query&prop=revisions&rvprop=content|user&rvslots=main&titles=User:' + encodeURIComponent( username ) + '/Discord&format=json', {
-				responseType: 'json'
-			} ).then( mwresponse => {
+			got.get( wiki + 'api.php?action=query&prop=revisions&rvprop=content|user&rvslots=main&titles=User:' + encodeURIComponent( username ) + '/Discord&format=json' ).then( mwresponse => {
 				var mwbody = mwresponse.body;
 				if ( mwbody && mwbody.warnings ) log_warn(mwbody.warnings);
 				if ( mwresponse.statusCode !== 200 || !mwbody || mwbody.batchcomplete === undefined || !mwbody.query || !mwbody.query.pages ) {

+ 17 - 19
cmds/wiki/fandom.js

@@ -61,9 +61,7 @@ function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '',
 	else if ( aliasInvoke === 'diff' && args.join('') && !querystring && !fragment ) fn.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=allmessages|siteinfo&ammessages=description&amenableparser=true&siprop=general|namespaces|specialpagealiases|wikidesc&iwurl=true' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=imageinfo|categoryinfo&titles=' + encodeURIComponent( title.replace( /\|/g, '\ufffd' ) ) + '&format=json', {
-			responseType: 'json'
-		} ).then( response => {
+		got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=description&amenableparser=true&siprop=general|namespaces|specialpagealiases|wikidesc&iwurl=true' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=imageinfo|categoryinfo&titles=' + encodeURIComponent( title.replace( /\|/g, '\ufffd' ) ) + '&format=json' ).then( response => {
 			var body = response.body;
 			if ( body && body.warnings ) log_warn(body.warnings);
 			if ( response.statusCode !== 200 || !body || !body.query ) {
@@ -108,9 +106,7 @@ function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '',
 					}
 					else if ( querypage.ns === -1 && querypage.title.startsWith( contribs ) && querypage.title.length > contribs.length ) {
 						var username = querypage.title.split('/').slice(1).join('/');
-						got.get( wiki + 'api.php?action=query&titles=User:' + encodeURIComponent( username ) + '&format=json', {
-							responseType: 'json'
-						} ).then( uresponse => {
+						got.get( wiki + 'api.php?action=query&titles=User:' + encodeURIComponent( username ) + '&format=json' ).then( uresponse => {
 							var ubody = uresponse.body;
 							if ( uresponse.statusCode !== 200 || !ubody || !ubody.query ) {
 								console.log( '- ' + uresponse.statusCode + ': Error while getting the user: ' + ( ubody && ubody.error && ubody.error.info ) );
@@ -144,9 +140,7 @@ function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '',
 					}
 					else if ( querypage.ns === 1201 && querypage.missing !== undefined ) {
 						var thread = querypage.title.split(':');
-						got.get( wiki + 'api.php?action=query&prop=revisions&rvprop=user&rvdir=newer&rvlimit=1&pageids=' + thread.slice(1).join(':') + '&format=json', {
-							responseType: 'json'
-						} ).then( thresponse => {
+						got.get( wiki + 'api.php?action=query&prop=revisions&rvprop=user&rvdir=newer&rvlimit=1&pageids=' + thread.slice(1).join(':') + '&format=json' ).then( thresponse => {
 							var thbody = thresponse.body;
 							if ( thresponse.statusCode !== 200 || !thbody || !thbody.query || !thbody.query.pages ) {
 								console.log( '- ' + thresponse.statusCode + ': Error while getting the thread: ' + ( thbody && thbody.error && thbody.error.info ) );
@@ -164,7 +158,9 @@ function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '',
 								else {
 									var pagelink = wiki.toLink(thread.join(':'), querystring.toTitle(), fragment, body.query.general);
 									var embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( thread.join(':').escapeFormatting() ).setURL( pagelink ).setFooter( querypage.revisions[0].user );
-									got.get( wiki.toDescLink(querypage.title) ).then( descresponse => {
+									got.get( wiki.toDescLink(querypage.title), {
+										responseType: 'text'
+									} ).then( descresponse => {
 										var descbody = descresponse.body;
 										if ( descresponse.statusCode !== 200 || !descbody ) {
 											console.log( '- ' + descresponse.statusCode + ': Error while getting the description.' );
@@ -203,9 +199,7 @@ function fandom_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/v1/Search/List?minArticleQuality=0&namespaces=4,12,14,' + Object.values(body.query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join(',') + '&limit=1&query=' + encodeURIComponent( title ) + '&format=json', {
-							responseType: 'json'
-						} ).then( wsresponse => {
+						got.get( wiki + 'api/v1/Search/List?minArticleQuality=0&namespaces=4,12,14,' + Object.values(body.query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join(',') + '&limit=1&query=' + encodeURIComponent( title ) + '&format=json&cache=' + Date.now() ).then( wsresponse => {
 							var wsbody = wsresponse.body;
 							if ( wsresponse.statusCode !== 200 || !wsbody || wsbody.exception || !wsbody.total || !wsbody.items || !wsbody.items.length ) {
 								if ( wsbody && ( !wsbody.total || ( wsbody.items && !wsbody.items.length ) || ( wsbody.exception && wsbody.exception.code === 404 ) ) ) msg.reactEmoji('🤷');
@@ -234,9 +228,7 @@ function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '',
 								else {
 									text = '\n' + lang.get('search.infosearch', '`' + prefix + cmd + ( lang.localNames.page || 'page' ) + ' ' + title + linksuffix + '`', '`' + prefix + cmd + ( lang.localNames.search || 'search' ) + ' ' + title + linksuffix + '`');
 								}
-								got.get( wiki + 'api.php?action=query&prop=imageinfo|categoryinfo&titles=' + encodeURIComponent( querypage.title ) + '&format=json', {
-									responseType: 'json'
-								} ).then( srresponse => {
+								got.get( wiki + 'api.php?action=query&prop=imageinfo|categoryinfo&titles=' + encodeURIComponent( querypage.title ) + '&format=json' ).then( srresponse => {
 									var srbody = srresponse.body;
 									if ( srbody && srbody.warnings ) log_warn(srbody.warnings);
 									if ( srresponse.statusCode !== 200 || !srbody || !srbody.query || !srbody.query.pages ) {
@@ -281,7 +273,9 @@ function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '',
 											
 											if ( reaction ) reaction.removeEmoji();
 										}
-										else got.get( wiki.toDescLink(querypage.title) ).then( descresponse => {
+										else got.get( wiki.toDescLink(querypage.title), {
+											responseType: 'text'
+										} ).then( descresponse => {
 											var descbody = descresponse.body;
 											if ( descresponse.statusCode !== 200 || !descbody ) {
 												console.log( '- ' + descresponse.statusCode + ': Error while getting the description.' );
@@ -368,7 +362,9 @@ function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '',
 							
 							if ( reaction ) reaction.removeEmoji();
 						}
-						else got.get( wiki.toDescLink(querypage.title) ).then( descresponse => {
+						else got.get( wiki.toDescLink(querypage.title), {
+							responseType: 'text'
+						} ).then( descresponse => {
 							var descbody = descresponse.body;
 							if ( descresponse.statusCode !== 200 || !descbody ) {
 								console.log( '- ' + descresponse.statusCode + ': Error while getting the description.' );
@@ -461,7 +457,9 @@ function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '',
 						
 						if ( reaction ) reaction.removeEmoji();
 					}
-					else got.get( wiki.toDescLink(body.query.general.mainpage) ).then( descresponse => {
+					else got.get( wiki.toDescLink(body.query.general.mainpage), {
+						responseType: 'text'
+					} ).then( descresponse => {
 						var descbody = descresponse.body;
 						if ( descresponse.statusCode !== 200 || !descbody ) {
 							console.log( '- ' + descresponse.statusCode + ': Error while getting the description.' );

+ 3 - 9
cmds/wiki/fandom/diff.js

@@ -51,9 +51,7 @@ function fandom_diff(lang, msg, args, wiki, reaction, spoiler, embed) {
 			fandom_diff_send(lang, msg, argids, wiki, reaction, spoiler);
 		}
 		else {
-			got.get( wiki + 'api.php?action=query&prop=revisions&rvprop=' + ( title ? '&titles=' + encodeURIComponent( title ) : '&revids=' + revision ) + '&rvdiffto=' + diff + '&format=json', {
-				responseType: 'json'
-			} ).then( response => {
+			got.get( wiki + 'api.php?action=query&prop=revisions&rvprop=' + ( title ? '&titles=' + encodeURIComponent( title ) : '&revids=' + revision ) + '&rvdiffto=' + diff + '&format=json' ).then( response => {
 				var body = response.body;
 				if ( body && body.warnings ) log_warn(body.warnings);
 				if ( response.statusCode !== 200 || !body || !body.query ) {
@@ -210,9 +208,7 @@ function fandom_diff(lang, msg, args, wiki, reaction, spoiler, embed) {
  * @param {String[]} [compare] - The edit difference.
  */
 function fandom_diff_send(lang, msg, args, wiki, reaction, spoiler, compare) {
-	got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=tags&tglimit=500&tgprop=displayname&prop=revisions&rvprop=ids|timestamp|flags|user|size|comment|tags' + ( args.length === 1 || args[0] === args[1] ? '|content' : '' ) + '&revids=' + args.join('|') + '&format=json', {
-		responseType: 'json'
-	} ).then( response => {
+	got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=tags&tglimit=500&tgprop=displayname&prop=revisions&rvprop=ids|timestamp|flags|user|size|comment|tags' + ( args.length === 1 || args[0] === args[1] ? '|content' : '' ) + '&revids=' + args.join('|') + '&format=json' ).then( response => {
 		var body = response.body;
 		if ( body && body.warnings ) log_warn(body.warnings);
 		if ( response.statusCode !== 200 || !body || !body.query ) {
@@ -282,9 +278,7 @@ function fandom_diff_send(lang, msg, args, wiki, reaction, spoiler, compare) {
 						}
 						
 						var more = '\n__' + lang.get('diff.info.more') + '__';
-						if ( !compare && oldid ) got.get( wiki + 'api.php?action=query&prop=revisions&rvprop=&revids=' + oldid + '&rvdiffto=' + diff + '&format=json', {
-							responseType: 'json'
-						} ).then( cpresponse => {
+						if ( !compare && oldid ) got.get( wiki + 'api.php?action=query&prop=revisions&rvprop=&revids=' + oldid + '&rvdiffto=' + diff + '&format=json' ).then( cpresponse => {
 							var cpbody = cpresponse.body;
 							if ( cpbody && cpbody.warnings ) log_warn(cpbody.warnings);
 							if ( cpresponse.statusCode !== 200 || !cpbody || !cpbody.query || cpbody.query.badrevids || !cpbody.query.pages && cpbody.query.pages[-1] ) {

+ 3 - 9
cmds/wiki/fandom/overview.js

@@ -17,9 +17,7 @@ getAllSites.then( sites => allSites = sites );
  */
 function fandom_overview(lang, msg, wiki, reaction, spoiler) {
 	if ( !allSites.length ) getAllSites.get().then( sites => allSites = sites );
-	got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-Wiki_Manager|custom-GamepediaNotice|custom-FandomMergeNotice&amenableparser=true&siprop=general|statistics|wikidesc&titles=Special:Statistics&format=json', {
-		responseType: 'json'
-	} ).then( response => {
+	got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-Wiki_Manager|custom-GamepediaNotice|custom-FandomMergeNotice&amenableparser=true&siprop=general|statistics|wikidesc&titles=Special:Statistics&format=json' ).then( response => {
 		var body = response.body;
 		if ( body && body.warnings ) log_warn(body.warnings);
 		if ( response.statusCode !== 200 || !body || !body.query || !body.query.pages ) {
@@ -37,9 +35,7 @@ function fandom_overview(lang, msg, wiki, reaction, spoiler) {
 		else if ( body.query.general.generator.startsWith( 'MediaWiki 1.3' ) ) {
 			return gamepedia_overview(lang, msg, wiki, reaction, spoiler);
 		}
-		else got.get( 'https://community.fandom.com/api/v1/Wikis/Details?ids=' + body.query.wikidesc.id + '&format=json', {
-			responseType: 'json'
-		} ).then( ovresponse => {
+		else got.get( 'https://community.fandom.com/api/v1/Wikis/Details?ids=' + body.query.wikidesc.id + '&format=json&cache=' + Date.now() ).then( ovresponse => {
 			var ovbody = ovresponse.body;
 			if ( ovresponse.statusCode !== 200 || !ovbody || ovbody.exception || !ovbody.items || !ovbody.items[body.query.wikidesc.id] ) {
 				console.log( '- ' + ovresponse.statusCode + ': Error while getting the wiki details: ' + ( ovbody && ovbody.exception && ovbody.exception.details ) );
@@ -88,9 +84,7 @@ function fandom_overview(lang, msg, wiki, reaction, spoiler) {
 					var text = '<' + pagelink + '>\n\n' + vertical.join(' ') + ( topic[1] ? '\n' + topic.join(' ') : '' );
 				}
 				
-				if ( founder[1] > 0 ) got.get( wiki + 'api.php?action=query&list=users&usprop=&usids=' + founder[1] + '&format=json', {
-					responseType: 'json'
-				} ).then( usresponse => {
+				if ( founder[1] > 0 ) got.get( wiki + 'api.php?action=query&list=users&usprop=&usids=' + founder[1] + '&format=json' ).then( usresponse => {
 					var usbody = usresponse.body;
 					if ( usbody && usbody.warnings ) log_warn(usbody.warnings);
 					if ( usresponse.statusCode !== 200 || !usbody || !usbody.query || !usbody.query.users || !usbody.query.users[0] ) {

+ 4 - 4
cmds/wiki/fandom/random.js

@@ -11,9 +11,7 @@ const gamepedia_random = require('../gamepedia/random.js').run;
  * @param {String} spoiler - If the response is in a spoiler.
  */
 function fandom_random(lang, msg, wiki, reaction, spoiler) {
-	got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=description&siprop=general&generator=random&grnnamespace=0&format=json', {
-		responseType: 'json'
-	} ).then( response => {
+	got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=description&siprop=general&generator=random&grnnamespace=0&format=json' ).then( response => {
 		var body = response.body;
 		if ( body && body.warnings ) log_warn(body.warnings);
 		if ( response.statusCode !== 200 || !body || !body.query || !body.query.pages ) {
@@ -43,7 +41,9 @@ function fandom_random(lang, msg, wiki, reaction, spoiler) {
 				
 				if ( reaction ) reaction.removeEmoji();
 			}
-			else got.get( wiki.toDescLink(querypage.title) ).then( descresponse => {
+			else got.get( wiki.toDescLink(querypage.title), {
+				responseType: 'text'
+			} ).then( descresponse => {
 				var descbody = descresponse.body;
 				if ( descresponse.statusCode !== 200 || !descbody ) {
 					console.log( '- ' + descresponse.statusCode + ': Error while getting the description.' );

+ 1 - 3
cmds/wiki/fandom/search.js

@@ -26,9 +26,7 @@ function fandom_search(lang, msg, searchterm, wiki, query, reaction, spoiler) {
 		return;
 	}
 	var description = [];
-	got.get( wiki + 'api/v1/Search/List?minArticleQuality=0&namespaces=4,12,14,' + Object.values(query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join(',') + '&limit=10&query=' + encodeURIComponent( searchterm ) + '&format=json', {
-		responseType: 'json'
-	} ).then( response => {
+	got.get( wiki + 'api/v1/Search/List?minArticleQuality=0&namespaces=4,12,14,' + Object.values(query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join(',') + '&limit=10&query=' + encodeURIComponent( searchterm ) + '&format=json&cache=' + Date.now() ).then( response => {
 		var body = response.body;
 		if ( response.statusCode !== 200 || !body || body.exception || !body.items ) {
 			if ( !( body && body.exception && body.exception.code === 404 ) ) {

+ 10 - 13
cmds/wiki/fandom/user.js

@@ -19,9 +19,7 @@ const {timeoptions, usergroups} = require('../../../util/default.json');
  */
 function fandom_user(lang, msg, namespace, username, wiki, querystring, fragment, querypage, contribs, reaction, spoiler) {
 	if ( /^(?:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{2})?|(?:[\dA-F]{1,4}:){7}[\dA-F]{1,4}(?:\/\d{2,3})?)$/.test(username) ) {
-		got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=blocks&bkprop=user|by|timestamp|expiry|reason&bkip=' + encodeURIComponent( username ) + '&format=json', {
-			responseType: 'json'
-		} ).then( response => {
+		got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=blocks&bkprop=user|by|timestamp|expiry|reason&bkip=' + encodeURIComponent( username ) + '&format=json' ).then( response => {
 			var body = response.body;
 			if ( body && body.warnings ) log_warn(body.warnings);
 			if ( response.statusCode !== 200 || !body || !body.query || !body.query.blocks ) {
@@ -34,7 +32,9 @@ function fandom_user(lang, msg, namespace, username, wiki, querystring, fragment
 					else {
 						var pagelink = wiki.toLink(querypage.title, querystring.toTitle(), fragment);
 						var embed = new MessageEmbed().setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
-						got.get( wiki.toDescLink(querypage.title) ).then( descresponse => {
+						got.get( wiki.toDescLink(querypage.title), {
+							responseType: 'text'
+						} ).then( descresponse => {
 							var descbody = descresponse.body;
 							if ( descresponse.statusCode !== 200 || !descbody ) {
 								console.log( '- ' + descresponse.statusCode + ': Error while getting the description.' );
@@ -112,9 +112,7 @@ function fandom_user(lang, msg, namespace, username, wiki, querystring, fragment
 						else if ( range >= 16 ) rangeprefix = username.replace( /^((?:\d{1,3}\.){2}).+$/, '$1' );
 					}
 				}
-				got.get( wiki + 'api.php?action=query&list=usercontribs&ucprop=&uclimit=50&ucuser=' + encodeURIComponent( username ) + '&format=json', {
-					responseType: 'json'
-				} ).then( ucresponse => {
+				got.get( wiki + 'api.php?action=query&list=usercontribs&ucprop=&uclimit=50&ucuser=' + encodeURIComponent( username ) + '&format=json' ).then( ucresponse => {
 					var ucbody = ucresponse.body;
 					if ( rangeprefix && !username.includes( '/' ) ) username = rangeprefix;
 					if ( ucbody && ucbody.warnings ) log_warn(ucbody.warnings);
@@ -169,9 +167,7 @@ function fandom_user(lang, msg, namespace, username, wiki, querystring, fragment
 			if ( reaction ) reaction.removeEmoji();
 		} );
 	} else {
-		got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-Wiki_Manager&amenableparser=true&siprop=general&list=users&usprop=blockinfo|groups|editcount|registration|gender&ususers=' + encodeURIComponent( username ) + '&format=json', {
-			responseType: 'json'
-		} ).then( response => {
+		got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-Wiki_Manager&amenableparser=true&siprop=general&list=users&usprop=blockinfo|groups|editcount|registration|gender&ususers=' + encodeURIComponent( username ) + '&format=json' ).then( response => {
 			var body = response.body;
 			if ( body && body.warnings ) log_warn(body.warnings);
 			if ( response.statusCode !== 200 || !body || !body.query || !body.query.users ) {
@@ -191,7 +187,9 @@ function fandom_user(lang, msg, namespace, username, wiki, querystring, fragment
 					else {
 						var pagelink = wiki.toLink(querypage.title, querystring.toTitle(), fragment, body.query.general);
 						var embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
-						got.get( wiki.toDescLink(querypage.title) ).then( descresponse => {
+						got.get( wiki.toDescLink(querypage.title), {
+							responseType: 'text'
+						} ).then( descresponse => {
 							var descbody = descresponse.body;
 							if ( descresponse.statusCode !== 200 || !descbody ) {
 								console.log( '- ' + descresponse.statusCode + ': Error while getting the description.' );
@@ -279,8 +277,7 @@ function fandom_user(lang, msg, namespace, username, wiki, querystring, fragment
 					got.get( 'https://services.fandom.com/user-attribute/user/' + queryuser.userid + '?format=json&cache=' + Date.now(), {
 						headers: {
 							Accept: 'application/hal+json'
-						},
-						responseType: 'json'
+						}
 					} ).then( presponse => {
 						var pbody = presponse.body;
 						if ( presponse.statusCode !== 200 || !pbody || pbody.title || !pbody._embedded || !pbody._embedded.properties ) {

+ 4 - 12
cmds/wiki/gamepedia.js

@@ -75,9 +75,7 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
 	else if ( aliasInvoke === 'diff' && args.join('') && !querystring && !fragment ) fn.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&explaintext=true&exsectionformat=raw&exlimit=1&titles=%1F' + encodeURIComponent( title.replace( /\x1F/g, '\ufffd' ) ) + '&format=json', {
-			responseType: 'json'
-		} ).then( response => {
+		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=%1F' + encodeURIComponent( title.replace( /\x1F/g, '\ufffd' ) ) + '&format=json' ).then( response => {
 			var body = response.body;
 			if ( body && body.warnings ) log_warn(body.warnings);
 			if ( response.statusCode !== 200 || !body || body.batchcomplete === undefined || !body.query ) {
@@ -119,9 +117,7 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
 					}
 					else if ( querypage.ns === -1 && querypage.title.startsWith( contribs ) && querypage.title.length > contribs.length ) {
 						var username = querypage.title.split('/').slice(1).join('/');
-						got.get( wiki + 'api.php?action=query&titles=User:' + encodeURIComponent( username ) + '&format=json', {
-							responseType: 'json'
-						} ).then( uresponse => {
+						got.get( wiki + 'api.php?action=query&titles=User:' + encodeURIComponent( username ) + '&format=json' ).then( uresponse => {
 							var ubody = uresponse.body;
 							if ( uresponse.statusCode !== 200 || !ubody || ubody.batchcomplete === undefined || !ubody.query ) {
 								console.log( '- ' + uresponse.statusCode + ': Error while getting the user: ' + ( ubody && ubody.error && ubody.error.info ) );
@@ -154,9 +150,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&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 => {
+						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' ).then( srresponse => {
 							var srbody = srresponse.body;
 							if ( srbody && srbody.warnings ) log_warn(srbody.warnings);
 							if ( srresponse.statusCode !== 200 || !srbody || srbody.batchcomplete === undefined ) {
@@ -345,9 +339,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 MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( body.query.general.mainpage.escapeFormatting() ).setURL( pagelink ).setThumbnail( logoToURL(body.query.general) );
-					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 => {
+					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' ).then( mpresponse => {
 						var mpbody = mpresponse.body;
 						if ( mpbody && mpbody.warnings ) log_warn(body.warnings);
 						if ( mpresponse.statusCode !== 200 || !mpbody || mpbody.batchcomplete === undefined || !mpbody.query ) {

+ 3 - 9
cmds/wiki/gamepedia/diff.js

@@ -51,9 +51,7 @@ function gamepedia_diff(lang, msg, args, wiki, reaction, spoiler, embed) {
 			gamepedia_diff_send(lang, msg, [diff, revision], wiki, reaction, spoiler);
 		}
 		else {
-			got.get( wiki + 'api.php?action=compare&prop=ids|diff' + ( title ? '&fromtitle=' + encodeURIComponent( title ) : '&fromrev=' + revision ) + '&torelative=' + relative + '&format=json', {
-				responseType: 'json'
-			} ).then( response => {
+			got.get( wiki + 'api.php?action=compare&prop=ids|diff' + ( title ? '&fromtitle=' + encodeURIComponent( title ) : '&fromrev=' + revision ) + '&torelative=' + relative + '&format=json' ).then( response => {
 				var body = response.body;
 				if ( body && body.warnings ) log_warn(body.warnings);
 				if ( response.statusCode !== 200 || !body || !body.compare ) {
@@ -223,9 +221,7 @@ function gamepedia_diff(lang, msg, args, wiki, reaction, spoiler, embed) {
  * @param {String[]} [compare] - The edit difference.
  */
 function gamepedia_diff_send(lang, msg, args, wiki, reaction, spoiler, compare) {
-	got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=tags&tglimit=500&tgprop=displayname&prop=revisions&rvslots=main&rvprop=ids|timestamp|flags|user|size|comment|tags' + ( args.length === 1 || args[0] === args[1] ? '|content' : '' ) + '&revids=' + args.join('|') + '&format=json', {
-		responseType: 'json'
-	} ).then( response => {
+	got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=tags&tglimit=500&tgprop=displayname&prop=revisions&rvslots=main&rvprop=ids|timestamp|flags|user|size|comment|tags' + ( args.length === 1 || args[0] === args[1] ? '|content' : '' ) + '&revids=' + args.join('|') + '&format=json' ).then( response => {
 		var body = response.body;
 		if ( body && body.warnings ) log_warn(body.warnings);
 		if ( response.statusCode !== 200 || !body || body.batchcomplete === undefined || !body.query ) {
@@ -295,9 +291,7 @@ function gamepedia_diff_send(lang, msg, args, wiki, reaction, spoiler, compare)
 						}
 						
 						var more = '\n__' + lang.get('diff.info.more') + '__';
-						if ( !compare && oldid ) got.get( wiki + 'api.php?action=compare&prop=diff&fromrev=' + oldid + '&torev=' + diff + '&format=json', {
-							responseType: 'json'
-						} ).then( cpresponse => {
+						if ( !compare && oldid ) got.get( wiki + 'api.php?action=compare&prop=diff&fromrev=' + oldid + '&torev=' + diff + '&format=json' ).then( cpresponse => {
 							var cpbody = cpresponse.body;
 							if ( cpbody && cpbody.warnings ) log_warn(cpbody.warnings);
 							if ( cpresponse.statusCode !== 200 || !cpbody || !cpbody.compare || cpbody.compare['*'] === undefined ) {

+ 3 - 9
cmds/wiki/gamepedia/overview.js

@@ -15,9 +15,7 @@ getAllSites.then( sites => allSites = sites );
  */
 function gamepedia_overview(lang, msg, wiki, reaction, spoiler) {
 	if ( !allSites.length ) getAllSites.update();
-	got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-Wiki_Manager|custom-GamepediaNotice|custom-FandomMergeNotice&amenableparser=true&siprop=general|statistics&titles=Special:Statistics&format=json', {
-		responseType: 'json'
-	} ).then( response => {
+	got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-Wiki_Manager|custom-GamepediaNotice|custom-FandomMergeNotice&amenableparser=true&siprop=general|statistics&titles=Special:Statistics&format=json' ).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.pages ) {
@@ -68,9 +66,7 @@ function gamepedia_overview(lang, msg, wiki, reaction, spoiler) {
 				var text = '<' + pagelink + '>\n\n';
 			}
 			
-			if ( wiki.isFandom() ) got.get( 'https://community.fandom.com/api/v1/Wikis/ByString?expand=true&includeDomain=true&limit=10&string=' + body.query.general.servername + body.query.general.scriptpath + '&format=json', {
-				responseType: 'json'
-			} ).then( ovresponse => {
+			if ( wiki.isFandom() ) got.get( 'https://community.fandom.com/api/v1/Wikis/ByString?expand=true&includeDomain=true&limit=10&string=' + body.query.general.servername + body.query.general.scriptpath + '&format=json&cache=' + Date.now() ).then( ovresponse => {
 				var ovbody = ovresponse.body;
 				if ( ovresponse.statusCode !== 200 || !ovbody || ovbody.exception || !ovbody.items || !ovbody.items.length ) {
 					console.log( '- ' + ovresponse.statusCode + ': Error while getting the wiki details: ' + ( ovbody && ovbody.exception && ovbody.exception.details ) );
@@ -109,9 +105,7 @@ function gamepedia_overview(lang, msg, wiki, reaction, spoiler) {
 					}
 					else text += vertical.join(' ') + ( topic[1] ? '\n' + topic.join(' ') : '' );
 					
-					if ( founder[1] > 0 ) got.get( wiki + 'api.php?action=query&list=users&usprop=&ususerids=' + founder[1] + '&format=json', {
-						responseType: 'json'
-					} ).then( usresponse => {
+					if ( founder[1] > 0 ) got.get( wiki + 'api.php?action=query&list=users&usprop=&ususerids=' + founder[1] + '&format=json' ).then( usresponse => {
 						var usbody = usresponse.body;
 						if ( usbody && usbody.warnings ) log_warn(usbody.warnings);
 						if ( usresponse.statusCode !== 200 || !usbody || !usbody.query || !usbody.query.users || !usbody.query.users[0] ) {

+ 1 - 3
cmds/wiki/gamepedia/random.js

@@ -11,9 +11,7 @@ const extract_desc = require('../../../util/extract_desc.js');
  * @param {String} spoiler - If the response is in a spoiler.
  */
 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&explaintext=true&exsectionformat=raw&exlimit=1&generator=random&grnnamespace=0&format=json', {
-		responseType: 'json'
-	} ).then( response => {
+	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' ).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.pages ) {

+ 1 - 3
cmds/wiki/gamepedia/search.js

@@ -22,9 +22,7 @@ function gamepedia_search(lang, msg, searchterm, wiki, query, reaction, spoiler)
 		embed.setTitle( 'Special:Search' ).setURL( pagelink );
 	}
 	var description = [];
-	got.get( wiki + 'api.php?action=query&titles=Special:Search&list=search&srinfo=totalhits&srprop=redirecttitle|sectiontitle&srnamespace=4|12|14|' + Object.values(query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&srlimit=10&srsearch=' + encodeURIComponent( ( searchterm || ' ' ) ) + '&format=json', {
-		responseType: 'json'
-	} ).then( response => {
+	got.get( wiki + 'api.php?action=query&titles=Special:Search&list=search&srinfo=totalhits&srprop=redirecttitle|sectiontitle&srnamespace=4|12|14|' + Object.values(query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&srlimit=10&srsearch=' + encodeURIComponent( ( searchterm || ' ' ) ) + '&format=json' ).then( response => {
 		var body = response.body;
 		if ( body && body.warnings ) log_warn(body.warnings);
 		if ( response.statusCode !== 200 || !body || !body.query || !body.query.search || body.batchcomplete === undefined ) {

+ 5 - 14
cmds/wiki/gamepedia/user.js

@@ -25,9 +25,7 @@ getAllSites.then( sites => allSites = sites );
 function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragment, querypage, contribs, reaction, spoiler) {
 	if ( !allSites.length ) getAllSites.update();
 	if ( /^(?:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{2})?|(?:[\dA-F]{1,4}:){7}[\dA-F]{1,4}(?:\/\d{2,3})?)$/.test(username) ) {
-		got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=blocks&bkprop=user|by|timestamp|expiry|reason&bkip=' + encodeURIComponent( username ) + '&format=json', {
-			responseType: 'json'
-		} ).then( response => {
+		got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=blocks&bkprop=user|by|timestamp|expiry|reason&bkip=' + encodeURIComponent( username ) + '&format=json' ).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 || fragment ) {
@@ -106,9 +104,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 						else if ( range >= 16 ) rangeprefix = username.replace( /^((?:\d{1,3}\.){2}).+$/, '$1' );
 					}
 				}
-				got.get( wiki + 'api.php?action=query&list=usercontribs&ucprop=&uclimit=50' + ( username.includes( '/' ) ? '&ucuserprefix=' + encodeURIComponent( rangeprefix ) : '&ucuser=' + encodeURIComponent( username ) ) + '&format=json', {
-					responseType: 'json'
-				} ).then( ucresponse => {
+				got.get( wiki + 'api.php?action=query&list=usercontribs&ucprop=&uclimit=50' + ( username.includes( '/' ) ? '&ucuserprefix=' + encodeURIComponent( rangeprefix ) : '&ucuser=' + encodeURIComponent( username ) ) + '&format=json' ).then( ucresponse => {
 					var ucbody = ucresponse.body;
 					if ( rangeprefix && !username.includes( '/' ) ) username = rangeprefix;
 					if ( ucbody && ucbody.warnings ) log_warn(ucbody.warnings);
@@ -172,9 +168,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 			if ( reaction ) reaction.removeEmoji();
 		} );
 	} else {
-		got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=users&usprop=blockinfo|groups|groupmemberships|editcount|registration|gender&ususers=' + encodeURIComponent( username ) + '&format=json', {
-			responseType: 'json'
-		} ).then( response => {
+		got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=users&usprop=blockinfo|groups|groupmemberships|editcount|registration|gender&ususers=' + encodeURIComponent( username ) + '&format=json' ).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.users || !body.query.users[0] ) {
@@ -282,9 +276,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 						var embed = {};
 						var text = '<' + pagelink + '>\n\n' + gender.join(' ') + '\n' + registration.join(' ') + '\n' + editcount.join(' ') + '\n' + group[0] + ' ' + group.slice(1).join(', ');
 					}
-					if ( wiki.endsWith( '.gamepedia.com/' ) ) got.get( wiki + 'api.php?action=profile&do=getPublicProfile&user_name=' + encodeURIComponent( username ) + '&format=json&cache=' + Date.now(), {
-						responseType: 'json'
-					} ).then( presponse => {
+					if ( wiki.endsWith( '.gamepedia.com/' ) ) got.get( wiki + 'api.php?action=profile&do=getPublicProfile&user_name=' + encodeURIComponent( username ) + '&format=json&cache=' + Date.now() ).then( presponse => {
 						var pbody = presponse.body;
 						if ( presponse.statusCode !== 200 || !pbody || pbody.error || pbody.errormsg || !pbody.profile ) {
 							console.log( '- ' + presponse.statusCode + ': Error while getting the user profile: ' + ( pbody && ( pbody.error && pbody.error.info || pbody.errormsg ) ) );
@@ -336,8 +328,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 					else if ( wiki.isFandom() ) got.get( 'https://services.fandom.com/user-attribute/user/' + queryuser.userid + '?format=json&cache=' + Date.now(), {
 						headers: {
 							Accept: 'application/hal+json'
-						},
-						responseType: 'json'
+						}
 					} ).then( presponse => {
 						var pbody = presponse.body;
 						if ( presponse.statusCode !== 200 || !pbody || pbody.title || !pbody._embedded || !pbody._embedded.properties ) {

+ 14 - 19
functions/discussion.js

@@ -17,7 +17,9 @@ function fandom_discussion(lang, msg, wiki, title, query, reaction, spoiler) {
 	if ( !title ) {
 		var pagelink = wiki + 'f';
 		var embed = new MessageEmbed().setAuthor( query.general.sitename ).setTitle( lang.get('discussion.main') ).setURL( pagelink );
-		got.get( wiki + 'f' ).then( descresponse => {
+		got.get( wiki + 'f', {
+			responseType: 'text'
+		} ).then( descresponse => {
 			var descbody = descresponse.body;
 			if ( descresponse.statusCode !== 200 || !descbody ) {
 				console.log( '- ' + descresponse.statusCode + ': Error while getting the description.' );
@@ -48,9 +50,7 @@ function fandom_discussion(lang, msg, wiki, title, query, reaction, spoiler) {
 		} );
 	}
 	else if ( !query.wikidesc ) {
-		return got.get( 'https://community.fandom.com/api/v1/Wikis/ByString?includeDomain=true&limit=10&string=' + query.general.servername + query.general.scriptpath + '&format=json', {
-			responseType: 'json'
-		} ).then( wvresponse => {
+		return got.get( 'https://community.fandom.com/api/v1/Wikis/ByString?includeDomain=true&limit=10&string=' + query.general.servername + query.general.scriptpath + '&format=json&cache=' + Date.now() ).then( wvresponse => {
 			var wvbody = wvresponse.body;
 			if ( wvresponse.statusCode !== 200 || !wvbody || wvbody.exception || !wvbody.items || !wvbody.items.length ) {
 				console.log( '- ' + wvresponse.statusCode + ': Error while getting the wiki id: ' + ( wvbody && wvbody.exception && wvbody.exception.details ) );
@@ -76,11 +76,10 @@ function fandom_discussion(lang, msg, wiki, title, query, reaction, spoiler) {
 	}
 	else if ( title.split(' ')[0].toLowerCase() === 'post' || title.split(' ')[0].toLowerCase() === lang.get('discussion.post') ) {
 		title = title.split(' ').slice(1).join(' ');
-		got.get( 'https://services.fandom.com/discussion/' + query.wikidesc.id + '/posts?limit=' + limit + '&format=json', {
+		got.get( 'https://services.fandom.com/discussion/' + query.wikidesc.id + '/posts?limit=' + limit + '&format=json&cache=' + Date.now(), {
 			headers: {
 				Accept: 'application/hal+json'
-			},
-			responseType: 'json'
+			}
 		} ).then( response => {
 			var body = response.body;
 			if ( response.statusCode !== 200 || !body || body.title || !body._embedded || !body._embedded['doc:posts'] ) {
@@ -99,11 +98,10 @@ function fandom_discussion(lang, msg, wiki, title, query, reaction, spoiler) {
 					if ( reaction ) reaction.removeEmoji();
 				}
 				else if ( /^\d+$/.test(title) ) {
-					got.get( 'https://services.fandom.com/discussion/' + query.wikidesc.id + '/posts/' + title + '?format=json', {
+					got.get( 'https://services.fandom.com/discussion/' + query.wikidesc.id + '/posts/' + title + '?format=json&cache=' + Date.now(), {
 						headers: {
 							Accept: 'application/hal+json'
-						},
-						responseType: 'json'
+						}
 					} ).then( presponse => {
 						var pbody = presponse.body;
 						if ( presponse.statusCode !== 200 || !pbody || pbody.id !== title ) {
@@ -125,11 +123,10 @@ function fandom_discussion(lang, msg, wiki, title, query, reaction, spoiler) {
 							
 							if ( reaction ) reaction.removeEmoji();
 						}
-						else got.get( 'https://services.fandom.com/discussion/' + query.wikidesc.id + '/threads/' + pbody.threadId + '?format=json', {
+						else got.get( 'https://services.fandom.com/discussion/' + query.wikidesc.id + '/threads/' + pbody.threadId + '?format=json&cache=' + Date.now(), {
 							headers: {
 								Accept: 'application/hal+json'
-							},
-							responseType: 'json'
+							}
 						} ).then( thresponse => {
 							var thbody = thresponse.body;
 							if ( thresponse.statusCode !== 200 || !thbody || thbody.id !== pbody.threadId ) {
@@ -176,11 +173,10 @@ function fandom_discussion(lang, msg, wiki, title, query, reaction, spoiler) {
 		} );
 	}
 	else {
-		got.get( 'https://services.fandom.com/discussion/' + query.wikidesc.id + '/threads?sortKey=trending&limit=' + limit + '&format=json', {
+		got.get( 'https://services.fandom.com/discussion/' + query.wikidesc.id + '/threads?sortKey=trending&limit=' + limit + '&format=json&cache=' + Date.now(), {
 			headers: {
 				Accept: 'application/hal+json'
-			},
-			responseType: 'json'
+			}
 		} ).then( response => {
 			var body = response.body;
 			if ( response.statusCode !== 200 || !body || body.title || !body._embedded || !body._embedded.threads ) {
@@ -219,11 +215,10 @@ function fandom_discussion(lang, msg, wiki, title, query, reaction, spoiler) {
 					if ( reaction ) reaction.removeEmoji();
 				}
 				else if ( /^\d+$/.test(title) ) {
-					got.get( 'https://services.fandom.com/discussion/' + query.wikidesc.id + '/threads/' + title + '?format=json', {
+					got.get( 'https://services.fandom.com/discussion/' + query.wikidesc.id + '/threads/' + title + '?format=json&cache=' + Date.now(), {
 						headers: {
 							Accept: 'application/hal+json'
-						},
-						responseType: 'json'
+						}
 					} ).then( thresponse => {
 						var thbody = thresponse.body;
 						if ( thresponse.statusCode !== 200 || !thbody || thbody.id !== title ) {

+ 12 - 4
functions/global_block.js

@@ -21,7 +21,9 @@ function global_block(lang, msg, username, text, embed, wiki, spoiler) {
 		text = splittext.join('\n\n');
 	}
 	
-	if ( wiki.isFandom() ) got.get( 'https://community.fandom.com/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1' ).then( response => {
+	if ( wiki.isFandom() ) got.get( 'https://community.fandom.com/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1', {
+		responseType: 'text'
+	} ).then( response => {
 		var body = response.body;
 		if ( response.statusCode !== 200 || !body ) {
 			console.log( '- ' + response.statusCode + ': Error while getting the global block.' );
@@ -41,7 +43,9 @@ function global_block(lang, msg, username, text, embed, wiki, spoiler) {
 		console.log( '- Error while getting the global block: ' + error );
 	} ).finally( () => {
 		if ( !/^(?:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{2})?|(?:[\dA-F]{1,4}:){7}[\dA-F]{1,4}(?:\/\d{2,3})?)$/.test(username) ) {
-			got.get( 'https://community.fandom.com/wiki/Special:Editcount/' + encodeURIComponent( username ) ).then( gresponse => {
+			got.get( 'https://community.fandom.com/wiki/Special:Editcount/' + encodeURIComponent( username ), {
+				responseType: 'text'
+			} ).then( gresponse => {
 				var gbody = gresponse.body;
 				if ( gresponse.statusCode !== 200 || !gbody ) {
 					console.log( '- ' + gresponse.statusCode + ': Error while getting the global edit count.' );
@@ -66,7 +70,9 @@ function global_block(lang, msg, username, text, embed, wiki, spoiler) {
 		}
 		else msg.edit( spoiler + text + spoiler, {embed,allowedMentions:{parse:[]}} ).catch(log_error);
 	} );
-	else if ( wiki.endsWith( '.gamepedia.com/' ) ) got.get( 'https://help.gamepedia.com/Special:GlobalBlockList/' + encodeURIComponent( username ) + '?uselang=qqx' ).then( response => {
+	else if ( wiki.endsWith( '.gamepedia.com/' ) ) got.get( 'https://help.gamepedia.com/Special:GlobalBlockList/' + encodeURIComponent( username ) + '?uselang=qqx', {
+		responseType: 'text'
+	} ).then( response => {
 		var body = response.body;
 		if ( response.statusCode !== 200 || !body ) {
 			console.log( '- ' + response.statusCode + ': Error while getting the global block.' );
@@ -104,7 +110,9 @@ function global_block(lang, msg, username, text, embed, wiki, spoiler) {
 		console.log( '- Error while getting the global block: ' + error );
 	} ).finally( () => {
 		if ( !/^(?:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{2})?|(?:[\dA-F]{1,4}:){7}[\dA-F]{1,4}(?:\/\d{2,3})?)$/.test(username) ) {
-			got.get( 'https://help.gamepedia.com/UserProfile:' + encodeURIComponent( username ) ).then( gresponse => {
+			got.get( 'https://help.gamepedia.com/UserProfile:' + encodeURIComponent( username ), {
+				responseType: 'text'
+			} ).then( gresponse => {
 				var gbody = gresponse.body;
 				if ( gresponse.statusCode !== 200 || !gbody ) {
 					console.log( '- ' + gresponse.statusCode + ': Error while getting the global edit count.' );

+ 1 - 3
functions/special_page.js

@@ -129,9 +129,7 @@ function special_page(lang, msg, title, specialpage, embed, wiki, reaction, spoi
 	if ( specialpage === 'recentchanges' && msg.isAdmin() ) {
 		embed.addField( lang.get('rcscript.title'), lang.get('rcscript.ad', ( patreons[msg?.guild?.id] || process.env.prefix ), '[RcGcDw](https://gitlab.com/piotrex43/RcGcDw)') );
 	}
-	got.get( wiki + 'api.php?action=query&meta=siteinfo|allmessages&siprop=general&amenableparser=true&amtitle=' + encodeURIComponent( title ) + '&ammessages=' + ( specialpage in descriptions ? descriptions[specialpage] : encodeURIComponent( specialpage ) + '-summary' ) + ( specialpage in querypages ? querypages[specialpage][0] : '' ) + '&format=json', {
-		responseType: 'json'
-	} ).then( response => {
+	got.get( wiki + 'api.php?action=query&meta=siteinfo|allmessages&siprop=general&amenableparser=true&amtitle=' + encodeURIComponent( title ) + '&ammessages=' + ( specialpage in descriptions ? descriptions[specialpage] : encodeURIComponent( specialpage ) + '-summary' ) + ( specialpage in querypages ? querypages[specialpage][0] : '' ) + '&format=json' ).then( response => {
 		var body = response.body;
 		if ( body && body.warnings ) log_warn(body.warnings);
 		if ( response.statusCode !== 200 || !body ) {

+ 3 - 3
main.js

@@ -6,7 +6,8 @@ const got = require('got').extend( {
 	timeout: 30000,
 	headers: {
 		'User-Agent': 'Wiki-Bot/' + ( isDebug ? 'testing' : process.env.npm_package_version ) + ' (Discord; ' + process.env.npm_package_name + ')'
-	}
+	},
+	responseType: 'json'
 } );
 const {ShardingManager} = require('discord.js');
 const manager = new ShardingManager( './bot.js', {
@@ -78,8 +79,7 @@ function postStats(botList = JSON.parse(process.env.botlist), shardCount = manag
 				server_count: guildCount,
 				shard_count: shardCount,
 				shards: results
-			}, botList ),
-			responseType: 'json'
+			}, botList )
 		} ).then( response => {
 			var body = response.body;
 			if ( response.statusCode !== 200 || !body || body.error ) {

+ 1 - 3
util/allSites.js

@@ -5,9 +5,7 @@ var allSites = getAllSites();
  * @returns {Promise<Object[]>}
  */
 function getAllSites() {
-	return got.get( 'https://help.gamepedia.com/api.php?action=allsites&formatversion=2&do=getSiteStats&filter=wikis|md5_key,wiki_domain,wiki_display_name,wiki_image,wiki_description,wiki_managers,official_wiki,wiki_crossover,created&format=json', {
-		responseType: 'json'
-	} ).then( response => {
+	return got.get( 'https://help.gamepedia.com/api.php?action=allsites&formatversion=2&do=getSiteStats&filter=wikis|md5_key,wiki_domain,wiki_display_name,wiki_image,wiki_description,wiki_managers,official_wiki,wiki_crossover,created&format=json' ).then( response => {
 		var body = response.body;
 		if ( response.statusCode !== 200 || !body || body.status !== 'okay' || !body.data || !body.data.wikis ) {
 			console.log( '- ' + shardId + ': ' + response.statusCode + ': Error while gettings all sites: ' + ( body && body.error && body.error.info ) );

+ 128 - 129
util/newMessage.js

@@ -95,148 +95,147 @@ function newMessage(msg, lang, wiki = defaultSettings.wiki, prefix = process.env
 		return cmdmap.LINK(lang, msg, line, wiki);
 	} );
 	
-		if ( ( channel.type !== 'text' || !pause[msg.guild.id] ) && !noInline && ( cont.includes( '[[' ) || cont.includes( '{{' ) ) ) {
-			var links = [];
-			var embeds = [];
-			var linkcount = 0;
-			var linkmaxcount = maxcount + 5;
-			msg.cleanContent.replace( /\u200b/g, '' ).replace( /(?<!\\)```.+?```/gs, '<codeblock>' ).replace( /(?<!\\)`.+?`/gs, '<code>' ).split('\n').forEach( line => {
-				if ( line.hasPrefix(prefix) || !( line.includes( '[[' ) || line.includes( '{{' ) ) ) return;
-				if ( line.includes( '[[' ) && line.includes( ']]' ) && linkcount <= linkmaxcount ) {
-					let regex = new RegExp( '(?<!\\\\)(|\\|\\|)\\[\\[([^' + "<>\\[\\]\\|{}\\x01-\\x1F\\x7F" + ']+)(?<!\\\\)\\]\\]\\1', 'g' );
-					let entry = null;
-					while ( ( entry = regex.exec(line) ) !== null ) {
-						if ( linkcount < linkmaxcount ) {
-							linkcount++;
-							console.log( ( channel.type === 'text' ? msg.guild.id : '@' + author.id ) + ': ' + entry[0] );
-							let title = entry[2].split('#')[0];
-							let section = ( entry[2].includes( '#' ) ? entry[2].split('#').slice(1).join('#') : '' )
-							links.push({title,section,spoiler:entry[1]});
-						}
-						else if ( linkcount === linkmaxcount ) {
-							linkcount++;
-							console.log( '- Message contains too many links!' );
-							msg.reactEmoji('⚠️');
-							break;
-						}
+	if ( ( channel.type !== 'text' || !pause[msg.guild.id] ) && !noInline && ( cont.includes( '[[' ) || cont.includes( '{{' ) ) ) {
+		var links = [];
+		var embeds = [];
+		var linkcount = 0;
+		var linkmaxcount = maxcount + 5;
+		var breakInline = false;
+		msg.cleanContent.replace( /\u200b/g, '' ).replace( /(?<!\\)```.+?```/gs, '<codeblock>' ).replace( /(?<!\\)`.+?`/gs, '<code>' ).split('\n').forEach( line => {
+			if ( line.startsWith( '>>> ' ) ) breakinline = true;
+			if ( line.startsWith( '> ' ) || breakInline ) return;
+			if ( line.hasPrefix(prefix) || !( line.includes( '[[' ) || line.includes( '{{' ) ) ) return;
+			if ( line.includes( '[[' ) && line.includes( ']]' ) && linkcount <= linkmaxcount ) {
+				let regex = new RegExp( '(?<!\\\\)(|\\|\\|)\\[\\[([^' + "<>\\[\\]\\|{}\\x01-\\x1F\\x7F" + ']+)(?<!\\\\)\\]\\]\\1', 'g' );
+				let entry = null;
+				while ( ( entry = regex.exec(line) ) !== null ) {
+					if ( linkcount < linkmaxcount ) {
+						linkcount++;
+						console.log( ( channel.type === 'text' ? msg.guild.id : '@' + author.id ) + ': ' + entry[0] );
+						let title = entry[2].split('#')[0];
+						let section = ( entry[2].includes( '#' ) ? entry[2].split('#').slice(1).join('#') : '' )
+						links.push({title,section,spoiler:entry[1]});
 					}
-				}
-				
-				if ( line.includes( '{{' ) && line.includes( '}}' ) && count <= maxcount ) {
-					let regex = new RegExp( '(?<!\\\\)(|\\|\\|)(?<!\\{)\\{\\{([^' + "<>\\[\\]\\|{}\\x01-\\x1F\\x7F" + ']+)(?<!\\\\)\\}\\}\\1', 'g' );
-					let entry = null;
-					while ( ( entry = regex.exec(line) ) !== null ) {
-						if ( count < maxcount ) {
-							count++;
-							console.log( ( channel.type === 'text' ? msg.guild.id : '@' + author.id ) + ': ' + entry[0] );
-							let title = entry[2].split('#')[0];
-							let section = ( entry[2].includes( '#' ) ? entry[2].split('#').slice(1).join('#') : '' )
-							embeds.push({title,section,spoiler:entry[1]});
-						}
-						else if ( count === maxcount ) {
-							count++;
-							console.log( '- Message contains too many links!' );
-							msg.reactEmoji('⚠️');
-							break;
-						}
+					else if ( linkcount === linkmaxcount ) {
+						linkcount++;
+						console.log( '- Message contains too many links!' );
+						msg.reactEmoji('⚠️');
+						break;
 					}
 				}
-			} );
-		
-			if ( links.length ) got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&iwurl=true&titles=' + encodeURIComponent( links.map( link => link.title ).join('|') ) + '&format=json', {
-				responseType: 'json'
-			} ).then( response => {
-				var body = response.body;
-				if ( response.statusCode !== 200 || !body || !body.query ) {
-					if ( wiki.noWiki(response.url) || response.statusCode === 410 ) {
-						console.log( '- This wiki doesn\'t exist!' );
-						msg.reactEmoji('nowiki');
-						return;
+			}
+			
+			if ( line.includes( '{{' ) && line.includes( '}}' ) && count <= maxcount ) {
+				let regex = new RegExp( '(?<!\\\\)(|\\|\\|)(?<!\\{)\\{\\{([^' + "<>\\[\\]\\|{}\\x01-\\x1F\\x7F" + ']+)(?<!\\\\)\\}\\}\\1', 'g' );
+				let entry = null;
+				while ( ( entry = regex.exec(line) ) !== null ) {
+					if ( count < maxcount ) {
+						count++;
+						console.log( ( channel.type === 'text' ? msg.guild.id : '@' + author.id ) + ': ' + entry[0] );
+						let title = entry[2].split('#')[0];
+						let section = ( entry[2].includes( '#' ) ? entry[2].split('#').slice(1).join('#') : '' )
+						embeds.push({title,section,spoiler:entry[1]});
+					}
+					else if ( count === maxcount ) {
+						count++;
+						console.log( '- Message contains too many links!' );
+						msg.reactEmoji('⚠️');
+						break;
 					}
-					console.log( '- ' + response.statusCode + ': Error while following the links: ' + ( body && body.error && body.error.info ) );
-					return;
-				}
-				if ( body.query.normalized ) {
-					body.query.normalized.forEach( title => links.filter( link => link.title === title.from ).forEach( link => link.title = title.to ) );
-				}
-				if ( body.query.interwiki ) {
-					body.query.interwiki.forEach( interwiki => links.filter( link => link.title === interwiki.title ).forEach( link => {
-						link.url = interwiki.url + ( link.section ? '#' + link.section.toSection() : '' );
-					} ) );
-				}
-				if ( body.query.pages ) {
-					var querypages = Object.values(body.query.pages);
-					querypages.filter( page => page.invalid !== undefined ).forEach( page => links.filter( link => link.title === page.title ).forEach( link => {
-						links.splice(links.indexOf(link), 1);
-					} ) );
-					querypages.filter( page => page.missing !== undefined && page.known === undefined ).forEach( page => links.filter( link => link.title === page.title ).forEach( link => {
-						if ( ( page.ns === 2 || page.ns === 202 ) && !page.title.includes( '/' ) ) return;
-						link.url = wiki.toLink(link.title, 'action=edit&redlink=1', '', body.query.general);
-					} ) );
 				}
-				if ( links.length ) msg.sendChannel( links.map( link => link.spoiler + '<' + ( link.url || wiki.toLink(link.title, '', link.section, body.query.general) ) + '>' + link.spoiler ).join('\n'), {split:true} );
-			}, error => {
-				if ( wiki.noWiki(error.message) ) {
+			}
+		} );
+	
+		if ( links.length ) got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&iwurl=true&titles=' + encodeURIComponent( links.map( link => link.title ).join('|') ) + '&format=json' ).then( response => {
+			var body = response.body;
+			if ( response.statusCode !== 200 || !body || !body.query ) {
+				if ( wiki.noWiki(response.url) || response.statusCode === 410 ) {
 					console.log( '- This wiki doesn\'t exist!' );
 					msg.reactEmoji('nowiki');
-				}
-				else {
-					console.log( '- Error while following the links: ' + error );
-				}
-			} );
-			
-			if ( embeds.length ) got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general' + ( wiki.isFandom() ? '' : '|variables' ) + '&titles=' + encodeURIComponent( embeds.map( embed => embed.title + '|Template:' + embed.title ).join('|') ) + '&format=json', {
-				responseType: 'json'
-			} ).then( response => {
-				var body = response.body;
-				if ( response.statusCode !== 200 || !body || !body.query ) {
-					if ( wiki.noWiki(response.url) || response.statusCode === 410 ) {
-						console.log( '- This wiki doesn\'t exist!' );
-						msg.reactEmoji('nowiki');
-						return;
-					}
-					console.log( '- ' + response.statusCode + ': Error while following the links: ' + ( body && body.error && body.error.info ) );
 					return;
 				}
-				if ( body.query.normalized ) {
-					body.query.normalized.forEach( title => embeds.filter( embed => embed.title === title.from ).forEach( embed => embed.title = title.to ) );
-				}
-				if ( body.query.pages ) {
-					var querypages = Object.values(body.query.pages);
-					querypages.filter( page => page.invalid !== undefined ).forEach( page => embeds.filter( embed => embed.title === page.title ).forEach( embed => {
-						embeds.splice(embeds.indexOf(embed), 1);
-					} ) );
-					var missing = [];
-					querypages.filter( page => page.missing !== undefined && page.known === undefined ).forEach( page => embeds.filter( embed => embed.title === page.title ).forEach( embed => {
-						if ( ( page.ns === 2 || page.ns === 202 ) && !page.title.includes( '/' ) ) return;
-						embeds.splice(embeds.indexOf(embed), 1);
-						if ( page.ns === 0 && !embed.section ) {
-							var template = querypages.find( template => template.ns === 10 && template.title.split(':').slice(1).join(':') === embed.title );
-							if ( template && template.missing === undefined ) embed.template = wiki.toLink(template.title, '', '', body.query.general);
-						}
-						if ( embed.template || !body.query.variables || !body.query.variables.some( variable => variable.toUpperCase() === embed.title ) ) missing.push(embed);
-					} ) );
-					if ( missing.length ) {
-						msg.sendChannel( missing.map( embed => embed.spoiler + '<' + ( embed.template || wiki.toLink(embed.title, 'action=edit&redlink=1', '', body.query.general) ) + '>' + embed.spoiler ).join('\n'), {split:true} );
-					}
-				}
-				if ( embeds.length ) {
-					if ( wiki.isFandom() ) embeds.forEach( embed => msg.reactEmoji('⏳').then( reaction => {
-						check_wiki.fandom(lang, msg, embed.title, wiki, '', reaction, embed.spoiler, '', embed.section);
-					} ) );
-					else embeds.forEach( embed => msg.reactEmoji('⏳').then( reaction => {
-						check_wiki.gamepedia(lang, msg, embed.title, wiki, '', reaction, embed.spoiler, '', embed.section);
-					} ) );
-				}
-			}, error => {
-				if ( wiki.noWiki(error.message) ) {
+				console.log( '- ' + response.statusCode + ': Error while following the links: ' + ( body && body.error && body.error.info ) );
+				return;
+			}
+			if ( body.query.normalized ) {
+				body.query.normalized.forEach( title => links.filter( link => link.title === title.from ).forEach( link => link.title = title.to ) );
+			}
+			if ( body.query.interwiki ) {
+				body.query.interwiki.forEach( interwiki => links.filter( link => link.title === interwiki.title ).forEach( link => {
+					link.url = interwiki.url + ( link.section ? '#' + link.section.toSection() : '' );
+				} ) );
+			}
+			if ( body.query.pages ) {
+				var querypages = Object.values(body.query.pages);
+				querypages.filter( page => page.invalid !== undefined ).forEach( page => links.filter( link => link.title === page.title ).forEach( link => {
+					links.splice(links.indexOf(link), 1);
+				} ) );
+				querypages.filter( page => page.missing !== undefined && page.known === undefined ).forEach( page => links.filter( link => link.title === page.title ).forEach( link => {
+					if ( ( page.ns === 2 || page.ns === 202 ) && !page.title.includes( '/' ) ) return;
+					link.url = wiki.toLink(link.title, 'action=edit&redlink=1', '', body.query.general);
+				} ) );
+			}
+			if ( links.length ) msg.sendChannel( links.map( link => link.spoiler + '<' + ( link.url || wiki.toLink(link.title, '', link.section, body.query.general) ) + '>' + link.spoiler ).join('\n'), {split:true} );
+		}, error => {
+			if ( wiki.noWiki(error.message) ) {
+				console.log( '- This wiki doesn\'t exist!' );
+				msg.reactEmoji('nowiki');
+			}
+			else {
+				console.log( '- Error while following the links: ' + error );
+			}
+		} );
+		
+		if ( embeds.length ) got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general' + ( wiki.isFandom() ? '' : '|variables' ) + '&titles=' + encodeURIComponent( embeds.map( embed => embed.title + '|Template:' + embed.title ).join('|') ) + '&format=json' ).then( response => {
+			var body = response.body;
+			if ( response.statusCode !== 200 || !body || !body.query ) {
+				if ( wiki.noWiki(response.url) || response.statusCode === 410 ) {
 					console.log( '- This wiki doesn\'t exist!' );
 					msg.reactEmoji('nowiki');
+					return;
 				}
-				else {
-					console.log( '- Error while following the links: ' + error );
+				console.log( '- ' + response.statusCode + ': Error while following the links: ' + ( body && body.error && body.error.info ) );
+				return;
+			}
+			if ( body.query.normalized ) {
+				body.query.normalized.forEach( title => embeds.filter( embed => embed.title === title.from ).forEach( embed => embed.title = title.to ) );
+			}
+			if ( body.query.pages ) {
+				var querypages = Object.values(body.query.pages);
+				querypages.filter( page => page.invalid !== undefined ).forEach( page => embeds.filter( embed => embed.title === page.title ).forEach( embed => {
+					embeds.splice(embeds.indexOf(embed), 1);
+				} ) );
+				var missing = [];
+				querypages.filter( page => page.missing !== undefined && page.known === undefined ).forEach( page => embeds.filter( embed => embed.title === page.title ).forEach( embed => {
+					if ( ( page.ns === 2 || page.ns === 202 ) && !page.title.includes( '/' ) ) return;
+					embeds.splice(embeds.indexOf(embed), 1);
+					if ( page.ns === 0 && !embed.section ) {
+						var template = querypages.find( template => template.ns === 10 && template.title.split(':').slice(1).join(':') === embed.title );
+						if ( template && template.missing === undefined ) embed.template = wiki.toLink(template.title, '', '', body.query.general);
+					}
+					if ( embed.template || !body.query.variables || !body.query.variables.some( variable => variable.toUpperCase() === embed.title ) ) missing.push(embed);
+				} ) );
+				if ( missing.length ) {
+					msg.sendChannel( missing.map( embed => embed.spoiler + '<' + ( embed.template || wiki.toLink(embed.title, 'action=edit&redlink=1', '', body.query.general) ) + '>' + embed.spoiler ).join('\n'), {split:true} );
 				}
-			} );
+			}
+			if ( embeds.length ) {
+				if ( wiki.isFandom() ) embeds.forEach( embed => msg.reactEmoji('⏳').then( reaction => {
+					check_wiki.fandom(lang, msg, embed.title, wiki, '', reaction, embed.spoiler, '', embed.section);
+				} ) );
+				else embeds.forEach( embed => msg.reactEmoji('⏳').then( reaction => {
+					check_wiki.gamepedia(lang, msg, embed.title, wiki, '', reaction, embed.spoiler, '', embed.section);
+				} ) );
+			}
+		}, error => {
+			if ( wiki.noWiki(error.message) ) {
+				console.log( '- This wiki doesn\'t exist!' );
+				msg.reactEmoji('nowiki');
+			}
+			else {
+				console.log( '- Error while following the links: ' + error );
+			}
+		} );
 	}
 }