Jelajahi Sumber

even more escaping

Markus-Rost 6 tahun lalu
induk
melakukan
7bf9446637
1 mengubah file dengan 17 tambahan dan 13 penghapusan
  1. 17 13
      main.js

+ 17 - 13
main.js

@@ -563,9 +563,9 @@ function cmd_link(lang, msg, title, wiki = lang.link, cmd = ' ', querystring = '
 									else {
 										querypage = Object.values(srbody.query.pages)[0];
 										var pagelink = 'https://' + wiki + '.gamepedia.com/' + querypage.title.toTitle() + linksuffix;
-										var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title ).setURL( pagelink );
+										var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
 										if ( querypage.extract ) {
-											var extract = querypage.extract;
+											var extract = querypage.extract.escapeFormatting();
 											if ( extract.length > 2000 ) extract = extract.substr(0, 2000) + '\u2026';
 											embed.setDescription( extract );
 										}
@@ -592,9 +592,9 @@ function cmd_link(lang, msg, title, wiki = lang.link, cmd = ' ', querystring = '
 						}
 						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 embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title ).setURL( pagelink );
+							var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
 							if ( querypage.extract ) {
-								var extract = querypage.extract;
+								var extract = querypage.extract.escapeFormatting();
 								if ( extract.length > 2000 ) extract = extract.substr(0, 2000) + '\u2026';
 								embed.setDescription( extract );
 							}
@@ -618,7 +618,7 @@ function cmd_link(lang, msg, title, wiki = lang.link, cmd = ' ', querystring = '
 							selfcall++;
 							cmd_link(lang, msg, iwtitle, regex[1], ' !' + regex[1] + ' ', querystring, fragment, selfcall);
 						} else {
-							msg.channel.sendMsg( inter.url + linksuffix ).then( message => {
+							msg.channel.sendMsg( inter.url.replace( /@(here|everyone)/g, '%40$1' ) + linksuffix ).then( message => {
 								if ( message && selfcall == 3 ) message.reactEmoji('⚠');
 							} );
 							if ( reaction ) reaction.removeEmoji();
@@ -626,7 +626,7 @@ function cmd_link(lang, msg, title, wiki = lang.link, cmd = ' ', querystring = '
 					}
 					else {
 						var pagelink = 'https://' + wiki + '.gamepedia.com/' + body.query.general.mainpage.toTitle() + linksuffix;
-						var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( body.query.general.mainpage ).setURL( pagelink ).setThumbnail( body.query.general.logo );
+						var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( body.query.general.mainpage.escapeFormatting() ).setURL( pagelink ).setThumbnail( body.query.general.logo );
 						request( {
 							uri: body.query.general.base
 						}, function( mperror, mpresponse, mpbody ) {
@@ -634,7 +634,7 @@ function cmd_link(lang, msg, title, wiki = lang.link, cmd = ' ', querystring = '
 								console.log( '- Fehler beim Erhalten der Metadaten' + ( mperror ? ': ' + mperror : ( mpbody ? ( mpbody.error ? ': ' + mpbody.error.info : '.' ) : '.' ) ) );
 							} else {
 								var match = mpbody.match( /<meta name="description" content="(.*)"\/>/ );
-								if ( match !== null ) embed.setDescription( match[1].substr(0, 2000) );
+								if ( match !== null ) embed.setDescription( match[1].escapeFormatting().substr(0, 2000) );
 							}
 							
 							msg.channel.sendMsg( pagelink, embed );
@@ -842,7 +842,7 @@ function cmd_user(lang, msg, namespace, username, wiki, linksuffix, reaction) {
 					var pagelink = 'https://' + wiki + '.gamepedia.com/' + namespace + username.toTitle() + linksuffix;
 					if ( msg.showEmbed() ) {
 						var text = '<' + pagelink + '>';
-						var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( username ).setURL( pagelink ).addField( editcount[0], editcount[1], true ).addField( group[0], group[1], true ).addField( gender[0], gender[1], true ).addField( registration[0], registration[1], true );
+						var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( username.escapeFormatting() ).setURL( pagelink ).addField( editcount[0], editcount[1], true ).addField( group[0], group[1], true ).addField( gender[0], gender[1], true ).addField( registration[0], registration[1], true );
 						if ( isBlocked ) embed.addField( block[0], block[1].toMarkdown(wiki) );
 					}
 					else {
@@ -1005,7 +1005,7 @@ function cmd_diffsend(lang, msg, args, wiki, reaction) {
 						var text = '<' + pagelink + '>';
 						var editorlink = '[' + editor[1] + '](https://' + wiki + '.gamepedia.com/User:' + editor[1].toTitle() + ')';
 						if ( /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(editor[1]) ) editorlink = '[' + editor[1] + '](https://' + wiki + '.gamepedia.com/Special:Contributions/' + editor[1].toTitle(true) + ')';
-						var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( title + '?diff=' + diff + '&oldid=' + oldid ).setURL( pagelink ).addField( editor[0], editorlink, true ).addField( size[0], size[1], true ).addField( comment[0], comment[1] ).setFooter( timestamp[1] );
+						var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( ( title + '?diff=' + diff + '&oldid=' + oldid ).escapeFormatting() ).setURL( pagelink ).addField( editor[0], editorlink, true ).addField( size[0], size[1], true ).addField( comment[0], comment[1] ).setFooter( timestamp[1] );
 						if ( tags ) {
 							var tagtitle = tags[1].replace( tagregex, '$1' ).toTitle(true);
 							embed.addField( tags[0], tags[1].replace( tagregex, '[$2](https://' + wiki + '.gamepedia.com/' + tagtitle + ')' ) );
@@ -1046,9 +1046,9 @@ function cmd_random(lang, msg, wiki) {
 			else {
 				querypage = Object.values(body.query.pages)[0];
 				var pagelink = 'https://' + wiki + '.gamepedia.com/' + querypage.title.toTitle();
-				var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title ).setURL( pagelink );
+				var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
 				if ( querypage.extract ) {
-					var extract = querypage.extract;
+					var extract = querypage.extract.escapeFormatting();
 					if ( extract.length > 2000 ) extract = extract.substr(0, 2000) + '\u2026';
 					embed.setDescription( extract );
 				}
@@ -1282,11 +1282,15 @@ String.prototype.toMarkdown = function(wiki, title = '') {
 		var page = title.toTitle(true) + '#' + link[1].toSection();
 		text = text.replace( link[0], '[→](https://' + wiki + '.gamepedia.com/' + page + ')' + link[1] + ( link[2] ? ': ' + link[2] : '' ) );
 	}
-	return text.replace( /(`|_|\*|~|<|>|{|}|\||\/\/)/g, '\\$1' );
+	return text.escapeFormatting();
 };
 
 String.prototype.toPlaintext = function() {
-	return this.replace( /\[\[(?:[^\|\]]+\|)?([^\]]+)\]\]/g, '$1' ).replace( /\/\*\s*([^\*]+?)\s*\*\//g, '→$1:' ).replace( /(`|_|\*|~|<|>|{|}|\||\/\/)/g, '\\$1' );
+	return this.replace( /\[\[(?:[^\|\]]+\|)?([^\]]+)\]\]/g, '$1' ).replace( /\/\*\s*([^\*]+?)\s*\*\//g, '→$1:' ).escapeFormatting();
+};
+
+String.prototype.escapeFormatting = function() {
+	return this.replace( /(`|_|\*|~|<|>|{|}|@|\/\/|\|)/g, '\\$1' );
 };
 
 Discord.Message.prototype.reactEmoji = function(name) {