Bläddra i källkod

Show all fixes for MC version

Markus-Rost 6 år sedan
förälder
incheckning
a5c0d60084
3 ändrade filer med 97 tillägg och 35 borttagningar
  1. 75 27
      main.js
  2. 21 7
      minecraft.json
  3. 1 1
      package.json

+ 75 - 27
main.js

@@ -83,7 +83,7 @@ function getAllSites() {
 		}
 		}
 		else {
 		else {
 			console.log( '- Wikis erfolgreich ausgelesen.' );
 			console.log( '- Wikis erfolgreich ausgelesen.' );
-			allSites = Object.assign([], body.data.wikis.filter( site => /^[a-z\d-]{1,30}\.gamepedia\.com$/.test(site.wiki_domain) ));
+			allSites = Object.assign([], body.data.wikis.filter( site => /^[a-z\d-]{1,50}\.gamepedia\.com$/.test(site.wiki_domain) ));
 			allSites.filter( site => site.wiki_domain in multiManager ).forEach( function(site) {
 			allSites.filter( site => site.wiki_domain in multiManager ).forEach( function(site) {
 				site.wiki_managers = multiManager[site.wiki_domain].concat(site.wiki_managers).filter( (value, index, self) => self.indexOf(value) === index );
 				site.wiki_managers = multiManager[site.wiki_domain].concat(site.wiki_managers).filter( (value, index, self) => self.indexOf(value) === index );
 			} );
 			} );
@@ -166,7 +166,7 @@ function cmd_settings(lang, msg, args, line) {
 			if ( args[0] ) args[0] = args[0].toLowerCase();
 			if ( args[0] ) args[0] = args[0].toLowerCase();
 			args[1] = args.slice(1).join(' ').toLowerCase().replace( /^<(.*)>$/, '$1' );
 			args[1] = args.slice(1).join(' ').toLowerCase().replace( /^<(.*)>$/, '$1' );
 			if ( args[1] && ( args[0] === 'wiki' || args[0] === 'channel' ) ) {
 			if ( args[1] && ( args[0] === 'wiki' || args[0] === 'channel' ) ) {
-				var regex = args[1].match( /^(?:(?:https?:)?\/\/)?([a-z\d-]{1,30})\.gamepedia\.com(?:\/|$)/ );
+				var regex = args[1].match( /^(?:(?:https?:)?\/\/)?([a-z\d-]{1,50})\.gamepedia\.com(?:\/|$)/ );
 			}
 			}
 			var langs = '\n' + lang.settings.langhelp.replaceSave( '%s', process.env.prefix + ' settings lang' ) + ' `' + i18n.allLangs[1].join(', ') + '`';
 			var langs = '\n' + lang.settings.langhelp.replaceSave( '%s', process.env.prefix + ' settings lang' ) + ' `' + i18n.allLangs[1].join(', ') + '`';
 			var wikis = '\n' + lang.settings.wikihelp.replaceSave( '%s', process.env.prefix + ' settings wiki' );
 			var wikis = '\n' + lang.settings.wikihelp.replaceSave( '%s', process.env.prefix + ' settings wiki' );
@@ -712,7 +712,7 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
 				else if ( body.query.interwiki ) {
 				else if ( body.query.interwiki ) {
 					var inter = body.query.interwiki[0];
 					var inter = body.query.interwiki[0];
 					var intertitle = inter.title.substr(inter.iw.length + 1);
 					var intertitle = inter.title.substr(inter.iw.length + 1);
-					var regex = inter.url.match( /^(?:https?:)?\/\/([a-z\d-]{1,30})\.gamepedia\.com(?:\/|$)/ );
+					var regex = inter.url.match( /^(?:https?:)?\/\/([a-z\d-]{1,50})\.gamepedia\.com(?:\/|$)/ );
 					if ( regex !== null && selfcall < 3 ) {
 					if ( regex !== null && selfcall < 3 ) {
 						if ( msg.channel.type !== 'text' || !pause[msg.guild.id] ) {
 						if ( msg.channel.type !== 'text' || !pause[msg.guild.id] ) {
 							var iwtitle = decodeURIComponent( inter.url.replace( regex[0], '' ) ).replace( /\_/g, ' ' ).replaceSave( intertitle.replace( /\_/g, ' ' ), intertitle );
 							var iwtitle = decodeURIComponent( inter.url.replace( regex[0], '' ) ).replace( /\_/g, ' ' ).replaceSave( intertitle.replace( /\_/g, ' ' ), intertitle );
@@ -988,7 +988,7 @@ function cmd_user(lang, msg, namespace, username, wiki, linksuffix, querypage, c
 					var group = [lang.user.info.group];
 					var group = [lang.user.info.group];
 					for ( var i = 0; i < lang.user.groups.length; i++ ) {
 					for ( var i = 0; i < lang.user.groups.length; i++ ) {
 						if ( groups.includes( lang.user.groups[i][0] ) ) {
 						if ( groups.includes( lang.user.groups[i][0] ) ) {
-							var thisSite = allSites.find( site => site.wiki_domain === wiki + '.gamepedia.com' );
+							var thisSite = allSites.find( site => site.wiki_domain === body.query.general.servername );
 							if ( lang.user.groups[i][0] === 'hydra_staff' && thisSite && thisSite.wiki_managers.includes( username ) ) group.push(lang.user.manager);
 							if ( lang.user.groups[i][0] === 'hydra_staff' && thisSite && thisSite.wiki_managers.includes( username ) ) group.push(lang.user.manager);
 							else group.push(lang.user.groups[i][1]);
 							else group.push(lang.user.groups[i][1]);
 							break;
 							break;
@@ -1289,34 +1289,33 @@ function cmd_overview(lang, msg, wiki, reaction, spoiler) {
 }
 }
 
 
 function cmd_bug(lang, mclang, msg, args, title, cmd, querystring, fragment, reaction, spoiler) {
 function cmd_bug(lang, mclang, msg, args, title, cmd, querystring, fragment, reaction, spoiler) {
-	if ( args.length && /\d+$/.test(args[0]) && !args[1] ) {
+	var invoke = args[0];
+	args = args.slice(1);
+	if ( invoke && /\d+$/.test(invoke) && !args.length ) {
 		var project = '';
 		var project = '';
-		if ( /^\d+$/.test(args[0]) ) project = 'MC-';
+		if ( /^\d+$/.test(invoke) ) project = 'MC-';
 		request( {
 		request( {
-			uri: 'https://bugs.mojang.com/rest/api/2/issue/' + project + args[0] + '?fields=summary,issuelinks,fixVersions,resolution,status',
+			uri: 'https://bugs.mojang.com/rest/api/2/issue/' + encodeURIComponent( project + invoke ) + '?fields=summary,issuelinks,fixVersions,resolution,status',
 			json: true
 			json: true
 		}, function( error, response, body ) {
 		}, function( error, response, body ) {
 			var link = 'https://bugs.mojang.com/browse/';
 			var link = 'https://bugs.mojang.com/browse/';
 			if ( error || !response || response.statusCode !== 200 || !body || body['status-code'] === 404 || body.errorMessages || body.errors ) {
 			if ( error || !response || response.statusCode !== 200 || !body || body['status-code'] === 404 || body.errorMessages || body.errors ) {
-				if ( body.errorMessages || body.errors ) {
-					if ( body.errorMessages ) {
-						if ( body.errorMessages.includes( 'Issue Does Not Exist' ) ) {
-							msg.reactEmoji('🤷');
-						}
-						else if ( body.errorMessages.includes( 'You do not have the permission to see the specified issue.' ) ) {
-							msg.sendChannel( spoiler + mclang.bug.private + '\n' + link + project + args[0] + spoiler );
-						}
-						else {
-							console.log( '- Fehler beim Erhalten der Zusammenfassung' + ( error ? ': ' + error : ( body ? ( body.errorMessages ? ': ' + body.errorMessages.join(' - ') : '.' ) : '.' ) ) );
-							msg.reactEmoji('error');
-						}
+				if ( body && body.errorMessages ) {
+					if ( body.errorMessages.includes( 'Issue Does Not Exist' ) ) {
+						msg.reactEmoji('🤷');
+					}
+					else if ( body.errorMessages.includes( 'You do not have the permission to see the specified issue.' ) ) {
+						msg.sendChannel( spoiler + mclang.bug.private + '\n' + link + project + invoke + spoiler );
+					}
+					else {
+						console.log( '- Fehler beim Erhalten des Fehlers: ' + body.errorMessages.join(' - ') );
+						msg.reactEmoji('error');
 					}
 					}
-					else msg.reactEmoji('error');
 				}
 				}
 				else {
 				else {
-					console.log( '- Fehler beim Erhalten der Zusammenfassung' + ( error ? ': ' + error : ( body ? ': ' + body.message : '.' ) ) );
+					console.log( '- Fehler beim Erhalten der Fehlers' + ( error ? ': ' + error : ( body ? ': ' + body.message : '.' ) ) );
 					if ( body && body['status-code'] === 404 ) msg.reactEmoji('error');
 					if ( body && body['status-code'] === 404 ) msg.reactEmoji('error');
-					else msg.sendChannelError( spoiler + link + project + args[0] + spoiler );
+					else msg.sendChannelError( spoiler + link + project + invoke + spoiler );
 				}
 				}
 			}
 			}
 			else {
 			else {
@@ -1336,10 +1335,13 @@ function cmd_bug(lang, mclang, msg, args, title, cmd, querystring, fragment, rea
 							if ( embed.fields.length < 25 ) embed.addField( name, value );
 							if ( embed.fields.length < 25 ) embed.addField( name, value );
 							else extrabugs.push({name,value,inline:false});
 							else extrabugs.push({name,value,inline:false});
 						} );
 						} );
-						if ( extrabugs.length ) embed.setFooter( 'And ' + extrabugs.length + '  more links.' );
+						if ( extrabugs.length ) embed.setFooter( mclang.bug.more.replaceSave( '%s', extrabugs.length ) );
 					}
 					}
 					var status = '**' + ( body.fields.resolution ? body.fields.resolution.name : body.fields.status.name ) + ':** ';
 					var status = '**' + ( body.fields.resolution ? body.fields.resolution.name : body.fields.status.name ) + ':** ';
-					var fixed = ( body.fields.resolution && body.fields.fixVersions.length ? '\n' + mclang.bug.fixed + ' ' + body.fields.fixVersions.map( v => v.name ).join(', ') : '' );
+					var fixed = '';
+					if ( body.fields.resolution && body.fields.fixVersions && body.fields.fixVersions.length ) {
+						fixed = '\n' + mclang.bug.fixed + ' ' + body.fields.fixVersions.map( v => v.name ).join(', ');
+					}
 					msg.sendChannel( spoiler + status + body.fields.summary.escapeFormatting() + '\n<' + link + body.key + '>' + fixed + spoiler, embed );
 					msg.sendChannel( spoiler + status + body.fields.summary.escapeFormatting() + '\n<' + link + body.key + '>' + fixed + spoiler, embed );
 				}
 				}
 			}
 			}
@@ -1347,6 +1349,51 @@ function cmd_bug(lang, mclang, msg, args, title, cmd, querystring, fragment, rea
 			if ( reaction ) reaction.removeEmoji();
 			if ( reaction ) reaction.removeEmoji();
 		} );
 		} );
 	}
 	}
+	else if ( invoke && invoke.toLowerCase() === 'version' && args.length && args.join(' ').length < 100 ) {
+		var jql = encodeURIComponent( 'fixVersion="' + args.join(' ') + '"' );
+		request( {
+			uri: 'https://bugs.mojang.com/rest/api/2/search?fields=summary,resolution,status&jql=' + jql + '&maxResults=25',
+			json: true
+		}, function( error, response, body ) {
+			var link = 'https://bugs.mojang.com/issues/?jql=' + jql;
+			if ( error || !response || response.statusCode !== 200 || !body || body['status-code'] === 404 || body.errorMessages || body.errors ) {
+				if ( body && body.errorMessages ) {
+					if ( body.errorMessages.includes( 'The value \'' + args.join(' ') + '\' does not exist for the field \'fixVersion\'.' ) ) {
+						msg.reactEmoji('🤷');
+					}
+					else {
+						console.log( '- Fehler beim Erhalten des Fehlers: ' + body.errorMessages.join(' - ') );
+						msg.reactEmoji('error');
+					}
+				}
+				else {
+					console.log( '- Fehler beim Erhalten der Fehlers' + ( error ? ': ' + error : ( body ? ': ' + body.message : '.' ) ) );
+					if ( body && body['status-code'] === 404 ) msg.reactEmoji('error');
+					else msg.sendChannelError( spoiler + link + spoiler );
+				}
+			}
+			else {
+				if ( !body.issues ) {
+					msg.reactEmoji('error');
+				}
+				else {
+					if ( body.total > 0 ) {
+						var embed = new Discord.RichEmbed();
+						body.issues.forEach( bug => {
+							var status = ( bug.fields.resolution ? bug.fields.resolution.name : bug.fields.status.name );
+							var value = status + ': [' + bug.fields.summary.escapeFormatting() + '](https://bugs.mojang.com/browse/' + bug.key + ')';
+							embed.addField( bug.key, value );
+						} );
+						if ( body.total > 25 ) embed.setFooter( mclang.bug.more.replaceSave( '%s', body.total - 25 ) );
+					}
+					var total = '**' + args.join(' ') + ':** ' + mclang.bug.total.replaceSave( '%s', body.total );
+					msg.sendChannel( spoiler + total + '\n<' + link + '>' + spoiler, embed );
+				}
+			}
+			
+			if ( reaction ) reaction.removeEmoji();
+		} );
+	}
 	else {
 	else {
 		msg.notminecraft = true;
 		msg.notminecraft = true;
 		check_wiki(lang, msg, title, mclang.link, cmd, reaction, spoiler, querystring, fragment);
 		check_wiki(lang, msg, title, mclang.link, cmd, reaction, spoiler, querystring, fragment);
@@ -1399,15 +1446,16 @@ function cmd_get(lang, msg, args, line) {
 			var guild = client.guilds.get(id);
 			var guild = client.guilds.get(id);
 			var guildname = ['Guild:', guild.name.escapeFormatting() + ' `' + guild.id + '`' + ( pause[guild.id] ? '\\*' : '' )];
 			var guildname = ['Guild:', guild.name.escapeFormatting() + ' `' + guild.id + '`' + ( pause[guild.id] ? '\\*' : '' )];
 			var guildowner = ['Owner:', guild.owner.user.tag.escapeFormatting() + ' `' + guild.ownerID + '` ' + guild.owner.toString()];
 			var guildowner = ['Owner:', guild.owner.user.tag.escapeFormatting() + ' `' + guild.ownerID + '` ' + guild.owner.toString()];
+			var guildsize = ['Size:', guild.memberCount + ' members (' + guild.members.filter( member => member.user.bot ).size + ' bots)'];
 			var guildpermissions = ['Missing permissions:', ( guild.me.permissions.has(defaultPermissions) ? '*none*' : '`' + guild.me.permissions.missing(defaultPermissions).join('`, `') + '`' )];
 			var guildpermissions = ['Missing permissions:', ( guild.me.permissions.has(defaultPermissions) ? '*none*' : '`' + guild.me.permissions.missing(defaultPermissions).join('`, `') + '`' )];
 			var guildsettings = ['Settings:', ( guild.id in settings ? '```json\n' + JSON.stringify( settings[guild.id], null, '\t' ) + '\n```' : '*default*' )];
 			var guildsettings = ['Settings:', ( guild.id in settings ? '```json\n' + JSON.stringify( settings[guild.id], null, '\t' ) + '\n```' : '*default*' )];
 			if ( msg.showEmbed() ) {
 			if ( msg.showEmbed() ) {
 				var text = '';
 				var text = '';
-				var embed = new Discord.RichEmbed().addField( guildname[0], guildname[1] ).addField( guildowner[0], guildowner[1] ).addField( guildpermissions[0], guildpermissions[1] ).addField( guildsettings[0], guildsettings[1] );
+				var embed = new Discord.RichEmbed().addField( guildname[0], guildname[1] ).addField( guildowner[0], guildowner[1] ).addField( guildsize[0], guildsize[1] ).addField( guildpermissions[0], guildpermissions[1] ).addField( guildsettings[0], guildsettings[1] );
 			}
 			}
 			else {
 			else {
 				var embed = {};
 				var embed = {};
-				var text = guildname.join(' ') + '\n' + guildowner.join(' ') + '\n' + guildpermissions.join(' ') + '\n' + guildsettings.join(' ');
+				var text = guildname.join(' ') + '\n' + guildowner.join(' ') + '\n' + guildsize.join(' ') + '\n' + guildpermissions.join(' ') + '\n' + guildsettings.join(' ');
 			}
 			}
 			msg.sendChannel( text, embed, true );
 			msg.sendChannel( text, embed, true );
 		} else if ( client.guilds.some( guild => guild.members.has(id) ) ) {
 		} else if ( client.guilds.some( guild => guild.members.has(id) ) ) {
@@ -1654,7 +1702,7 @@ client.on( 'message', msg => {
 					if ( ownercmd ) ownercmdmap[aliasInvoke](lang, msg, args, line);
 					if ( ownercmd ) ownercmdmap[aliasInvoke](lang, msg, args, line);
 					else if ( channel.type !== 'text' || !pause[msg.guild.id] || ( msg.isAdmin() && aliasInvoke in pausecmdmap ) ) {
 					else if ( channel.type !== 'text' || !pause[msg.guild.id] || ( msg.isAdmin() && aliasInvoke in pausecmdmap ) ) {
 						if ( aliasInvoke in cmdmap ) cmdmap[aliasInvoke](lang, msg, args, line);
 						if ( aliasInvoke in cmdmap ) cmdmap[aliasInvoke](lang, msg, args, line);
-						else if ( /^![a-z\d-]{1,30}$/.test(invoke) ) cmd_link(lang, msg, args.join(' '), invoke.substr(1), ' ' + invoke + ' ');
+						else if ( /^![a-z\d-]{1,50}$/.test(invoke) ) cmd_link(lang, msg, args.join(' '), invoke.substr(1), ' ' + invoke + ' ');
 						else cmd_link(lang, msg, line.split(' ').slice(1).join(' '));
 						else cmd_link(lang, msg, line.split(' ').slice(1).join(' '));
 					}
 					}
 				} else if ( line.hasPrefix() && count === 10 ) {
 				} else if ( line.hasPrefix() && count === 10 ) {

+ 21 - 7
minecraft.json

@@ -6,7 +6,9 @@
 		},
 		},
 		"bug": {
 		"bug": {
 			"private": "**Private Issue**",
 			"private": "**Private Issue**",
-			"fixed": "Fixed Version:"
+			"fixed": "Fixed Version:",
+			"more": "And %s more.",
+			"total": "%s issues fixed"
 		},
 		},
 		"cmd": {
 		"cmd": {
 			"page": "Commands/"
 			"page": "Commands/"
@@ -21,7 +23,9 @@
 		},
 		},
 		"bug": {
 		"bug": {
 			"private": "**Privater Fehler**",
 			"private": "**Privater Fehler**",
-			"fixed": "Lösungsversion:"
+			"fixed": "Lösungsversion:",
+			"more": "Und %s mehr.",
+			"total": "%s Fehler korrigiert"
 		},
 		},
 		"cmd": {
 		"cmd": {
 			"page": "Befehl/"
 			"page": "Befehl/"
@@ -35,7 +39,9 @@
 		},
 		},
 		"bug": {
 		"bug": {
 			"private": "**Problème privé**",
 			"private": "**Problème privé**",
-			"fixed": "Corrigé lors de la version"
+			"fixed": "Corrigé lors de la version",
+			"more": "Et %s autres.",
+			"total": "%s bugs corrigés"
 		},
 		},
 		"cmd": {
 		"cmd": {
 			"page": "Commandes#"
 			"page": "Commandes#"
@@ -48,7 +54,9 @@
 		},
 		},
 		"bug": {
 		"bug": {
 			"private": "**Privé issue**",
 			"private": "**Privé issue**",
-			"fixed": "Fixed versie:"
+			"fixed": "Fixed versie:",
+			"more": "En %s meer.",
+			"total": "%s bugs opgelost"
 		},
 		},
 		"cmd": {
 		"cmd": {
 			"page": "Opdrachten#"
 			"page": "Opdrachten#"
@@ -62,7 +70,9 @@
 		},
 		},
 		"bug": {
 		"bug": {
 			"private": "**Private Issue**",
 			"private": "**Private Issue**",
-			"fixed": "Naprawione w wersji:"
+			"fixed": "Naprawione w wersji:",
+			"more": "Oraz %s innych.",
+			"total": "naprawiono %s błędów"
 		},
 		},
 		"cmd": {
 		"cmd": {
 			"page": "Komendy#"
 			"page": "Komendy#"
@@ -77,7 +87,9 @@
 		},
 		},
 		"bug": {
 		"bug": {
 			"private": "**Private Issue**",
 			"private": "**Private Issue**",
-			"fixed": "Versão corrigida:"
+			"fixed": "Versão corrigida:",
+			"more": "E %s mais.",
+			"total": "%s problemas corrigidos"
 		},
 		},
 		"cmd": {
 		"cmd": {
 			"page": "en:Commands/"
 			"page": "en:Commands/"
@@ -90,7 +102,9 @@
 		},
 		},
 		"bug": {
 		"bug": {
 			"private": "**Private Issue**",
 			"private": "**Private Issue**",
-			"fixed": "Fixed Version:"
+			"fixed": "Fixed Version:",
+			"more": "Ve %s tane daha.",
+			"total": "%s hata düzeltildi"
 		},
 		},
 		"cmd": {
 		"cmd": {
 			"page": "en:Commands/"
 			"page": "en:Commands/"

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "discord-wiki-bot",
   "name": "discord-wiki-bot",
-  "version": "1.3.0",
+  "version": "1.4.0",
   "description": "Wiki-Bot is a bot for Discord with the purpose to easily link to Gamepedia wikis. He resolves redirects and follows interwiki links.",
   "description": "Wiki-Bot is a bot for Discord with the purpose to easily link to Gamepedia wikis. He resolves redirects and follows interwiki links.",
   "main": "main.js",
   "main": "main.js",
   "scripts": {
   "scripts": {