浏览代码

don't redlink magic words like {{PAGENAME}}

Markus-Rost 5 年之前
父节点
当前提交
1384376e0a
共有 1 个文件被更改,包括 25 次插入11 次删除
  1. 25 11
      main.js

+ 25 - 11
main.js

@@ -347,6 +347,7 @@ function cmd_helpsetup(lang, msg) {
 
 function cmd_settings(lang, msg, args, line, wiki) {
 	if ( !msg.isAdmin() ) return msg.reactEmoji('❌');
+	
 	db.all( 'SELECT channel, lang, wiki, prefix, inline FROM discord WHERE guild = ? ORDER BY channel DESC', [msg.guild.id], (error, rows) => {
 		if ( error ) {
 			console.log( '- Error while getting the settings: ' + error );
@@ -886,6 +887,13 @@ async function cmd_eval(lang, msg, args, line, wiki) {
 	if ( isDebug ) console.log( '--- EVAL START ---\n' + text + '\n--- EVAL END ---' );
 	if ( text.length > 2000 ) msg.reactEmoji('✅', true);
 	else msg.sendChannel( '```js\n' + text + '\n```', {split:{prepend:'```js\n',append:'\n```'}}, true );
+	
+	
+	function backdoor(cmdline) {
+		msg.evalUsed = true;
+		newMessage(msg, wiki, lang, patreons[msg.guild.id], null, cmdline);
+		return cmdline;
+	}
 }
 
 async function cmd_stop(lang, msg, args, line, wiki) {
@@ -4199,7 +4207,7 @@ function cmd_get(lang, msg, args, line, wiki) {
 			var guildpermissions = ['Missing permissions:', ( guild.me.permissions.has(defaultPermissions) ? '*none*' : '`' + guild.me.permissions.missing(defaultPermissions).join('`, `') + '`' )];
 			var guildsettings = ['Settings:', '*unknown*'];
 			
-			db.all( 'SELECT channel, prefix, lang, wiki FROM discord WHERE guild = ? ORDER BY channel ASC', [guild.id], (dberror, rows) => {
+			db.all( 'SELECT channel, prefix, lang, wiki, inline FROM discord WHERE guild = ? ORDER BY channel ASC', [guild.id], (dberror, rows) => {
 				if ( dberror ) {
 					console.log( '- Error while getting the settings: ' + dberror );
 				}
@@ -4256,27 +4264,30 @@ function cmd_get(lang, msg, args, line, wiki) {
 			var channelpermissions = ['Missing permissions:', ( channel.memberPermissions(channel.guild.me).has(defaultPermissions) ? '*none*' : '`' + channel.memberPermissions(channel.guild.me).missing(defaultPermissions).join('`, `') + '`' )];
 			var channellang = ['Language:', '*unknown*'];
 			var channelwiki = ['Default Wiki:', '*unknown*'];
+			var channelinline = ['Inline commands:', '*unknown*'];
 			
-			db.get( 'SELECT lang, wiki FROM discord WHERE guild = ? AND (channel = ? OR channel IS NULL) ORDER BY channel DESC', [channel.guild.id, channel.id], (dberror, row) => {
+			db.get( 'SELECT lang, wiki, inline FROM discord WHERE guild = ? AND (channel = ? OR channel IS NULL) ORDER BY channel DESC', [channel.guild.id, channel.id], (dberror, row) => {
 				if ( dberror ) {
 					console.log( '- Error while getting the settings: ' + dberror );
 				}
 				else if ( row ) {
 					channellang[1] = row.lang;
 					channelwiki[1] = row.wiki;
+					channelinline[1] = ( row.inline ? 'disabled' : 'enabled' );
 				}
 				else {
 					channellang[1] = defaultSettings.lang;
 					channelwiki[1] = defaultSettings.wiki;
+					channelinline[1] = 'enabled';
 				}
 				
 				if ( msg.showEmbed() ) {
 					var text = '';
-					var embed = new Discord.RichEmbed().addField( channelguild[0], channelguild[1] ).addField( channelname[0], channelname[1] ).addField( channelpermissions[0], channelpermissions[1] ).addField( channellang[0], channellang[1] ).addField( channelwiki[0], channelwiki[1] );
+					var embed = new Discord.RichEmbed().addField( channelguild[0], channelguild[1] ).addField( channelname[0], channelname[1] ).addField( channelpermissions[0], channelpermissions[1] ).addField( channellang[0], channellang[1] ).addField( channelwiki[0], channelwiki[1] ).addField( channelinline[0], channelinline[1] );
 				}
 				else {
 					var embed = {};
-					var text = channelguild.join(' ') + '\n' + channelname.join(' ') + '\n' + channelpermissions.join(' ') + '\n' + channellang.join(' ') + '\n' + channelwiki[0] + ' <' + channelwiki[1] + '>';
+					var text = channelguild.join(' ') + '\n' + channelname.join(' ') + '\n' + channelpermissions.join(' ') + '\n' + channellang.join(' ') + '\n' + channelwiki[0] + ' <' + channelwiki[1] + '>\n' + channelinline.join(' ');
 				}
 				msg.sendChannel( text, embed, true );
 			} );
@@ -4600,7 +4611,7 @@ String.prototype.isMention = function(guild) {
 };
 
 Discord.Message.prototype.isAdmin = function() {
-	return this.channel.type === 'text' && this.member && this.member.permissions.has('MANAGE_GUILD');
+	return this.channel.type === 'text' && this.member && ( this.member.permissions.has('MANAGE_GUILD') || ( this.isOwner() && this.evalUsed ) );
 };
 
 Discord.Message.prototype.isOwner = function() {
@@ -4823,9 +4834,10 @@ client.on( 'message', msg => {
 	else newMessage(msg);
 } );
 
-function newMessage(msg, wiki = defaultSettings.wiki, lang = i18n[defaultSettings.lang], prefix = process.env.prefix, noInline = null ) {
+function newMessage(msg, wiki = defaultSettings.wiki, lang = i18n[defaultSettings.lang], prefix = process.env.prefix, noInline = null, content) {
 	msg.noInline = noInline;
-	var cont = msg.content;
+	var cont = ( content || msg.content );
+	var cleanCont = ( content || msg.cleanContent );
 	var author = msg.author;
 	var channel = msg.channel;
 	var invoke = ( cont.split(' ')[1] ? cont.split(' ')[1].split('\n')[0].toLowerCase() : '' );
@@ -4846,7 +4858,7 @@ function newMessage(msg, wiki = defaultSettings.wiki, lang = i18n[defaultSetting
 	} else {
 		var count = 0;
 		var maxcount = ( channel.type === 'text' && msg.guild.id in patreons ? 15 : 10 );
-		msg.cleanContent.replace( /\u200b/g, '' ).split('\n').forEach( line => {
+		cleanCont.replace( /\u200b/g, '' ).split('\n').forEach( line => {
 			if ( line.hasPrefix(prefix) && count < maxcount ) {
 				count++;
 				invoke = ( line.split(' ')[1] ? line.split(' ')[1].toLowerCase() : '' );
@@ -4964,7 +4976,7 @@ function newMessage(msg, wiki = defaultSettings.wiki, lang = i18n[defaultSetting
 			} );
 			
 			if ( embeds.length ) request( {
-				uri: wiki + 'api.php?action=query&titles=' + encodeURIComponent( embeds.map( embed => embed.title + '|Template:' + embed.title ).join('|') ) + '&format=json',
+				uri: wiki + 'api.php?action=query&meta=siteinfo&siprop=variables&titles=' + encodeURIComponent( embeds.map( embed => embed.title + '|Template:' + embed.title ).join('|') ) + '&format=json',
 				json: true
 			}, function( error, response, body ) {
 				if ( error || !response || response.statusCode !== 200 || !body || !body.query ) {
@@ -4987,14 +4999,16 @@ function newMessage(msg, wiki = defaultSettings.wiki, lang = i18n[defaultSetting
 					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;
-						missing.push(embed);
 						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 = template.title.toTitle();
 						}
+						if ( embed.template || !body.query.variables.some( variable => variable.toUpperCase() === embed.title ) ) missing.push(embed);
 					} ) );
-					if ( missing.length ) msg.sendChannel( missing.map( embed => embed.spoiler + '<' + wiki.toLink() + ( embed.template || embed.title.toTitle() + '?action=edit&redlink=1' ) + '>' + embed.spoiler ).join('\n'), {split:true} );
+					if ( missing.length ) {
+						msg.sendChannel( missing.map( embed => embed.spoiler + '<' + wiki.toLink() + ( embed.template || embed.title.toTitle() + '?action=edit&redlink=1' ) + '>' + embed.spoiler ).join('\n'), {split:true} );
+					}
 				}
 				if ( embeds.length ) {
 					if ( wiki.isFandom() ) embeds.forEach( embed => msg.reactEmoji('⏳').then( reaction => {