Ver código fonte

fix displaytitle

Markus-Rost 6 anos atrás
pai
commit
d32aab6168
4 arquivos alterados com 121 adições e 60 exclusões
  1. 0 1
      Procfile
  2. 1 1
      i18n/fr.json
  3. 1 1
      i18n/tr.json
  4. 119 57
      main.js

+ 0 - 1
Procfile

@@ -1 +0,0 @@
-worker: npm start

+ 1 - 1
i18n/fr.json

@@ -17,7 +17,7 @@
 		"save_failed": "malheureusement, les paramètres n'ont pas pu être sauvegardés, veuillez réessayer plus tard.",
 		"missing": "ce serveur n'est pas encore configuré. Utilisez %1$s et %2$s pour modifier les paramètres.",
 		"foundwikis": "Cherchiez-vous un de ces wikis ?",
-		"current": "voici les paramètres actuels pour ce serveur :\n Langue : `Français` %1$s\nWiki par défaut : %2$s\nWikis associés aux salons",
+		"current": "voici les paramètres actuels pour ce serveur :\nLangue : `Français` %1$s\nWiki par défaut : %2$s\nWikis associés aux salons",
 		"nochannels": "*Aucun salon n'est associé à un wiki spécifique pour l'instant*",
 		"lang": "la langue pour ce serveur est: `Français`",
 		"langinvalid": "la langue spécifiée n'est pas disponible !",

+ 1 - 1
i18n/tr.json

@@ -120,7 +120,7 @@
 		"random": "random",
 		"overview": "overview",
 		"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 %1$s, tüm isabetlerin listesi için %2$s kullan.",
 		"category": {
 			"content": "Bu kategorinin içeriği:",
 			"empty": "*Bu kategori boş*",

+ 119 - 57
main.js

@@ -308,7 +308,7 @@ function edit_settings(lang, msg, key, value) {
 				json: true
 			}, function( error, response, body ) {
 				if ( error || !response || response.statusCode !== 201 || !body || body.error ) {
-					console.log( '- ' + ( response || response.statusCode ) + ': Error while editing the settings: ' + ( error || body && ( body.message || body.error ) ) );
+					console.log( '- ' + ( response && response.statusCode ) + ': Error while editing the settings: ' + ( error || body && ( body.message || body.error ) ) );
 					msg.replyMsg( lang.settings.save_failed, {}, true );
 				}
 				else {
@@ -483,7 +483,7 @@ function cmd_test(lang, msg, args, line) {
 				var ping = ( then - now ) + 'ms';
 				if ( error || !response || response.statusCode !== 200 || !body || body.batchcomplete === undefined || !( body instanceof Object ) ) {
 					if ( response && response.request && response.request.uri && response.request.uri.href === 'https://www.gamepedia.com/' ) {
-						console.log( '- This wiki doesn\'t exist! ' + ( error || body && body.error && body.error.info || '' ) );
+						console.log( '- This wiki doesn\'t exist! ' + ( error || body && body.error && body.error.info ) );
 						ping += ' <:unknown_wiki:505887262077353984>';
 					}
 					else {
@@ -711,16 +711,13 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
 									var pagelink = wiki.toLink() + querypage.title.toTitle() + linksuffix;
 									var text = '';
 									var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
-									if ( querypage.pageprops && querypage.pageprops.displaytitle ) embed.setTitle( querypage.pageprops.displaytitle.escapeFormatting() );
+									if ( querypage.pageprops && querypage.pageprops.displaytitle ) {
+										var displaytitle = htmlToDiscord( querypage.pageprops.displaytitle );
+										if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026';
+										embed.setTitle( displaytitle );
+									}
 									if ( querypage.pageprops && querypage.pageprops.description ) {
-										var description = '';
-										var parser = new htmlparser.Parser( {
-											ontext: (htmltext) => {
-												description += htmltext.escapeFormatting();
-											}
-										}, {decodeEntities:true} );
-										parser.write( querypage.pageprops.description );
-										parser.end();
+										var description = htmlToPlain( querypage.pageprops.description );
 										if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026';
 										embed.setDescription( description );
 									}
@@ -778,16 +775,13 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
 						var pagelink = wiki.toLink() + 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 );
-						if ( querypage.pageprops && querypage.pageprops.displaytitle ) embed.setTitle( querypage.pageprops.displaytitle.escapeFormatting() );
+						if ( querypage.pageprops && querypage.pageprops.displaytitle ) {
+							var displaytitle = htmlToDiscord( querypage.pageprops.displaytitle );
+							if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026';
+							embed.setTitle( displaytitle );
+						}
 						if ( querypage.pageprops && querypage.pageprops.description ) {
-							var description = '';
-							var parser = new htmlparser.Parser( {
-								ontext: (htmltext) => {
-									description += htmltext.escapeFormatting();
-								}
-							}, {decodeEntities:true} );
-							parser.write( querypage.pageprops.description );
-							parser.end();
+							var description = htmlToPlain( querypage.pageprops.description );
 							if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026';
 							embed.setDescription( description );
 						}
@@ -878,16 +872,13 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
 							console.log( '- ' + ( mpresponse && mpresponse.statusCode ) + ': Error while getting the main page: ' + ( mperror || mpbody && mpbody.error && mpbody.error.info ) );
 						} else {
 							querypage = Object.values(mpbody.query.pages)[0];
-							if ( querypage.pageprops && querypage.pageprops.displaytitle ) embed.setTitle( querypage.pageprops.displaytitle.escapeFormatting() );
+							if ( querypage.pageprops && querypage.pageprops.displaytitle ) {
+								var displaytitle = htmlToDiscord( querypage.pageprops.displaytitle );
+								if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026';
+								embed.setTitle( displaytitle );
+							}
 							if ( querypage.pageprops && querypage.pageprops.description ) {
-								var description = '';
-								var parser = new htmlparser.Parser( {
-									ontext: (htmltext) => {
-										description += htmltext.escapeFormatting();
-									}
-								}, {decodeEntities:true} );
-								parser.write( querypage.pageprops.description );
-								parser.end();
+								var description = htmlToPlain( querypage.pageprops.description );
 								if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026';
 								embed.setDescription( description );
 							}
@@ -925,8 +916,17 @@ function cmd_user(lang, msg, namespace, username, wiki, linksuffix, querypage, c
 					else {
 						var pagelink = wiki.toLink() + querypage.title.toTitle() + linksuffix;
 						var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
-						if ( querypage.pageprops && querypage.pageprops.displaytitle ) embed.setTitle( querypage.pageprops.displaytitle.escapeFormatting() );
-						if ( querypage.extract ) {
+						if ( querypage.pageprops && querypage.pageprops.displaytitle ) {
+							var displaytitle = htmlToDiscord( querypage.pageprops.displaytitle );
+							if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026';
+							embed.setTitle( displaytitle );
+						}
+						if ( querypage.pageprops && querypage.pageprops.description ) {
+							var description = htmlToPlain( querypage.pageprops.description );
+							if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026';
+							embed.setDescription( description );
+						}
+						else if ( querypage.extract ) {
 							var extract = querypage.extract.escapeFormatting();
 							if ( extract.length > 2000 ) extract = extract.substring(0, 2000) + '\u2026';
 							embed.setDescription( extract );
@@ -1040,8 +1040,17 @@ function cmd_user(lang, msg, namespace, username, wiki, linksuffix, querypage, c
 					else {
 						var pagelink = wiki.toLink() + querypage.title.toTitle() + linksuffix;
 						var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
-						if ( querypage.pageprops && querypage.pageprops.displaytitle ) embed.setTitle( querypage.pageprops.displaytitle.escapeFormatting() );
-						if ( querypage.extract ) {
+						if ( querypage.pageprops && querypage.pageprops.displaytitle ) {
+							var displaytitle = htmlToDiscord( querypage.pageprops.displaytitle );
+							if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026';
+							embed.setTitle( displaytitle );
+						}
+						if ( querypage.pageprops && querypage.pageprops.description ) {
+							var description = htmlToPlain( querypage.pageprops.description );
+							if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026';
+							embed.setDescription( description );
+						}
+						else if ( querypage.extract ) {
 							var extract = querypage.extract.escapeFormatting();
 							if ( extract.length > 2000 ) extract = extract.substring(0, 2000) + '\u2026';
 							embed.setDescription( extract );
@@ -1548,15 +1557,7 @@ function cmd_diffsend(lang, msg, args, wiki, reaction, spoiler, compare) {
 					else {
 						var embed = {};
 						var text = '<' + pagelink + '>\n\n' + editor.join(' ') + '\n' + timestamp.join(' ') + '\n' + size.join(' ') + '\n' + comment.join(' ');
-						if ( tags ) {
-							var tagparser = new htmlparser.Parser( {
-								ontext: (htmltext) => {
-									text += htmltext.escapeFormatting();
-								}
-							}, {decodeEntities:true} );
-							tagparser.write( '\n' + tags.join(' ') );
-							tagparser.end();
-						}
+						if ( tags ) text += htmlToPlain( '\n' + tags.join(' ') );
 						
 						msg.sendChannel( spoiler + text + spoiler, embed );
 						
@@ -1593,16 +1594,13 @@ function cmd_random(lang, msg, wiki, reaction, spoiler) {
 			querypage = Object.values(body.query.pages)[0];
 			var pagelink = wiki.toLink() + querypage.title.toTitle();
 			var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
-			if ( querypage.pageprops && querypage.pageprops.displaytitle ) embed.setTitle( querypage.pageprops.displaytitle.escapeFormatting() );
+			if ( querypage.pageprops && querypage.pageprops.displaytitle ) {
+				var displaytitle = htmlToDiscord( querypage.pageprops.displaytitle );
+				if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026';
+				embed.setTitle( displaytitle );
+			}
 			if ( querypage.pageprops && querypage.pageprops.description ) {
-				var description = '';
-				var parser = new htmlparser.Parser( {
-					ontext: (htmltext) => {
-						description += htmltext.escapeFormatting();
-					}
-				}, {decodeEntities:true} );
-				parser.write( querypage.pageprops.description );
-				parser.end();
+				var description = htmlToPlain( querypage.pageprops.description );
 				if ( description.length > 2000 ) description = description.substring(0, 2000) + '\u2026';
 				embed.setDescription( description );
 			}
@@ -1883,6 +1881,62 @@ function cmd_get(lang, msg, args, line) {
 	} else if ( msg.channel.type !== 'text' || !pause[msg.guild.id] ) cmd_link(lang, msg, line.split(' ').slice(1).join(' '));
 }
 
+function htmlToPlain(html) {
+	var text = '';
+	var parser = new htmlparser.Parser( {
+		ontext: (htmltext) => {
+			text += htmltext.escapeFormatting();
+		}
+	}, {decodeEntities:true} );
+	parser.write( html );
+	parser.end();
+	return text;
+};
+
+function htmlToDiscord(html) {
+	var text = '';
+	var parser = new htmlparser.Parser( {
+		onopentag: (tagname, attribs) => {
+			switch (tagname) {
+				case 'b':
+					text += '**';
+					break;
+				case 'i':
+					text += '*';
+					break;
+				case 's':
+					text += '~~';
+					break;
+				case 'u':
+					text += '__';
+					break;
+			}
+		},
+		ontext: (htmltext) => {
+			text += htmltext.escapeFormatting();
+		},
+		onclosetag: (tagname) => {
+			switch (tagname) {
+				case 'b':
+					text += '**';
+					break;
+				case 'i':
+					text += '*';
+					break;
+				case 's':
+					text += '~~';
+					break;
+				case 'u':
+					text += '__';
+					break;
+			}
+		}
+	}, {decodeEntities:true} );
+	parser.write( html );
+	parser.end();
+	return text;
+};
+
 String.prototype.toLink = function() {
 	if ( this.endsWith( '.org/w/' ) ) return this.substring(0, this.length - 2) + 'wiki/';
 	else return this;
@@ -2017,7 +2071,8 @@ Discord.MessageReaction.prototype.removeEmoji = function() {
 Discord.Message.prototype.sendChannel = function(content, options, ignorePause = false) {
 	if ( this.channel.type !== 'text' || !pause[this.guild.id] || ( ignorePause && ( this.isAdmin() || this.isOwner() ) ) ) {
 		return this.channel.send(content, options).then( msg => {
-			msg.allowDelete(this.author.id);
+			if ( msg.length ) msg.forEach( message => message.allowDelete(this.author.id) );
+			else msg.allowDelete(this.author.id);
 			return msg;
 		}, log_error );
 	} else {
@@ -2028,8 +2083,14 @@ Discord.Message.prototype.sendChannel = function(content, options, ignorePause =
 
 Discord.Message.prototype.sendChannelError = function(content, options) {
 	return this.channel.send(content, options).then( msg => {
-		msg.reactEmoji('error');
-		msg.allowDelete(this.author.id);
+		if ( msg.length ) msg.forEach( message => {
+			message.reactEmoji('error');
+			message.allowDelete(this.author.id);
+		} );
+		else {
+			msg.reactEmoji('error');
+			msg.allowDelete(this.author.id);
+		}
 		return msg;
 	}, log_error );
 };
@@ -2037,7 +2098,8 @@ Discord.Message.prototype.sendChannelError = function(content, options) {
 Discord.Message.prototype.replyMsg = function(content, options, ignorePause = false) {
 	if ( this.channel.type !== 'text' || !pause[this.guild.id] || ( ignorePause && ( this.isAdmin() || this.isOwner() ) ) ) {
 		return this.reply(content, options).then( msg => {
-			msg.allowDelete(this.author.id);
+			if ( msg.length ) msg.forEach( message => message.allowDelete(this.author.id) );
+			else msg.allowDelete(this.author.id);
 			return msg;
 		}, log_error );
 	} else {
@@ -2059,7 +2121,7 @@ Discord.Message.prototype.allowDelete = function(author) {
 };
 
 String.prototype.hasPrefix = function(flags = '') {
-	return RegExp( '^' + process.env.prefix + '(?: |$)', flags ).test(this.toLowerCase());
+	return RegExp( '^' + process.env.prefix + '(?: |$)', flags ).test(this.replace(/\u200b/g, '').toLowerCase());
 };
 
 client.on( 'message', msg => {
@@ -2114,7 +2176,7 @@ client.on( 'message', msg => {
 					count++;
 					console.log( '- Message contains too many commands!' );
 					msg.reactEmoji('⚠');
-					msg.sendChannelError( lang.limit.replaceSave( '%s', author.toString() ) );
+					msg.sendChannelError( lang.limit.replaceSave( '%s', author ) );
 				}
 			} );
 		}