|
@@ -548,16 +548,45 @@ function check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', queryst
|
|
delete body.query.redirects[0].tofragment;
|
|
delete body.query.redirects[0].tofragment;
|
|
delete querypage.missing;
|
|
delete querypage.missing;
|
|
querypage.ns = -1;
|
|
querypage.ns = -1;
|
|
|
|
+ querypage.special = '';
|
|
}
|
|
}
|
|
|
|
|
|
var contribs = body.query.namespaces['-1']['*'] + ':' + body.query.specialpagealiases.find( sp => sp.realname === 'Contributions' ).aliases[0] + '/';
|
|
var contribs = body.query.namespaces['-1']['*'] + ':' + body.query.specialpagealiases.find( sp => sp.realname === 'Contributions' ).aliases[0] + '/';
|
|
- if ( ( querypage.ns === 2 || querypage.ns === 202 ) && ( !querypage.title.includes( '/' ) || /^[^:]+:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d\d$/.test(querypage.title) ) ) {
|
|
|
|
|
|
+ if ( ( querypage.ns === 2 || querypage.ns === 202 ) && ( !querypage.title.includes( '/' ) || /^[^:]+:(?:(?:\d{1,3}\.){3}\d{1,3}\/\d{2}|(?:[\dA-F]{1,4}:){7}[\dA-F]{1,4}\/\d{2,3})$/.test(querypage.title) ) ) {
|
|
var userparts = querypage.title.split(':');
|
|
var userparts = querypage.title.split(':');
|
|
- cmd_user(lang, msg, userparts[0].toTitle() + ':', userparts.slice(1).join(':'), wiki, linksuffix, noRedirect, contribs.toTitle(), reaction, spoiler);
|
|
|
|
|
|
+ querypage.noRedirect = noRedirect;
|
|
|
|
+ cmd_user(lang, msg, userparts[0].toTitle() + ':', userparts.slice(1).join(':'), wiki, linksuffix, querypage, contribs.toTitle(), reaction, spoiler);
|
|
}
|
|
}
|
|
else if ( querypage.ns === -1 && querypage.title.startsWith(contribs) && querypage.title.length > contribs.length ) {
|
|
else if ( querypage.ns === -1 && querypage.title.startsWith(contribs) && querypage.title.length > contribs.length ) {
|
|
- var userparts = querypage.title.split('/');
|
|
|
|
- cmd_user(lang, msg, userparts[0].toTitle() + '/', userparts.slice(1).join('/'), wiki, linksuffix, noRedirect, contribs.toTitle(), reaction, spoiler);
|
|
|
|
|
|
+ var username = querypage.title.split('/').slice(1).join('/');
|
|
|
|
+ request( {
|
|
|
|
+ uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&titles=User:' + encodeURIComponent( username ) + '&format=json',
|
|
|
|
+ json: true
|
|
|
|
+ }, function( uerror, uresponse, ubody ) {
|
|
|
|
+ if ( uerror || !uresponse || uresponse.statusCode !== 200 || !ubody || ubody.batchcomplete === undefined ) {
|
|
|
|
+ console.log( '- Fehler beim Erhalten der Benutzer' + ( uerror ? ': ' + uerror : ( ubody ? ( ubody.error ? ': ' + ubody.error.info : '.' ) : '.' ) ) );
|
|
|
|
+ msg.sendChannelError( spoiler + '<https://' + wiki + '.gamepedia.com/' + ( contribs + username ).toTitle() + linksuffix + '>' + spoiler );
|
|
|
|
+
|
|
|
|
+ if ( reaction ) reaction.removeEmoji();
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ querypage = Object.values(ubody.query.pages)[0];
|
|
|
|
+ if ( querypage.ns === 2 ) {
|
|
|
|
+ username = querypage.title.split(':').slice(1).join(':');
|
|
|
|
+ querypage.title = contribs + username;
|
|
|
|
+ delete querypage.missing;
|
|
|
|
+ querypage.ns = -1;
|
|
|
|
+ querypage.special = '';
|
|
|
|
+ querypage.noRedirect = noRedirect;
|
|
|
|
+ cmd_user(lang, msg, contribs.toTitle(), username, wiki, linksuffix, querypage, contribs.toTitle(), reaction, spoiler);
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ msg.reactEmoji('error');
|
|
|
|
+
|
|
|
|
+ if ( reaction ) reaction.removeEmoji();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } );
|
|
}
|
|
}
|
|
else if ( ( querypage.missing !== undefined && querypage.known === undefined && !( noRedirect || querypage.categoryinfo ) ) || querypage.invalid !== undefined ) {
|
|
else if ( ( querypage.missing !== undefined && querypage.known === undefined && !( noRedirect || querypage.categoryinfo ) ) || querypage.invalid !== undefined ) {
|
|
request( {
|
|
request( {
|
|
@@ -774,8 +803,8 @@ function cmd_sendumfrage(lang, msg, text, reactions, imgs) {
|
|
} );
|
|
} );
|
|
}
|
|
}
|
|
|
|
|
|
-function cmd_user(lang, msg, namespace, username, wiki, linksuffix, noRedirect, contribs, reaction, spoiler) {
|
|
|
|
- if ( /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?:\/\d\d)?$/.test(username) ) {
|
|
|
|
|
|
+function cmd_user(lang, msg, namespace, username, wiki, linksuffix, querypage, contribs, reaction, spoiler) {
|
|
|
|
+ if ( /^(?:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{2})?|(?:[\dA-F]{1,4}:){7}[\dA-F]{1,4}(?:\/\d{2,3})?)$/.test(username) ) {
|
|
request( {
|
|
request( {
|
|
uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&meta=siteinfo&siprop=general&list=blocks&bkprop=user|by|timestamp|expiry|reason&bkip=' + encodeURIComponent( username ) + '&format=json',
|
|
uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&meta=siteinfo&siprop=general&list=blocks&bkprop=user|by|timestamp|expiry|reason&bkip=' + encodeURIComponent( username ) + '&format=json',
|
|
json: true
|
|
json: true
|
|
@@ -787,17 +816,32 @@ function cmd_user(lang, msg, namespace, username, wiki, linksuffix, noRedirect,
|
|
msg.reactEmoji('nowiki');
|
|
msg.reactEmoji('nowiki');
|
|
}
|
|
}
|
|
else if ( body && body.error && ( body.error.code === 'param_ip' || body.error.code === 'cidrtoobroad' ) ) {
|
|
else if ( body && body.error && ( body.error.code === 'param_ip' || body.error.code === 'cidrtoobroad' ) ) {
|
|
- msg.reactEmoji('error');
|
|
|
|
|
|
+ if ( querypage.missing !== undefined || querypage.ns === -1 ) msg.reactEmoji('error');
|
|
|
|
+ else {
|
|
|
|
+ var pagelink = 'https://' + wiki + '.gamepedia.com/' + querypage.title.toTitle() + linksuffix;
|
|
|
|
+ var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
|
|
|
|
+ if ( querypage.extract ) {
|
|
|
|
+ var extract = querypage.extract.escapeFormatting();
|
|
|
|
+ if ( extract.length > 2000 ) extract = extract.substr(0, 2000) + '\u2026';
|
|
|
|
+ embed.setDescription( extract );
|
|
|
|
+ }
|
|
|
|
+ if ( querypage.pageimage ) {
|
|
|
|
+ var pageimage = 'https://' + wiki + '.gamepedia.com/Special:FilePath/' + querypage.pageimage;
|
|
|
|
+ embed.setThumbnail( pageimage );
|
|
|
|
+ } else embed.setThumbnail( body.query.general.logo );
|
|
|
|
+
|
|
|
|
+ msg.sendChannel( spoiler + pagelink + spoiler, embed );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
console.log( '- Fehler beim Erhalten der Suchergebnisse' + ( error ? ': ' + error : ( body ? ( body.error ? ': ' + body.error.info : '.' ) : '.' ) ) );
|
|
console.log( '- Fehler beim Erhalten der Suchergebnisse' + ( error ? ': ' + error : ( body ? ( body.error ? ': ' + body.error.info : '.' ) : '.' ) ) );
|
|
- msg.sendChannelError( spoiler + '<https://' + wiki + '.gamepedia.com/' + ( noRedirect ? namespace : contribs ) + username.toTitle() + linksuffix + '>' + spoiler );
|
|
|
|
|
|
+ msg.sendChannelError( spoiler + '<https://' + wiki + '.gamepedia.com/' + ( querypage.noRedirect ? namespace : contribs ) + username.toTitle() + linksuffix + '>' + spoiler );
|
|
}
|
|
}
|
|
|
|
|
|
if ( reaction ) reaction.removeEmoji();
|
|
if ( reaction ) reaction.removeEmoji();
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- if ( !noRedirect ) namespace = contribs;
|
|
|
|
|
|
+ if ( !querypage.noRedirect || ( querypage.missing === undefined && querypage.ns !== -1 ) ) namespace = contribs;
|
|
var blocks = body.query.blocks.map( function(block) {
|
|
var blocks = body.query.blocks.map( function(block) {
|
|
var isBlocked = false;
|
|
var isBlocked = false;
|
|
var blockedtimestamp = (new Date(block.timestamp)).toLocaleString(lang.user.dateformat, timeoptions);
|
|
var blockedtimestamp = (new Date(block.timestamp)).toLocaleString(lang.user.dateformat, timeoptions);
|
|
@@ -813,15 +857,29 @@ function cmd_user(lang, msg, namespace, username, wiki, linksuffix, noRedirect,
|
|
} ).filter( block => block !== undefined );
|
|
} ).filter( block => block !== undefined );
|
|
if ( username.includes( '/' ) ) {
|
|
if ( username.includes( '/' ) ) {
|
|
var rangeprefix = username;
|
|
var rangeprefix = username;
|
|
- var range = parseInt(username.substr(-2, 2), 10);
|
|
|
|
- if ( range >= 32 ) username = username.replace( /^(.+)\/\d\d$/, '$1' );
|
|
|
|
- else if ( range >= 24 ) rangeprefix = username.replace( /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.).+$/, '$1' );
|
|
|
|
- else if ( range >= 16 ) rangeprefix = username.replace( /^(\d{1,3}\.\d{1,3}\.).+$/, '$1' );
|
|
|
|
|
|
+ if ( username.includes( ':' ) ) {
|
|
|
|
+ var range = parseInt(username.replace( /^.+\/(\d{2,3})$/, '$1' ), 10);
|
|
|
|
+ if ( range === 128 ) username = username.replace( /^(.+)\/\d{2,3}$/, '$1' );
|
|
|
|
+ else if ( range >= 112 ) rangeprefix = username.replace( /^((?:[\dA-F]{1,4}:){7}).+$/, '$1' );
|
|
|
|
+ else if ( range >= 96 ) rangeprefix = username.replace( /^((?:[\dA-F]{1,4}:){6}).+$/, '$1' );
|
|
|
|
+ else if ( range >= 80 ) rangeprefix = username.replace( /^((?:[\dA-F]{1,4}:){5}).+$/, '$1' );
|
|
|
|
+ else if ( range >= 64 ) rangeprefix = username.replace( /^((?:[\dA-F]{1,4}:){4}).+$/, '$1' );
|
|
|
|
+ else if ( range >= 48 ) rangeprefix = username.replace( /^((?:[\dA-F]{1,4}:){3}).+$/, '$1' );
|
|
|
|
+ else if ( range >= 32 ) rangeprefix = username.replace( /^((?:[\dA-F]{1,4}:){2}).+$/, '$1' );
|
|
|
|
+ else if ( range >= 19 ) rangeprefix = username.replace( /^((?:[\dA-F]{1,4}:){1}).+$/, '$1' );
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ var range = parseInt(username.substr(-2, 2), 10);
|
|
|
|
+ if ( range === 32 ) username = username.replace( /^(.+)\/\d{2}$/, '$1' );
|
|
|
|
+ else if ( range >= 24 ) rangeprefix = username.replace( /^((?:\d{1,3}\.){3}).+$/, '$1' );
|
|
|
|
+ else if ( range >= 16 ) rangeprefix = username.replace( /^((?:\d{1,3}\.){2}).+$/, '$1' );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
request( {
|
|
request( {
|
|
- uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&list=usercontribs&ucprop=' + ( username.includes( '/' ) ? '&ucuserprefix=' + encodeURIComponent( rangeprefix ) : '&ucuser=' + encodeURIComponent( username ) ) + '&format=json',
|
|
|
|
|
|
+ uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&list=usercontribs&ucprop=&uclimit=50' + ( username.includes( '/' ) ? '&ucuserprefix=' + encodeURIComponent( rangeprefix ) : '&ucuser=' + encodeURIComponent( username ) ) + '&format=json',
|
|
json: true
|
|
json: true
|
|
}, function( ucerror, ucresponse, ucbody ) {
|
|
}, function( ucerror, ucresponse, ucbody ) {
|
|
|
|
+ if ( rangeprefix && !username.includes( '/' ) ) username = rangeprefix;
|
|
if ( ucbody && ucbody.warnings ) log_warn(ucbody.warnings);
|
|
if ( ucbody && ucbody.warnings ) log_warn(ucbody.warnings);
|
|
if ( ucerror || !ucresponse || ucresponse.statusCode !== 200 || !ucbody || ucbody.batchcomplete === undefined || !ucbody.query || !ucbody.query.usercontribs ) {
|
|
if ( ucerror || !ucresponse || ucresponse.statusCode !== 200 || !ucbody || ucbody.batchcomplete === undefined || !ucbody.query || !ucbody.query.usercontribs ) {
|
|
if ( ucbody && ucbody.error && ucbody.error.code === 'baduser_ucuser' ) {
|
|
if ( ucbody && ucbody.error && ucbody.error.code === 'baduser_ucuser' ) {
|
|
@@ -833,7 +891,7 @@ function cmd_user(lang, msg, namespace, username, wiki, linksuffix, noRedirect,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- var editcount = [lang.user.info.editcount, ( username.includes( '/' ) && range !== 24 && range !== 16 ? '~' : '' ) + ucbody.query.usercontribs.length + ( ucbody.continue ? '+' : '' )];
|
|
|
|
|
|
+ var editcount = [lang.user.info.editcount, ( username.includes( '/' ) && ( ( username.includes( ':' ) && range % 16 ) || range % 8 ) ? '~' : '' ) + ucbody.query.usercontribs.length + ( ucbody.continue ? '+' : '' )];
|
|
|
|
|
|
var pagelink = 'https://' + wiki + '.gamepedia.com/' + namespace + username.toTitle() + linksuffix;
|
|
var pagelink = 'https://' + wiki + '.gamepedia.com/' + namespace + username.toTitle() + linksuffix;
|
|
if ( msg.showEmbed() ) {
|
|
if ( msg.showEmbed() ) {
|
|
@@ -872,7 +930,22 @@ function cmd_user(lang, msg, namespace, username, wiki, linksuffix, noRedirect,
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
if ( body.query.users[0].missing !== undefined || body.query.users[0].invalid !== undefined ) {
|
|
if ( body.query.users[0].missing !== undefined || body.query.users[0].invalid !== undefined ) {
|
|
- msg.reactEmoji('🤷');
|
|
|
|
|
|
+ if ( querypage.missing !== undefined || querypage.ns === -1 ) msg.reactEmoji('🤷');
|
|
|
|
+ else {
|
|
|
|
+ var pagelink = 'https://' + wiki + '.gamepedia.com/' + querypage.title.toTitle() + linksuffix;
|
|
|
|
+ var embed = new Discord.RichEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
|
|
|
|
+ if ( querypage.extract ) {
|
|
|
|
+ var extract = querypage.extract.escapeFormatting();
|
|
|
|
+ if ( extract.length > 2000 ) extract = extract.substr(0, 2000) + '\u2026';
|
|
|
|
+ embed.setDescription( extract );
|
|
|
|
+ }
|
|
|
|
+ if ( querypage.pageimage ) {
|
|
|
|
+ var pageimage = 'https://' + wiki + '.gamepedia.com/Special:FilePath/' + querypage.pageimage;
|
|
|
|
+ embed.setThumbnail( pageimage );
|
|
|
|
+ } else embed.setThumbnail( body.query.general.logo );
|
|
|
|
+
|
|
|
|
+ msg.sendChannel( spoiler + pagelink + spoiler, embed );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
username = body.query.users[0].name;
|
|
username = body.query.users[0].name;
|