Browse Source

More info for file and category pages

Markus-Rost 6 years ago
parent
commit
cb0ba4ba42
2 changed files with 177 additions and 19 deletions
  1. 117 7
      i18n.json
  2. 60 12
      main.js

+ 117 - 7
i18n.json

@@ -147,7 +147,23 @@
 			"random": "random",
 			"random": "random",
 			"overview": "overview",
 			"overview": "overview",
 			"infopage": "Not the correct result? Use %s for a direct link.",
 			"infopage": "Not the correct result? Use %s for a direct link.",
-			"infosearch": "Not the correct result? Use %1$s for a direct link or %2$s for a list of all hits."
+			"infosearch": "Not the correct result? Use %1$s for a direct link or %2$s for a list of all hits.",
+			"category": {
+				"content": "Content of this category:",
+				"empty": "*This category is empty*",
+				"pages": {
+					"default": "%s pages",
+					"1": "%s page"
+				},
+				"files": {
+					"default": "%s files",
+					"1": "%s file"
+				},
+				"subcats": {
+					"default": "%s categories",
+					"1": "%s category"
+				}
+			}
 		},
 		},
 		"invite": {
 		"invite": {
 			"bot": "Use this link to invite me to another server:"
 			"bot": "Use this link to invite me to another server:"
@@ -328,7 +344,23 @@
 			"random": "zufall",
 			"random": "zufall",
 			"overview": "übersicht",
 			"overview": "übersicht",
 			"infopage": "Nicht das richtige Ergebnis? Nutze %s für einen direkten Link.",
 			"infopage": "Nicht das richtige Ergebnis? Nutze %s für einen direkten Link.",
-			"infosearch": "Nicht das richtige Ergebnis? Nutze %1$s für einen direkten Link oder %2$s für eine Liste mit allen Treffern."
+			"infosearch": "Nicht das richtige Ergebnis? Nutze %1$s für einen direkten Link oder %2$s für eine Liste mit allen Treffern.",
+			"category": {
+				"content": "Inhalt der Kategorie:",
+				"empty": "*Diese Kategorie ist leer*",
+				"pages": {
+					"default": "%s Seiten",
+					"1": "Eine Seite"
+				},
+				"files": {
+					"default": "%s Dateien",
+					"1": "Eine Datei"
+				},
+				"subcats": {
+					"default": "%s Kategorien",
+					"1": "Eine Kategorie"
+				}
+			}
 		},
 		},
 		"invite": {
 		"invite": {
 			"bot": "Du kannst mich mit diesem Link auf einen anderen Server einladen:"
 			"bot": "Du kannst mich mit diesem Link auf einen anderen Server einladen:"
@@ -522,7 +554,23 @@
 			"random": "random",
 			"random": "random",
 			"overview": "overview",
 			"overview": "overview",
 			"infopage": "Pas le bon résultat ? Utilisez %s pour un lien direct.",
 			"infopage": "Pas le bon résultat ? Utilisez %s pour un lien direct.",
-			"infosearch": "Pas le bon résultat ? Utilisez %1$s pour un lien direct ou %2$s pour une liste de toutes les correspondances."
+			"infosearch": "Pas le bon résultat ? Utilisez %1$s pour un lien direct ou %2$s pour une liste de toutes les correspondances.",
+			"category": {
+				"content": "Contenu de cette catégorie :",
+				"empty": "*Cette catégorie est vide*",
+				"pages": {
+					"default": "%s pages",
+					"1": "%s page"
+				},
+				"files": {
+					"default": "%s fichiers",
+					"1": "%s fichier"
+				},
+				"subcats": {
+					"default": "%s catégories",
+					"1": "%s catégorie"
+				}
+			}
 		},
 		},
 		"invite": {
 		"invite": {
 			"bot": "Utilisez ce lien pour m'inviter sur un autre serveur :"
 			"bot": "Utilisez ce lien pour m'inviter sur un autre serveur :"
@@ -730,7 +778,23 @@
 			"random": "willekeurig",
 			"random": "willekeurig",
 			"overview": "overzicht",
 			"overview": "overzicht",
 			"infopage": "Niet het gewenste resultaat? Gebruik %s voor een rechtstreekse link.",
 			"infopage": "Niet het gewenste resultaat? Gebruik %s voor een rechtstreekse link.",
-			"infosearch": "Niet het gewenste resultaat? Gebruik %1$s voor een rechtstreekse link of %2$s voor een lijst van alle overeenkomsten."
+			"infosearch": "Niet het gewenste resultaat? Gebruik %1$s voor een rechtstreekse link of %2$s voor een lijst van alle overeenkomsten.",
+			"category": {
+				"content": "Inhoud van deze categorie:",
+				"empty": "*Deze categorie is leeg*",
+				"pages": {
+					"default": "%s pagina's",
+					"1": "%s pagina"
+				},
+				"files": {
+					"default": "%s bestanden",
+					"1": "%s bestand"
+				},
+				"subcats": {
+					"default": "%s categorieën",
+					"1": "%s categorie"
+				}
+			}
 		},
 		},
 		"invite": {
 		"invite": {
 			"bot": "Gebruik deze link om mij aan een andere server uit te nodigen:"
 			"bot": "Gebruik deze link om mij aan een andere server uit te nodigen:"
@@ -917,7 +981,23 @@
 			"random": "random",
 			"random": "random",
 			"overview": "overview",
 			"overview": "overview",
 			"infopage": "Nie to czego szukałeś? Użyj %s dla bezpośredniego linku.",
 			"infopage": "Nie to czego szukałeś? Użyj %s dla bezpośredniego linku.",
-			"infosearch": "Nie to czego szukałeś? Użyj %1$s dla bezpośredniego linku lub %2$s dla listy wszystkich wyników."
+			"infosearch": "Nie to czego szukałeś? Użyj %1$s dla bezpośredniego linku lub %2$s dla listy wszystkich wyników.",
+			"category": {
+				"content": "Zawartość tej kategorii:",
+				"empty": "*Ta kategoria jest pusta*",
+				"pages": {
+					"default": "%s stron",
+					"1": "%s strona"
+				},
+				"files": {
+					"default": "%s plików",
+					"1": "%s plik"
+				},
+				"subcats": {
+					"default": "%s kategorii",
+					"1": "%s kategoria"
+				}
+			}
 		},
 		},
 		"invite": {
 		"invite": {
 			"bot": "Użyj tego linku aby zaprosić mnie na inny serwer:"
 			"bot": "Użyj tego linku aby zaprosić mnie na inny serwer:"
@@ -1114,7 +1194,23 @@
 			"random": "random",
 			"random": "random",
 			"overview": "overview",
 			"overview": "overview",
 			"infopage": "Não é o resultado correto? Use %s para um link direto.",
 			"infopage": "Não é o resultado correto? Use %s para um link direto.",
-			"infosearch": "Não é o resultado correto? Use %1$s para um link direto ou %2$s para uma lista de todos os acessos."
+			"infosearch": "Não é o resultado correto? Use %1$s para um link direto ou %2$s para uma lista de todos os acessos.",
+			"category": {
+				"content": "Conteúdo  nessa categoria:",
+				"empty": "*Esta categoria está vazia*",
+				"pages": {
+					"default": "%s páginas",
+					"1": "%s página"
+				},
+				"files": {
+					"default": "%s arquivos",
+					"1": "%s arquivo"
+				},
+				"subcats": {
+					"default": "%s categorias",
+					"1": "%s categoria"
+				}
+			}
 		},
 		},
 		"invite": {
 		"invite": {
 			"bot": "Use este link para me convidar para outro servidor:"
 			"bot": "Use este link para me convidar para outro servidor:"
@@ -1313,7 +1409,21 @@
 			"random": "random",
 			"random": "random",
 			"overview": "overview",
 			"overview": "overview",
 			"infopage": "Doğru sonucu alamadın mı? Doğrudan bir bağlantı için %s kullan.",
 			"infopage": "Doğru sonucu alamadın mı? Doğrudan bir bağlantı için %s kullan.",
-			"infosearch": "Doğru sonucu alamadın mı? Doğrudan bir bağlantı için %s, tüm isabetlerin listesi için %2$s kullan."
+			"infosearch": "Doğru sonucu alamadın mı? Doğrudan bir bağlantı için %s, tüm isabetlerin listesi için %2$s kullan.",
+			"category": {
+				"content": "Bu kategorinin içeriği:",
+				"empty": "*Bu kategori boş*",
+				"pages": {
+					"default": "%s sayfa"
+				},
+				"files": {
+					"default": "%s dosya"
+				},
+				"subcats": {
+					"default": "%s kategoriler",
+					"1": "%s kategori"
+				}
+			}
 		},
 		},
 		"invite": {
 		"invite": {
 			"bot": "Beni başka bir sunucuya davet etmek için bu bağlantıyı kullan:"
 			"bot": "Beni başka bir sunucuya davet etmek için bu bağlantıyı kullan:"

+ 60 - 12
main.js

@@ -525,9 +525,9 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
 	}
 	}
 	else if ( invoke === 'diff' && args.join('') ) cmd_diff(lang, msg, args, wiki, reaction, spoiler);
 	else if ( invoke === 'diff' && args.join('') ) cmd_diff(lang, msg, args, wiki, reaction, spoiler);
 	else {
 	else {
-		var noRedirect = /(?:^|&)redirect=no(?:&|$)/.test(querystring) || /(?:^|&)action=(?!view(?:&|$))/.test(querystring)
+		var noRedirect = ( /(?:^|&)redirect=no(?:&|$)/.test(querystring) || /(?:^|&)action=(?!view(?:&|$))/.test(querystring) );
 		request( {
 		request( {
-			uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&meta=siteinfo&siprop=general|namespaces|specialpagealiases&iwurl=true' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=pageimages|extracts&exsentences=10&exintro=true&explaintext=true&titles=' + encodeURIComponent( title ) + '&format=json',
+			uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&meta=siteinfo&siprop=general|namespaces|specialpagealiases&iwurl=true' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=pageimages|categoryinfo|extracts&exsentences=10&exintro=true&explaintext=true&titles=' + encodeURIComponent( title ) + '&format=json',
 			json: true
 			json: true
 		}, function( error, response, body ) {
 		}, function( error, response, body ) {
 			if ( body && body.warnings ) log_warn(body.warnings);
 			if ( body && body.warnings ) log_warn(body.warnings);
@@ -557,9 +557,9 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
 						var userparts = querypage.title.split(':');
 						var userparts = querypage.title.split(':');
 						cmd_user(lang, msg, userparts[0].toTitle() + ':', userparts.slice(1).join(':'), wiki, linksuffix, reaction, spoiler);
 						cmd_user(lang, msg, userparts[0].toTitle() + ':', userparts.slice(1).join(':'), wiki, linksuffix, reaction, spoiler);
 					}
 					}
-					else if ( ( querypage.missing !== undefined && querypage.known === undefined ) || querypage.invalid !== undefined ) {
+					else if ( ( querypage.missing !== undefined && querypage.known === undefined && !( noRedirect || querypage.categoryinfo ) ) || querypage.invalid !== undefined ) {
 						request( {
 						request( {
-							uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&prop=pageimages|extracts&exsentences=10&exintro=true&explaintext=true&generator=search&gsrnamespace=4|12|14|' + Object.values(body.query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&gsrlimit=1&gsrsearch=' + encodeURIComponent( title ) + '&format=json',
+							uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&prop=pageimages|categoryinfo|extracts&exsentences=10&exintro=true&explaintext=true&generator=search&gsrnamespace=4|12|14|' + Object.values(body.query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&gsrlimit=1&gsrsearch=' + encodeURIComponent( title ) + '&format=json',
 							json: true
 							json: true
 						}, function( srerror, srresponse, srbody ) {
 						}, function( srerror, srresponse, srbody ) {
 							if ( srbody && srbody.warnings ) log_warn(srbody.warnings);
 							if ( srbody && srbody.warnings ) log_warn(srbody.warnings);
@@ -574,6 +574,7 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
 								else {
 								else {
 									querypage = Object.values(srbody.query.pages)[0];
 									querypage = Object.values(srbody.query.pages)[0];
 									var pagelink = 'https://' + wiki + '.gamepedia.com/' + querypage.title.toTitle() + linksuffix;
 									var pagelink = 'https://' + wiki + '.gamepedia.com/' + querypage.title.toTitle() + linksuffix;
+									var text = '';
 									var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
 									var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
 									if ( querypage.extract ) {
 									if ( querypage.extract ) {
 										var extract = querypage.extract.escapeFormatting();
 										var extract = querypage.extract.escapeFormatting();
@@ -583,20 +584,42 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
 									if ( querypage.pageimage ) {
 									if ( querypage.pageimage ) {
 										var pageimage = 'https://' + wiki + '.gamepedia.com/Special:FilePath/' + querypage.pageimage;
 										var pageimage = 'https://' + wiki + '.gamepedia.com/Special:FilePath/' + querypage.pageimage;
 										if ( querypage.ns === 6 ) {
 										if ( querypage.ns === 6 ) {
-											if ( /\.(?:png|jpg|jpeg|gif)$/.test(querypage.pageimage.toLowerCase()) ) embed.setImage( pageimage );
-											else embed.attachFiles( [{attachment:pageimage,name:querypage.pageimage}] );
+											if ( msg.showEmbed() && /\.(?:png|jpg|jpeg|gif)$/.test(querypage.pageimage.toLowerCase()) ) embed.setImage( pageimage );
+											else if ( msg.uploadFiles() ) embed.attachFiles( [{attachment:pageimage,name:( spoiler ? 'SPOILER ' : '' ) + querypage.pageimage}] );
 										} else embed.setThumbnail( pageimage );
 										} else embed.setThumbnail( pageimage );
 									} else embed.setThumbnail( body.query.general.logo );
 									} else embed.setThumbnail( body.query.general.logo );
 									
 									
 									if ( title.replace( /\-/g, ' ' ).toTitle().toLowerCase() === querypage.title.replace( /\-/g, ' ' ).toTitle().toLowerCase() ) {
 									if ( title.replace( /\-/g, ' ' ).toTitle().toLowerCase() === querypage.title.replace( /\-/g, ' ' ).toTitle().toLowerCase() ) {
-										msg.sendChannel( spoiler + pagelink + spoiler, embed );
+										text = '';
 									}
 									}
 									else if ( !srbody.continue ) {
 									else if ( !srbody.continue ) {
-										msg.sendChannel( spoiler + pagelink + '\n' + lang.search.infopage.replaceSave( '%s', '`' + process.env.prefix + cmd + lang.search.page + ' ' + title + linksuffix + '`' ) + spoiler, embed );
+										text = '\n' + lang.search.infopage.replaceSave( '%s', '`' + process.env.prefix + cmd + lang.search.page + ' ' + title + linksuffix + '`' );
 									}
 									}
 									else {
 									else {
-										msg.sendChannel( spoiler + pagelink + '\n' + lang.search.infosearch.replaceSave( '%1$s', '`' + process.env.prefix + cmd + lang.search.page + ' ' + title + linksuffix + '`' ).replaceSave( '%2$s', '`' + process.env.prefix + cmd + lang.search.search + ' ' + title + linksuffix + '`' ) + spoiler, embed );
+										text = '\n' + lang.search.infosearch.replaceSave( '%1$s', '`' + process.env.prefix + cmd + lang.search.page + ' ' + title + linksuffix + '`' ).replaceSave( '%2$s', '`' + process.env.prefix + cmd + lang.search.search + ' ' + title + linksuffix + '`' );
 									}
 									}
+									
+									if ( querypage.categoryinfo ) {
+										var langCat = lang.search.category;
+										var category = [langCat.content];
+										if ( querypage.categoryinfo.size === 0 ) category.push(langCat.empty);
+										if ( querypage.categoryinfo.pages > 0 ) {
+											var pages = querypage.categoryinfo.pages;
+											category.push(langCat.pages[( pages in langCat.pages ? pages : 'default' )].replaceSave( '%s', pages ));
+										}
+										if ( querypage.categoryinfo.files > 0 ) {
+											var files = querypage.categoryinfo.files;
+											category.push(langCat.files[( files in langCat.files ? files : 'default' )].replaceSave( '%s', files ));
+										}
+										if ( querypage.categoryinfo.subcats > 0 ) {
+											var subcats = querypage.categoryinfo.subcats;
+											category.push(langCat.subcats[( subcats in langCat.subcats ? subcats : 'default' )].replaceSave( '%s', subcats ));
+										}
+										if ( msg.showEmbed() ) embed.addField( category[0], category.slice(1).join('\n') );
+										else text += '\n\n' + category.join('\n');
+									}
+						
+									msg.sendChannel( spoiler + pagelink + text + spoiler, embed );
 								}
 								}
 							}
 							}
 							
 							
@@ -605,6 +628,7 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
 					}
 					}
 					else {
 					else {
 						var pagelink = 'https://' + wiki + '.gamepedia.com/' + querypage.title.toTitle() + ( querystring ? '?' + querystring.toTitle() : '' ) + ( body.query.redirects && body.query.redirects[0].tofragment ? '#' + body.query.redirects[0].tofragment.toSection() : ( fragment ? '#' + fragment.toSection() : '' ) );
 						var pagelink = 'https://' + wiki + '.gamepedia.com/' + querypage.title.toTitle() + ( querystring ? '?' + querystring.toTitle() : '' ) + ( body.query.redirects && body.query.redirects[0].tofragment ? '#' + body.query.redirects[0].tofragment.toSection() : ( fragment ? '#' + fragment.toSection() : '' ) );
+						var text = '';
 						var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
 						var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
 						if ( querypage.extract ) {
 						if ( querypage.extract ) {
 							var extract = querypage.extract.escapeFormatting();
 							var extract = querypage.extract.escapeFormatting();
@@ -614,12 +638,31 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
 						if ( querypage.pageimage ) {
 						if ( querypage.pageimage ) {
 							var pageimage = 'https://' + wiki + '.gamepedia.com/Special:FilePath/' + querypage.pageimage;
 							var pageimage = 'https://' + wiki + '.gamepedia.com/Special:FilePath/' + querypage.pageimage;
 							if ( querypage.ns === 6 ) {
 							if ( querypage.ns === 6 ) {
-								if ( /\.(?:png|jpg|jpeg|gif)$/.test(querypage.pageimage.toLowerCase()) ) embed.setImage( pageimage );
-								else embed.attachFiles( [{attachment:pageimage,name:querypage.pageimage}] );
+								if ( msg.showEmbed() && /\.(?:png|jpg|jpeg|gif)$/.test(querypage.pageimage.toLowerCase()) ) embed.setImage( pageimage );
+								else if ( msg.uploadFiles() ) embed.attachFiles( [{attachment:pageimage,name:( spoiler ? 'SPOILER ' : '' ) + querypage.pageimage}] );
 							} else embed.setThumbnail( pageimage );
 							} else embed.setThumbnail( pageimage );
 						} else embed.setThumbnail( body.query.general.logo );
 						} else embed.setThumbnail( body.query.general.logo );
+						if ( querypage.categoryinfo ) {
+							var langCat = lang.search.category;
+							var category = [langCat.content];
+							if ( querypage.categoryinfo.size === 0 ) category.push(langCat.empty);
+							if ( querypage.categoryinfo.pages > 0 ) {
+								var pages = querypage.categoryinfo.pages;
+								category.push(langCat.pages[( pages in langCat.pages ? pages : 'default' )].replaceSave( '%s', pages ));
+							}
+							if ( querypage.categoryinfo.files > 0 ) {
+								var files = querypage.categoryinfo.files;
+								category.push(langCat.files[( files in langCat.files ? files : 'default' )].replaceSave( '%s', files ));
+							}
+							if ( querypage.categoryinfo.subcats > 0 ) {
+								var subcats = querypage.categoryinfo.subcats;
+								category.push(langCat.subcats[( subcats in langCat.subcats ? subcats : 'default' )].replaceSave( '%s', subcats ));
+							}
+							if ( msg.showEmbed() ) embed.addField( category[0], category.slice(1).join('\n') );
+							else text += '\n\n' + category.join('\n');
+						}
 						
 						
-						msg.sendChannel( spoiler + pagelink + spoiler, embed );
+						msg.sendChannel( spoiler + pagelink + text + spoiler, embed );
 						
 						
 						if ( reaction ) reaction.removeEmoji();
 						if ( reaction ) reaction.removeEmoji();
 					}
 					}
@@ -1315,6 +1358,11 @@ Discord.Message.prototype.showEmbed = function() {
 	else return false;
 	else return false;
 };
 };
 
 
+Discord.Message.prototype.uploadFiles = function() {
+	if ( this.channel.type !== 'text' || this.channel.permissionsFor(client.user).has('ATTACH_FILES') ) return true;
+	else return false;
+};
+
 Array.prototype.toEmojis = function() {
 Array.prototype.toEmojis = function() {
 	var text = this.join(' ');
 	var text = this.join(' ');
 	var regex = /(<a?:)(\d+)(>)/g;
 	var regex = /(<a?:)(\d+)(>)/g;