|
@@ -370,10 +370,11 @@ function cmd_link(lang, msg, title, wiki, cmd) {
|
|
|
var invoke = title.split(' ')[0].toLowerCase();
|
|
|
var args = title.split(' ').slice(1);
|
|
|
|
|
|
- if ( invoke == 'page' || invoke == lang.search.page ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + args.join('_') );
|
|
|
- else if ( invoke == 'search' || invoke == lang.search.search ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/Special:Search/' + args.join('_') );
|
|
|
+ if ( title.toLowerCase() == 'random' ) cmd_random(lang, msg, wiki);
|
|
|
+ else if ( invoke == 'page' || invoke == lang.search.page ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + args.join('_') );
|
|
|
+ else if ( invoke == 'search' || invoke == lang.search.search ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/Special:Search/' + args.join('_').replace( /\?/g, '%3F' ) );
|
|
|
else if ( invoke == 'diff' ) cmd_diff(lang, msg, args, wiki);
|
|
|
- else if ( title.includes( '#' ) || title.includes( '?' ) ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + title.replace( / /g, '_' ) );
|
|
|
+ else if ( title.includes( '#' ) ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + title.replace( / /g, '_' ).replace( /\?/g, '%3F' ) );
|
|
|
else if ( invoke == 'user' || invoke == lang.search.user.unknown || invoke == lang.search.user.male || invoke == lang.search.user.female ) cmd_user(lang, msg, args.join('_'), wiki, title.replace( / /g, '_' ));
|
|
|
else if ( invoke.startsWith('user:') ) cmd_user(lang, msg, title.substr(5), wiki, title.replace( / /g, '_' ));
|
|
|
else if ( invoke.startsWith('userprofile:') ) cmd_user(lang, msg, title.substr(12), wiki, title.replace( / /g, '_' ));
|
|
@@ -385,7 +386,7 @@ function cmd_link(lang, msg, title, wiki, cmd) {
|
|
|
msg.react('⏳').then( function( reaction ) {
|
|
|
hourglass = reaction;
|
|
|
request( {
|
|
|
- uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&format=json&meta=siteinfo&siprop=general|interwikimap&redirects=true&titles=' + encodeURI( title ),
|
|
|
+ uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&format=json&meta=siteinfo&siprop=general&iwurl=true&redirects=true&titles=' + encodeURI( title ),
|
|
|
json: true
|
|
|
}, function( error, response, body ) {
|
|
|
if ( error || !response || !body || !body.query ) {
|
|
@@ -395,7 +396,7 @@ function cmd_link(lang, msg, title, wiki, cmd) {
|
|
|
}
|
|
|
else {
|
|
|
console.log( 'Fehler beim Erhalten der Suchergebnisse' + ( error ? ': ' + error.message : ( body ? ( body.error ? ': ' + body.error.info : '.' ) : '.' ) ) );
|
|
|
- msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + title.replace( / /g, '_' ) ).then( message => message.react('440871715938238494') );
|
|
|
+ msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + title.replace( / /g, '_' ).replace( /\?/g, '%3F' ) ).then( message => message.react('440871715938238494') );
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
@@ -407,44 +408,36 @@ function cmd_link(lang, msg, title, wiki, cmd) {
|
|
|
}, function( srerror, srresponse, srbody ) {
|
|
|
if ( srerror || !srresponse || !srbody || !srbody.query || ( !srbody.query.search[0] && srbody.query.searchinfo.totalhits != 0 ) ) {
|
|
|
console.log( 'Fehler beim Erhalten der Suchergebnisse' + ( srerror ? ': ' + srerror.message : ( srbody ? ( srbody.error ? ': ' + srbody.error.info : '.' ) : '.' ) ) );
|
|
|
- msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + title.replace( / /g, '_' ) ).then( message => message.react('440871715938238494') );
|
|
|
+ msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + title.replace( / /g, '_' ).replace( /\?/g, '%3F' ) ).then( message => message.react('440871715938238494') );
|
|
|
}
|
|
|
else {
|
|
|
if ( srbody.query.searchinfo.totalhits == 0 ) {
|
|
|
msg.react('🤷');
|
|
|
}
|
|
|
else if ( srbody.query.searchinfo.totalhits == 1 ) {
|
|
|
- msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + srbody.query.search[0].title.replace( / /g, '_' ) + '\n' + lang.search.infopage.replace( '%s', '`' + process.env.prefix + cmd + lang.search.page + ' ' + title + '`' ) );
|
|
|
+ msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + srbody.query.search[0].title.replace( / /g, '_' ).replace( /\?/g, '%3F' ) + '\n' + lang.search.infopage.replace( '%s', '`' + process.env.prefix + cmd + lang.search.page + ' ' + title + '`' ) );
|
|
|
}
|
|
|
else {
|
|
|
- msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + srbody.query.search[0].title.replace( / /g, '_' ) + '\n' + lang.search.infosearch.replace( '%1$s', '`' + process.env.prefix + cmd + lang.search.page + ' ' + title + '`' ).replace( '%2$s', '`' + process.env.prefix + cmd + lang.search.search + ' ' + title + '`' ) );
|
|
|
+ msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + srbody.query.search[0].title.replace( / /g, '_' ).replace( /\?/g, '%3F' ) + '\n' + lang.search.infosearch.replace( '%1$s', '`' + process.env.prefix + cmd + lang.search.page + ' ' + title + '`' ).replace( '%2$s', '`' + process.env.prefix + cmd + lang.search.search + ' ' + title + '`' ) );
|
|
|
}
|
|
|
}
|
|
|
} );
|
|
|
}
|
|
|
else {
|
|
|
- msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + Object.values(body.query.pages)[0].title.replace( / /g, '_' ) + ( body.query.redirects && body.query.redirects[0].tofragment ? '#' + encodeURI( body.query.redirects[0].tofragment.replace( / /g, '_' ) ) : '' ) );
|
|
|
+ msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + Object.values(body.query.pages)[0].title.replace( / /g, '_' ).replace( /\?/g, '%3F' ) + ( body.query.redirects && body.query.redirects[0].tofragment ? '#' + encodeURIComponent( body.query.redirects[0].tofragment.replace( / /g, '_' ) ).replace( /\%/g, '.' ) : '' ) );
|
|
|
}
|
|
|
}
|
|
|
else if ( body.query.interwiki ) {
|
|
|
var inter = body.query.interwiki[0];
|
|
|
var intertitle = inter.title.substr(inter.iw.length+1);
|
|
|
- var regex = /^(?:https?:)?\/\/(.*)\.gamepedia\.com\//
|
|
|
- var entry = body.query.interwikimap;
|
|
|
- for ( var i = 0; i < entry.length; i++ ) {
|
|
|
- if ( entry[i].prefix == inter.iw ) {
|
|
|
- if ( regex.test(entry[i].url) ) {
|
|
|
- var iwtitle = entry[i].url.replace( '$1', intertitle ).replace( regex.exec(entry[i].url)[0], '' );
|
|
|
- var link = regex.exec(entry[i].url)[1];
|
|
|
- cmd_link(lang, msg, iwtitle, link, ' !' + link + ' ');
|
|
|
- }
|
|
|
- else msg.channel.send( entry[i].url.replace( '$1', intertitle.replace( / /g, '_' ) ) );
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
+ var regex = /^(?:https?:)?\/\/(.*)\.gamepedia\.com\//.exec(inter.url);
|
|
|
+ if ( regex != null ) {
|
|
|
+ var iwtitle = decodeURIComponent( inter.url.replace( regex[0], '' ) ).replace( /\_/g, ' ' ).replace( intertitle.replace( /\_/g, ' ' ), intertitle );
|
|
|
+ cmd_link(lang, msg, iwtitle, regex[1], ' !' + regex[1] + ' ');
|
|
|
+ } else msg.channel.send( inter.url );
|
|
|
}
|
|
|
else {
|
|
|
- msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + body.query.general.mainpage.replace( / /g, '_' ) );
|
|
|
+ msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + body.query.general.mainpage.replace( / /g, '_' ).replace( /\?/g, '%3F' ) );
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -654,7 +647,7 @@ function cmd_diff(lang, msg, args, wiki) {
|
|
|
}
|
|
|
else error = true;
|
|
|
}
|
|
|
- else title = args.join('_');
|
|
|
+ else title = args.join('_').replace( /\?/g, '%3F' );
|
|
|
|
|
|
if ( error ) msg.react('440871715938238494');
|
|
|
else if ( /^\d+$/.test(diff) ) {
|
|
@@ -728,7 +721,7 @@ function cmd_diffsend(lang, msg, args, wiki) {
|
|
|
var pages = Object.values(body.query.pages);
|
|
|
if ( pages.length != 1 ) msg.channel.send( '<https://' + wiki + '.gamepedia.com/?diff=' + args[0] + ( args[1] ? '&oldid=' + args[1] : '' ) + '>' );
|
|
|
else {
|
|
|
- var title = pages[0].title.replace( / /g, '_' );
|
|
|
+ var title = pages[0].title.replace( / /g, '_' ).replace( /\?/g, '%3F' );
|
|
|
var revisions = [];
|
|
|
if ( pages[0].revisions[1] ) revisions = [pages[0].revisions[1], pages[0].revisions[0]];
|
|
|
else revisions = [pages[0].revisions[0]];
|
|
@@ -766,6 +759,33 @@ function cmd_diffsend(lang, msg, args, wiki) {
|
|
|
} );
|
|
|
}
|
|
|
|
|
|
+function cmd_random(lang, msg, wiki) {
|
|
|
+ var hourglass;
|
|
|
+ msg.react('⏳').then( function( reaction ) {
|
|
|
+ hourglass = reaction;
|
|
|
+ request( {
|
|
|
+ uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&format=json&list=random&rnnamespace=0',
|
|
|
+ json: true
|
|
|
+ }, function( error, response, body ) {
|
|
|
+ if ( error || !response || !body || !body.query || !body.query.random[0] ) {
|
|
|
+ if ( response && response.request && response.request.uri && response.request.uri.href == 'https://www.gamepedia.com/' ) {
|
|
|
+ console.log( 'Dieses Wiki existiert nicht! ' + ( error ? error.message : ( body ? ( body.error ? body.error.info : '' ) : '' ) ) );
|
|
|
+ msg.react('440871715938238494');
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log( 'Fehler beim Erhalten der Suchergebnisse' + ( error ? ': ' + error.message : ( body ? ( body.error ? ': ' + body.error.info : '.' ) : '.' ) ) );
|
|
|
+ msg.channel.send( 'https://' + wiki + '.gamepedia.com/Special:Random' ).then( message => message.react('440871715938238494') );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + body.query.random[0].title.replace( / /g, '_' ).replace( /\?/g, '%3F' ) );
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( hourglass != undefined ) hourglass.remove();
|
|
|
+ } );
|
|
|
+ } );
|
|
|
+}
|
|
|
+
|
|
|
function cmd_multiline(lang, msg, args, line) {
|
|
|
msg.react('440871715938238494');
|
|
|
}
|