1
0

global_block.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. const cheerio = require('cheerio');
  2. const {timeoptions} = require('../util/default.json');
  3. function global_block(lang, msg, username, text, embed, wiki, spoiler) {
  4. if ( !msg || msg.channel.type !== 'text' || !( msg.guild.id in patreons ) ) return;
  5. if ( msg.showEmbed() ) embed.fields.pop();
  6. else {
  7. let splittext = text.split('\n\n');
  8. splittext.pop();
  9. text = splittext.join('\n\n');
  10. }
  11. if ( wiki.isFandom() ) got.get( 'https://community.fandom.com/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1' ).then( response => {
  12. var body = response.body;
  13. if ( response.statusCode !== 200 || !body ) {
  14. console.log( '- ' + response.statusCode + ': Error while getting the global block.' );
  15. }
  16. else {
  17. let $ = cheerio.load(body);
  18. if ( $('#mw-content-text .errorbox').length ) {
  19. if ( msg.showEmbed() ) embed.addField( lang.get('user.gblock.disabled'), '\u200b' );
  20. else text += '\n\n**' + lang.get('user.gblock.disabled') + '**';
  21. }
  22. else if ( $('.mw-warning-with-logexcerpt').length && !$(".mw-warning-with-logexcerpt .mw-logline-block").length ) {
  23. if ( msg.showEmbed() ) embed.addField( lang.get('user.gblock.header').replaceSave( '%s', username ).escapeFormatting(), '\u200b' );
  24. else text += '\n\n**' + lang.get('user.gblock.header').replaceSave( '%s', username ).escapeFormatting() + '**';
  25. }
  26. }
  27. }, error => {
  28. console.log( '- Error while getting the global block: ' + error );
  29. } ).finally( () => {
  30. if ( !/^(?:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{2})?|(?:[\dA-F]{1,4}:){7}[\dA-F]{1,4}(?:\/\d{2,3})?)$/.test(username) ) {
  31. got.get( 'https://community.fandom.com/wiki/Special:Editcount/' + encodeURIComponent( username ) ).then( gresponse => {
  32. var gbody = gresponse.body;
  33. if ( gresponse.statusCode !== 200 || !gbody ) {
  34. console.log( '- ' + gresponse.statusCode + ': Error while getting the global edit count.' );
  35. }
  36. else {
  37. let $ = cheerio.load(gbody);
  38. var globaledits = $('#editcount .TablePager th').eq(7).text().replace( /[,\.]/g, '' );
  39. if ( globaledits ) {
  40. if ( msg.showEmbed() ) embed.spliceFields(1, 0, {name:lang.get('user.info.globaleditcount'),value:'[' + globaledits + '](https://community.fandom.com/wiki/Special:Editcount/' + username.toTitle(true) + ')',inline:true});
  41. else {
  42. let splittext = text.split('\n');
  43. splittext.splice(5, 0, lang.get('user.info.globaleditcount') + ' ' + globaledits);
  44. text = splittext.join('\n');
  45. }
  46. }
  47. }
  48. }, error => {
  49. console.log( '- Error while getting the global edit count: ' + error );
  50. } ).finally( () => {
  51. msg.edit( spoiler + text + spoiler, {embed,allowedMentions:{parse:[]}} ).catch(log_error);
  52. } );
  53. }
  54. else msg.edit( spoiler + text + spoiler, {embed,allowedMentions:{parse:[]}} ).catch(log_error);
  55. } );
  56. else if ( wiki.endsWith( '.gamepedia.com/' ) ) got.get( 'https://help.gamepedia.com/Special:GlobalBlockList/' + encodeURIComponent( username ) + '?uselang=qqx' ).then( response => {
  57. var body = response.body;
  58. if ( response.statusCode !== 200 || !body ) {
  59. console.log( '- ' + response.statusCode + ': Error while getting the global block.' );
  60. }
  61. else {
  62. let $ = cheerio.load(body);
  63. var gblock = $('.mw-blocklist');
  64. if ( gblock.length ) {
  65. var reason = gblock.find('.TablePager_col_reason').text().replace( /\)$/, '' ).split(', ');
  66. var timestamp = new Date(gblock.find('.TablePager_col_timestamp').text().replace( /(\d{2}:\d{2}), (\d{1,2}) \((\w+)\) (\d{4})/, '$3 $2, $4 $1 UTC' )).toLocaleString(lang.get('dateformat'), timeoptions);
  67. var expiry = gblock.find('.TablePager_col_expiry').text();
  68. if ( expiry.startsWith( '(infiniteblock)' ) ) expiry = lang.get('user.block.until_infinity');
  69. else expiry = new Date(expiry.replace( /(\d{2}:\d{2}), (\d{1,2}) \((\w+)\) (\d{4})/, '$3 $2, $4 $1 UTC' )).toLocaleString(lang.get('dateformat'), timeoptions);
  70. if ( msg.showEmbed() ) {
  71. var gblocktitle = lang.get('user.gblock.header').replaceSave( '%s', username ).escapeFormatting();
  72. var globalblock = embed.fields.find( field => field.inline === false && field.name === lang.get('user.block.header').replaceSave( '%s', username ).escapeFormatting() && field.value.replace( /\[([^\]]*)\]\([^\)]*\)/g, '$1' ) === lang.get('user.block.' + ( reason.length > 4 ? 'text' : 'noreason' )).replaceSave( '%1$s', timestamp ).replaceSave( '%2$s', expiry ).replaceSave( '%3$s', reason[1].escapeFormatting() ).replaceSave( '%4$s', reason.slice(4).join(', ').escapeFormatting() ) );
  73. if ( globalblock ) globalblock.name = gblocktitle;
  74. else {
  75. var block_wiki = reason[3].replace( /Special:BlockList$/, '' );
  76. var gblocktext = lang.get('user.gblock.' + ( reason.length > 4 ? 'text' : 'noreason' )).replaceSave( '%1$s', timestamp ).replaceSave( '%2$s', expiry ).replaceSave( '%3$s', '[' + reason[1] + '](' + block_wiki + 'User:' + reason[1].toTitle(true) + ')' ).replaceSave( '%4$s', '[' + reason[2] + '](' + block_wiki + 'Special:Contribs/' + username.toTitle(true) + ')' ).replaceSave( '%5$s', reason.slice(4).join(', ').escapeFormatting() );
  77. embed.addField( gblocktitle, gblocktext );
  78. }
  79. }
  80. else {
  81. let splittext = text.split('\n\n');
  82. var globalblock = splittext.indexOf('**' + lang.get('user.block.header').replaceSave( '%s', username ).escapeFormatting() + '**\n' + lang.get('user.block.' + ( reason.length > 4 ? 'text' : 'noreason' )).replaceSave( '%1$s', timestamp ).replaceSave( '%2$s', expiry ).replaceSave( '%3$s', reason[1].escapeFormatting() ).replaceSave( '%4$s', reason.slice(4).join(', ').escapeFormatting() ));
  83. if ( globalblock !== -1 ) splittext[globalblock] = '**' + lang.get('user.gblock.header').replaceSave( '%s', username ).escapeFormatting() + '**\n' + lang.get('user.block.' + ( reason.length > 4 ? 'text' : 'noreason' )).replaceSave( '%1$s', timestamp ).replaceSave( '%2$s', expiry ).replaceSave( '%3$s', reason[1].escapeFormatting() ).replaceSave( '%4$s', reason.slice(4).join(', ').escapeFormatting() );
  84. else splittext.push('**' + lang.get('user.gblock.header').replaceSave( '%s', username ).escapeFormatting() + '**\n' + lang.get('user.gblock.' + ( reason.length > 4 ? 'text' : 'noreason' )).replaceSave( '%1$s', timestamp ).replaceSave( '%2$s', expiry ).replaceSave( '%3$s', reason[1].escapeFormatting() ).replaceSave( '%4$s', reason[2] ).replaceSave( '%5$s', reason.slice(4).join(', ').escapeFormatting() ));
  85. text = splittext.join('\n\n');
  86. }
  87. }
  88. }
  89. }, error => {
  90. console.log( '- Error while getting the global block: ' + error );
  91. } ).finally( () => {
  92. if ( !/^(?:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{2})?|(?:[\dA-F]{1,4}:){7}[\dA-F]{1,4}(?:\/\d{2,3})?)$/.test(username) ) {
  93. got.get( 'https://help.gamepedia.com/UserProfile:' + encodeURIComponent( username ) ).then( gresponse => {
  94. var gbody = gresponse.body;
  95. if ( gresponse.statusCode !== 200 || !gbody ) {
  96. console.log( '- ' + gresponse.statusCode + ': Error while getting the global edit count.' );
  97. }
  98. else {
  99. let $ = cheerio.load(gbody);
  100. var wikisedited = $('.curseprofile .rightcolumn .section.stats dd').eq(0).text().replace( /[,\.]/g, '' );
  101. if ( wikisedited ) {
  102. if ( msg.showEmbed() ) embed.spliceFields(1, 0, {name:lang.get('user.info.wikisedited'),value:wikisedited,inline:true});
  103. else {
  104. let splittext = text.split('\n');
  105. splittext.splice(5, 0, lang.get('user.info.wikisedited') + ' ' + wikisedited);
  106. text = splittext.join('\n');
  107. }
  108. }
  109. var globaledits = $('.curseprofile .rightcolumn .section.stats dd').eq(2).text().replace( /[,\.]/g, '' );
  110. if ( globaledits ) {
  111. if ( msg.showEmbed() ) embed.spliceFields(1, 0, {name:lang.get('user.info.globaleditcount'),value:'[' + globaledits + '](https://help.gamepedia.com/Gamepedia_Help_Wiki:Global_user_tracker#' + wiki.replace( /^https:\/\/([a-z\d-]{1,50})\.gamepedia\.com\/$/, '$1/' ) + username.toTitle(true) + ')',inline:true});
  112. else {
  113. let splittext = text.split('\n');
  114. splittext.splice(5, 0, lang.get('user.info.globaleditcount') + ' ' + globaledits);
  115. text = splittext.join('\n');
  116. }
  117. }
  118. }
  119. }, error => {
  120. console.log( '- Error while getting the global edit count: ' + error );
  121. } ).finally( () => {
  122. msg.edit( spoiler + text + spoiler, {embed,allowedMentions:{parse:[]}} ).catch(log_error);
  123. } );
  124. }
  125. else msg.edit( spoiler + text + spoiler, {embed,allowedMentions:{parse:[]}} ).catch(log_error);
  126. } );
  127. }
  128. module.exports = global_block;