|
@@ -83,7 +83,8 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
|
|
|
return fn.diff(lang, msg, args, wiki, reaction, spoiler);
|
|
|
}
|
|
|
var noRedirect = ( querystring.getAll('redirect').pop() === 'no' || ( querystring.has('action') && querystring.getAll('action').pop() !== 'view' ) );
|
|
|
- got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general|namespaces|specialpagealiases&iwurl=true' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=categoryinfo|info|pageprops|pageimages|extracts&piprop=original|name&ppprop=description|displaytitle|page_image_free|disambiguation|infoboxes&explaintext=true&exsectionformat=raw&exlimit=1&converttitles=true&titles=%1F' + encodeURIComponent( ( aliasInvoke === 'search' ? full_title.split(' ').slice(1).join(' ') : title ).replace( /\x1F/g, '\ufffd' ) ) + '&format=json' ).then( response => {
|
|
|
+ var uselang = ( querystring.get('variant') || querystring.get('uselang') || lang.lang );
|
|
|
+ got.get( wiki + 'api.php?uselang=' + uselang + '&action=query&meta=siteinfo&siprop=general|namespaces|specialpagealiases&iwurl=true' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=categoryinfo|info|pageprops|pageimages|extracts&piprop=original|name&ppprop=description|displaytitle|page_image_free|disambiguation|infoboxes&explaintext=true&exsectionformat=raw&exlimit=1&converttitles=true&titles=%1F' + encodeURIComponent( ( aliasInvoke === 'search' ? full_title.split(' ').slice(1).join(' ') : title ).replace( /\x1F/g, '\ufffd' ) ) + '&format=json' ).then( response => {
|
|
|
var body = response.body;
|
|
|
if ( body && body.warnings ) log_warn(body.warnings);
|
|
|
if ( response.statusCode !== 200 || !body || body.batchcomplete === undefined || !body.query ) {
|
|
@@ -123,12 +124,20 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
|
|
|
var querypages = Object.values(body.query.pages);
|
|
|
var querypage = querypages[0];
|
|
|
if ( body.query.redirects && body.query.redirects[0].from.split(':')[0] === body.query.namespaces['-1']['*'] && body.query.specialpagealiases.filter( sp => ['Mypage','Mytalk','MyLanguage'].includes( sp.realname ) ).map( sp => sp.aliases[0] ).includes( body.query.redirects[0].from.split(':').slice(1).join(':').split('/')[0].replace( / /g, '_' ) ) ) {
|
|
|
+ noRedirect = ( body.query.specialpagealiases.find( sp => sp.realname === 'MyLanguage' )?.aliases?.[0] === body.query.redirects[0].from.split(':').slice(1).join(':').split('/')[0].replace( / /g, '_' ) ? noRedirect : true );
|
|
|
querypage.title = body.query.redirects[0].from;
|
|
|
delete body.query.redirects[0].tofragment;
|
|
|
+ delete querypage.pageprops;
|
|
|
+ delete querypage.extract;
|
|
|
+ delete querypage.pageimage;
|
|
|
+ delete querypage.original;
|
|
|
delete querypage.missing;
|
|
|
querypage.ns = -1;
|
|
|
querypage.special = '';
|
|
|
+ querypage.contentmodel = 'wikitext';
|
|
|
}
|
|
|
+ querypage.uselang = uselang;
|
|
|
+ querypage.noRedirect = noRedirect;
|
|
|
|
|
|
var contribs = body.query.namespaces['-1']['*'] + ':' + body.query.specialpagealiases.find( sp => sp.realname === 'Contributions' ).aliases[0] + '/';
|
|
|
if ( ( querypage.ns === 2 || querypage.ns === 202 || querypage.ns === 1200 ) && ( !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) ) ) {
|
|
@@ -154,6 +163,7 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
|
|
|
delete querypage.missing;
|
|
|
querypage.ns = -1;
|
|
|
querypage.special = '';
|
|
|
+ querypage.uselang = uselang;
|
|
|
querypage.noRedirect = noRedirect;
|
|
|
fn.user(lang, msg, contribs, username, wiki, querystring, fragment, querypage, contribs, reaction, spoiler);
|
|
|
}
|
|
@@ -186,7 +196,7 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
|
|
|
if ( reaction ) reaction.removeEmoji();
|
|
|
return;
|
|
|
}
|
|
|
- if ( ( querypage.missing !== undefined && querypage.known === undefined && !( noRedirect || querypage.categoryinfo ) ) || querypage.invalid !== undefined ) return got.get( wiki + 'api.php?action=query&prop=categoryinfo|info|pageprops|pageimages|extracts&piprop=original|name&ppprop=description|displaytitle|page_image_free|disambiguation|infoboxes&explaintext=true&exsectionformat=raw&exlimit=1&generator=search&gsrnamespace=4|12|14|' + ( querypage.ns >= 0 ? querypage.ns + '|' : '' ) + Object.values(body.query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&gsrlimit=1&gsrsearch=' + encodeURIComponent( title ) + '&format=json' ).then( srresponse => {
|
|
|
+ if ( ( querypage.missing !== undefined && querypage.known === undefined && !( noRedirect || querypage.categoryinfo ) ) || querypage.invalid !== undefined ) return got.get( wiki + 'api.php?uselang=' + uselang + '&action=query&prop=categoryinfo|info|pageprops|pageimages|extracts&piprop=original|name&ppprop=description|displaytitle|page_image_free|disambiguation|infoboxes&explaintext=true&exsectionformat=raw&exlimit=1&generator=search&gsrnamespace=4|12|14|' + ( querypage.ns >= 0 ? querypage.ns + '|' : '' ) + Object.values(body.query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&gsrlimit=1&gsrsearch=' + encodeURIComponent( title ) + '&format=json' ).then( srresponse => {
|
|
|
logging(wiki, msg.guild?.id, 'general', 'search');
|
|
|
var srbody = srresponse.body;
|
|
|
if ( srbody && srbody.warnings ) log_warn(srbody.warnings);
|
|
@@ -204,6 +214,7 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
|
|
|
return;
|
|
|
}
|
|
|
querypage = Object.values(srbody.query.pages)[0];
|
|
|
+ querypage.uselang = uselang;
|
|
|
var pagelink = wiki.toLink(querypage.title, querystring, fragment);
|
|
|
var text = '';
|
|
|
var embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink );
|
|
@@ -283,11 +294,13 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
|
|
|
if ( reaction ) reaction.removeEmoji();
|
|
|
} );
|
|
|
if ( querypage.ns === -1 ) {
|
|
|
- var pagelink = wiki.toLink(querypage.title, querystring, fragment);
|
|
|
- var embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink ).setThumbnail( new URL(body.query.general.logo, wiki).href );
|
|
|
var specialpage = body.query.specialpagealiases.find( sp => body.query.namespaces['-1']['*'] + ':' + sp.aliases[0].replace( /\_/g, ' ' ) === querypage.title.split('/')[0] );
|
|
|
specialpage = ( specialpage ? specialpage.realname : querypage.title.replace( body.query.namespaces['-1']['*'] + ':', '' ).split('/')[0] ).toLowerCase();
|
|
|
- return fn.special_page(lang, msg, querypage.title, specialpage, embed, wiki, reaction, spoiler);
|
|
|
+ if ( !['mylanguage'].includes( specialpage ) ) {
|
|
|
+ var pagelink = wiki.toLink(querypage.title, querystring, fragment);
|
|
|
+ var embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink ).setThumbnail( new URL(body.query.general.logo, wiki).href );
|
|
|
+ return fn.special_page(lang, msg, querypage.title, specialpage, embed, wiki, reaction, spoiler);
|
|
|
+ }
|
|
|
}
|
|
|
if ( querypage.ns === -2 ) {
|
|
|
logging(wiki, msg.guild?.id, 'general', 'media');
|
|
@@ -408,10 +421,14 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
|
|
|
return;
|
|
|
}
|
|
|
logging(wiki, msg.guild?.id, 'general');
|
|
|
- var querypage = {title: body.query.general.mainpage, contentmodel: 'wikitext'};
|
|
|
+ var querypage = {
|
|
|
+ title: body.query.general.mainpage,
|
|
|
+ contentmodel: 'wikitext',
|
|
|
+ uselang, noRedirect
|
|
|
+ };
|
|
|
var pagelink = wiki.toLink(querypage.title, querystring, fragment);
|
|
|
var embed = new MessageEmbed().setAuthor( body.query.general.sitename ).setTitle( querypage.title.escapeFormatting() ).setURL( pagelink ).setThumbnail( new URL(body.query.general.logo, wiki).href );
|
|
|
- got.get( wiki + 'api.php?action=query' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=info|pageprops|extracts&ppprop=description|displaytitle|disambiguation|infoboxes&explaintext=true&exsectionformat=raw&exlimit=1&titles=' + encodeURIComponent( querypage.title ) + '&format=json' ).then( mpresponse => {
|
|
|
+ got.get( wiki + 'api.php?uselang=' + uselang + '&action=query' + ( noRedirect ? '' : '&redirects=true' ) + '&prop=info|pageprops|extracts&ppprop=description|displaytitle|disambiguation|infoboxes&explaintext=true&exsectionformat=raw&exlimit=1&titles=' + encodeURIComponent( querypage.title ) + '&format=json' ).then( mpresponse => {
|
|
|
var mpbody = mpresponse.body;
|
|
|
if ( mpbody && mpbody.warnings ) log_warn(body.warnings);
|
|
|
if ( mpresponse.statusCode !== 200 || !mpbody || mpbody.batchcomplete === undefined || !mpbody.query ) {
|
|
@@ -419,6 +436,19 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
|
|
|
return;
|
|
|
}
|
|
|
querypage = Object.values(mpbody.query.pages)[0];
|
|
|
+ if ( mpbody.query.redirects && mpbody.query.redirects[0].from.split(':')[0] === body.query.namespaces['-1']['*'] && body.query.specialpagealiases.filter( sp => ['Mypage','Mytalk'].includes( sp.realname ) ).map( sp => sp.aliases[0] ).includes( mpbody.query.redirects[0].from.split(':').slice(1).join(':').split('/')[0].replace( / /g, '_' ) ) ) {
|
|
|
+ noRedirect = true;
|
|
|
+ querypage.title = mpbody.query.redirects[0].from;
|
|
|
+ delete mpbody.query.redirects[0].tofragment;
|
|
|
+ delete querypage.pageprops;
|
|
|
+ delete querypage.extract;
|
|
|
+ delete querypage.missing;
|
|
|
+ querypage.ns = -1;
|
|
|
+ querypage.special = '';
|
|
|
+ querypage.contentmodel = 'wikitext';
|
|
|
+ }
|
|
|
+ querypage.uselang = uselang;
|
|
|
+ querypage.noRedirect = noRedirect;
|
|
|
if ( querypage.pageprops && querypage.pageprops.displaytitle ) {
|
|
|
var displaytitle = htmlToDiscord( querypage.pageprops.displaytitle );
|
|
|
if ( displaytitle.length > 250 ) displaytitle = displaytitle.substring(0, 250) + '\u2026';
|