| 
					
				 | 
			
			
				@@ -1,3 +1,4 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const {MessageEmbed} = require('discord.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const {defaultSettings} = require('../util/default.json'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const Lang = require('../util/i18n.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const allLangs = Lang.allLangs(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -64,117 +65,136 @@ function cmd_settings(lang, msg, args, line, wiki) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if ( !rows.length ) return msg.replyMsg( lang.get('settings.wikimissing') + wikihelp, {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				else return msg.replyMsg( lang.get('settings.' + prelang) + ' ' + ( channel || guild ).wiki + wikihelp, {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var regex = args[1].match( /^(?:https:\/\/)?([a-z\d-]{1,50}\.(?:gamepedia\.com|(?:fandom\.com|wikia\.org)(?:(?!\/wiki\/)\/[a-z-]{2,8})?))(?:\/|$)/ ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if ( !regex ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				var value = args[1].split(' '); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( value.length === 2 && value[1] === '--force' ) return msg.reactEmoji('⏳', true).then( reaction => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					got.get( value[0] + 'api.php?action=query&meta=siteinfo&siprop=general|extensions&format=json', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						responseType: 'json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} ).then( response => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						var body = response.body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if ( response.statusCode !== 200 || !body || body.batchcomplete === undefined ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							console.log( '- ' + response.statusCode + ': Error while testing the wiki: ' + ( body && body.error && body.error.info ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if ( reaction ) reaction.removeEmoji(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							msg.reactEmoji('nowiki', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							return msg.replyMsg( lang.get('settings.wikiinvalid') + wikihelp, {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			var wikinew = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			var isForced = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			var regex = args[1].match( /^(?:(?:https?:)?\/\/)?([a-z\d-]{1,50}\.(?:gamepedia\.com|(?:fandom\.com|wikia\.org)(?:(?!\/wiki\/)\/[a-z-]{2,8})?))(?:\/|$)/ ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ( regex ) wikinew = 'https://' + regex[1] + '/'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			else if ( allSites.some( site => site.wiki_domain === args[1] + '.gamepedia.com' ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				wikinew = 'https://' + args[1] + '.gamepedia.com/'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			else if ( /^(?:[a-z-]{1,8}\.)?[a-z\d-]{1,50}$/.test(args[1]) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( !args[1].includes( '.' ) ) wikinew = 'https://' + args[1] + '.fandom.com/'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				else wikinew = 'https://' + args[1].split('.')[1] + '.fandom.com/' + args[1].split('.')[0] + '/'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			else if ( /^<?(?:https?:)?\/\//.test(args[1]) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				args[1] = args[1].replace( /^<?(?:https?:)?\/\//, 'https://' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var value = args[1].split(/>? /); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( value.length === 2 && value[1] === '--force' ) isForced = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				value[0] = value[0].replace( /\/(?:api|index)\.php(?:|\?.*)$/, '/' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				wikinew = value[0] + ( value[0].endsWith( '/' ) ? '' : '/' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var text = lang.get('settings.wikiinvalid') + wikihelp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var sites = allSites.filter( site => site.wiki_display_name.toLowerCase().includes( args[1] ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( 0 < sites.length && sites.length < 21 ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					text += '\n\n' + lang.get('settings.foundwikis') + '\n' + sites.map( site => site.wiki_display_name + ': `' + site.wiki_domain + '`' ).join('\n'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return msg.replyMsg( text, {split:true}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ( wikinew.endsWith( '.gamepedia.com/' ) && !isForced ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let site = allSites.find( site => site.wiki_domain === wikinew.replace( /^https:\/\/([a-z\d-]{1,50}\.gamepedia\.com)\/$/, '$1' ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				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 => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					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 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( reaction ) reaction.removeEmoji(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						msg.reactEmoji('nowiki', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						return msg.replyMsg( lang.get('settings.wikiinvalid') + wikihelp, {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if ( !isForced ) wikinew = body.query.general.server.replace( /^(?:https?:)?\/\//, 'https://' ) + body.query.general.scriptpath + '/'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if ( wikinew.endsWith( '.gamepedia.com/' ) && !isForced ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						let site = allSites.find( site => site.wiki_domain === wikinew ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( site ) wikinew = 'https://' + ( site.wiki_crossover || site.wiki_domain ) + '/'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					else if ( wikinew.isFandom() && !isForced ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						let crossover = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( body.query.allmessages[0]['*'] ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							crossover = 'https://' + body.query.allmessages[0]['*'] + '.gamepedia.com/'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						var sql = 'UPDATE discord SET wiki = ? WHERE guild = ? AND wiki = ?'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						var sqlargs = [value[0], msg.guild.id, guild.wiki]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if ( !rows.length ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							sql = 'INSERT INTO discord(wiki, guild) VALUES(?, ?)'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							sqlargs.pop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						else if ( body.query.allmessages[1]['*'] ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							let merge = body.query.allmessages[1]['*'].split('/'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							crossover = 'https://' + merge[0] + '.fandom.com/' + ( merge[1] ? merge[1] + '/' : '' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if ( channel ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							sql = 'UPDATE discord SET wiki = ? WHERE guild = ? AND channel = ?'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							sqlargs[2] = msg.channel.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if ( !rows.includes( channel ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								if ( channel.wiki === value[0] ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									if ( reaction ) reaction.removeEmoji(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									return msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' ' + channel.wiki + wikihelp, {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								sql = 'INSERT INTO discord(wiki, guild, channel, lang, prefix) VALUES(?, ?, ?, ?, ?)'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								sqlargs.push(guild.lang, guild.prefix); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( crossover ) wikinew = crossover; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					var embed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if ( !wikinew.isFandom() && !wikinew.endsWith( '.gamepedia.com/' ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						var notice = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( body.query.general.generator.replace( /^MediaWiki 1\.(\d\d).*$/, '$1' ) <= 30 ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							console.log( '- This wiki is using ' + body.query.general.generator + '.' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							notice.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								name: 'MediaWiki', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								value: lang.get('test.MediaWiki').replaceSave( '%1$s', '[MediaWiki 1.30](https://www.mediawiki.org/wiki/MediaWiki_1.30)' ).replaceSave( '%2$s', body.query.general.generator ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						return db.run( sql, sqlargs, function (dberror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if ( dberror ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								console.log( '- Error while editing the settings: ' + dberror ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								msg.replyMsg( lang.get('settings.save_failed'), {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( !body.query.extensions.some( extension => extension.name === 'TextExtracts' ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							console.log( '- This wiki is missing Extension:TextExtracts.' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							notice.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								name: 'TextExtracts', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								value: lang.get('test.TextExtracts').replaceSave( '%s', '[TextExtracts](https://www.mediawiki.org/wiki/Extension:TextExtracts)' ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( !body.query.extensions.some( extension => extension.name === 'PageImages' ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							console.log( '- This wiki is missing Extension:PageImages.' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							notice.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								name: 'PageImages', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								value: lang.get('test.PageImages').replaceSave( '%s', '[PageImages](https://www.mediawiki.org/wiki/Extension:PageImages)' ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( notice.length ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( lang.get('test.notice') ).addFields( notice ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					var sql = 'UPDATE discord SET wiki = ? WHERE guild = ? AND wiki = ?'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					var sqlargs = [wikinew, msg.guild.id, guild.wiki]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if ( !rows.length ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						sql = 'INSERT INTO discord(wiki, guild) VALUES(?, ?)'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						sqlargs.pop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if ( channel ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						sql = 'UPDATE discord SET wiki = ? WHERE guild = ? AND channel = ?'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						sqlargs[2] = msg.channel.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( !rows.includes( channel ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if ( channel.wiki === wikinew ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								if ( reaction ) reaction.removeEmoji(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								return dberror; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								return msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' ' + channel.wiki + wikihelp, {embed}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							console.log( '- Settings successfully updated.' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if ( channel ) channel.wiki = value[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							else guild.wiki = value[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if ( channel || !rows.some( row => row.channel === msg.channel.id ) ) wiki = value[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							sql = 'INSERT INTO discord(wiki, guild, channel, lang, prefix) VALUES(?, ?, ?, ?, ?)'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							sqlargs.push(guild.lang, guild.prefix); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return db.run( sql, sqlargs, function (dberror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( dberror ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							console.log( '- Error while editing the settings: ' + dberror ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							msg.replyMsg( lang.get('settings.save_failed'), {embed}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( reaction ) reaction.removeEmoji(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' ' + value[0] + wikihelp, {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							var channels = rows.filter( row => row.channel && row.lang === guild.lang && row.wiki === guild.wiki && row.prefix === guild.prefix && row.inline === guild.inline ).map( row => row.channel ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if ( channels.length ) db.run( 'DELETE FROM discord WHERE channel IN (' + channels.map( row => '?' ).join('|') + ')', channels, function (delerror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								if ( delerror ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									console.log( '- Error while removing the settings: ' + delerror ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									return delerror; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								console.log( '- Settings successfully removed.' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							} ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}, ferror => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						console.log( '- Error while testing the wiki: ' + ferror ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							return dberror; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						console.log( '- Settings successfully updated.' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( channel ) channel.wiki = wikinew; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						else guild.wiki = wikinew; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( channel || !rows.some( row => row.channel === msg.channel.id ) ) wiki = wikinew; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						if ( reaction ) reaction.removeEmoji(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						msg.reactEmoji('nowiki', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						return msg.replyMsg( lang.get('settings.wikiinvalid') + wikihelp, {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' ' + wikinew + wikihelp, {embed}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						var channels = rows.filter( row => row.channel && row.lang === guild.lang && row.wiki === guild.wiki && row.prefix === guild.prefix && row.inline === guild.inline ).map( row => row.channel ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if ( channels.length ) db.run( 'DELETE FROM discord WHERE channel IN (' + channels.map( row => '?' ).join('|') + ')', channels, function (delerror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if ( delerror ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								console.log( '- Error while removing the settings: ' + delerror ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								return delerror; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							console.log( '- Settings successfully removed.' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( allSites.some( site => site.wiki_domain === value.join('') + '.gamepedia.com' ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					regex = ['https://' + value.join('') + '.gamepedia.com/',value.join('') + '.gamepedia.com']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				else if ( /^(?:[a-z-]{1,8}\.)?[a-z\d-]{1,50}$/.test(value.join('')) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if ( !value.join('').includes( '.' ) ) regex = ['https://' + value.join('') + '.fandom.com/',value.join('') + '.fandom.com']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					else regex = ['https://' + value.join('').split('.')[1] + '.fandom.com/' + value.join('').split('.')[0] + '/',value.join('').split('.')[1] + '.fandom.com/' + value.join('').split('.')[0]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					var text = lang.get('settings.wikiinvalid') + wikihelp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					var sites = allSites.filter( site => site.wiki_display_name.toLowerCase().includes( value.join(' ') ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if ( 0 < sites.length && sites.length < 21 ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						text += '\n\n' + lang.get('settings.foundwikis') + '\n' + sites.map( site => site.wiki_display_name + ': `' + site.wiki_domain + '`' ).join('\n'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					return msg.replyMsg( text, {split:true}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var sql = 'UPDATE discord SET wiki = ? WHERE guild = ? AND wiki = ?'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var sqlargs = ['https://' + regex[1] + '/', msg.guild.id, guild.wiki]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if ( !rows.length ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sql = 'INSERT INTO discord(wiki, guild) VALUES(?, ?)'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sqlargs.pop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if ( channel ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sql = 'UPDATE discord SET wiki = ? WHERE guild = ? AND channel = ?'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sqlargs[2] = msg.channel.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( !rows.includes( channel ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if ( channel.wiki === 'https://' + regex[1] + '/' ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						return msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' ' + channel.wiki + wikihelp, {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sql = 'INSERT INTO discord(wiki, guild, channel, lang, prefix) VALUES(?, ?, ?, ?, ?)'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sqlargs.push(guild.lang, guild.prefix); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return db.run( sql, sqlargs, function (dberror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( dberror ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					console.log( '- Error while editing the settings: ' + dberror ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					msg.replyMsg( lang.get('settings.save_failed'), {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					return dberror; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				console.log( '- Settings successfully updated.' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( channel ) channel.wiki = 'https://' + regex[1] + '/'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				else guild.wiki = 'https://' + regex[1] + '/'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( channel || !rows.some( row => row.channel === msg.channel.id ) ) wiki = 'https://' + regex[1] + '/'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' https://' + regex[1] + '/' + wikihelp, {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				var channels = rows.filter( row => row.channel && row.lang === guild.lang && row.wiki === guild.wiki && row.prefix === guild.prefix && row.inline === guild.inline ).map( row => row.channel ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( channels.length ) db.run( 'DELETE FROM discord WHERE channel IN (' + channels.map( row => '?' ).join('|') + ')', channels, function (delerror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if ( delerror ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						console.log( '- Error while removing the settings: ' + delerror ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						return delerror; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					console.log( '- Settings successfully removed.' ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}, ferror => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					console.log( '- Error while testing the wiki: ' + ferror ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if ( reaction ) reaction.removeEmoji(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					msg.reactEmoji('nowiki', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return msg.replyMsg( lang.get('settings.wikiinvalid') + wikihelp, {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -220,7 +240,7 @@ function cmd_settings(lang, msg, args, line, wiki) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if ( channel || !( msg.guild.id in patreons ) || !rows.some( row => row.channel === msg.channel.id ) ) lang = new Lang(allLangs.map[args[1]]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' `' + allLangs.names[allLangs.map[args[1]]][1] + '`\n' + lang.get('settings.langhelp').replaceSave( '%s', prefix + 'settings ' + prelang ) + ' `' + Object.values(allLangs.names).join('`, `') + '`', {}, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				var channels = rows.filter( row => row.channel && row.lang === lang.lang && row.wiki === guild.wiki && row.prefix === guild.prefix && row.inline === guild.inline ).map( row => row.channel ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var channels = rows.filter( row => row.channel && row.lang === guild.lang && row.wiki === guild.wiki && row.prefix === guild.prefix && row.inline === guild.inline ).map( row => row.channel ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if ( channels.length ) db.run( 'DELETE FROM discord WHERE channel IN (' + channels.map( row => '?' ).join('|') + ')', channels, function (delerror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if ( delerror ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						console.log( '- Error while removing the settings: ' + delerror ); 
			 |