global_block.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. const cheerio = require('cheerio');
  2. const {timeoptions} = require('../util/default.json');
  3. const toTitle = require('../util/wiki.js').toTitle;
  4. /**
  5. * Add global blocks to user messages.
  6. * @param {import('../util/i18n.js')} lang - The user language.
  7. * @param {import('discord.js').Message} msg - The Discord message.
  8. * @param {String} username - The name of the user.
  9. * @param {String} text - The text of the response.
  10. * @param {import('discord.js').MessageEmbed} embed - The embed for the page.
  11. * @param {import('../util/wiki.js')} wiki - The wiki for the page.
  12. * @param {String} spoiler - If the response is in a spoiler.
  13. * @param {String} [gender] - The gender of the user.
  14. */
  15. function global_block(lang, msg, username, text, embed, wiki, spoiler, gender) {
  16. if ( !msg || !msg.channel.isGuild() || !( msg.guild.id in patreons ) || !wiki.isFandom() ) return;
  17. var isUser = true;
  18. if ( !gender ) {
  19. isUser = false;
  20. gender = 'unknown';
  21. }
  22. if ( msg.showEmbed() ) embed.fields.pop();
  23. else {
  24. let splittext = text.split('\n\n');
  25. splittext.pop();
  26. text = splittext.join('\n\n');
  27. }
  28. Promise.all([
  29. got.get( 'https://community.fandom.com/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1', {
  30. responseType: 'text'
  31. } ).then( response => {
  32. var body = response.body;
  33. if ( response.statusCode !== 200 || !body ) {
  34. console.log( '- ' + response.statusCode + ': Error while getting the global block.' );
  35. }
  36. else {
  37. let $ = cheerio.load(body);
  38. if ( $('#mw-content-text .errorbox').length ) {
  39. if ( msg.showEmbed() ) embed.addField( '\u200b', '**' + lang.get('user.gblock.disabled') + '**' );
  40. else text += '\n\n**' + lang.get('user.gblock.disabled') + '**';
  41. }
  42. else if ( $('.mw-warning-with-logexcerpt').length && !$(".mw-warning-with-logexcerpt .mw-logline-block").length ) {
  43. if ( msg.showEmbed() ) embed.addField( '\u200b', '**' + lang.get('user.gblock.header', username, gender).escapeFormatting() + '**' );
  44. else text += '\n\n**' + lang.get('user.gblock.header', username, gender).escapeFormatting() + '**';
  45. }
  46. }
  47. }, error => {
  48. console.log( '- Error while getting the global block: ' + error );
  49. } ),
  50. ( isUser ? ( wiki.isGamepedia() ? got.get( 'https://help.gamepedia.com/UserProfile:' + encodeURIComponent( username ), {
  51. responseType: 'text'
  52. } ).then( gresponse => {
  53. var gbody = gresponse.body;
  54. if ( gresponse.statusCode !== 200 || !gbody ) {
  55. console.log( '- ' + gresponse.statusCode + ': Error while getting the global edit count.' );
  56. }
  57. else {
  58. let $ = cheerio.load(gbody);
  59. var wikisedited = $('.curseprofile .rightcolumn .section.stats dd').eq(0).text().replace( /[,\.]/g, '' );
  60. if ( wikisedited ) {
  61. if ( msg.showEmbed() ) embed.spliceFields(1, 0, {
  62. name: lang.get('user.info.wikisedited'),
  63. value: wikisedited,
  64. inline: true
  65. });
  66. else {
  67. let splittext = text.split('\n');
  68. splittext.splice(5, 0, lang.get('user.info.wikisedited') + ' ' + wikisedited);
  69. text = splittext.join('\n');
  70. }
  71. }
  72. var globaledits = $('.curseprofile .rightcolumn .section.stats dd').eq(2).text().replace( /[,\.]/g, '' );
  73. if ( globaledits ) {
  74. if ( msg.showEmbed() ) embed.spliceFields(1, 0, {
  75. name: lang.get('user.info.globaleditcount'),
  76. value: globaledits,
  77. inline: true
  78. });
  79. else {
  80. let splittext = text.split('\n');
  81. splittext.splice(5, 0, lang.get('user.info.globaleditcount') + ' ' + globaledits);
  82. text = splittext.join('\n');
  83. }
  84. }
  85. if ( msg.showEmbed() ) {
  86. let avatar = $('.curseprofile .mainavatar img').prop('src');
  87. if ( avatar ) {
  88. embed.setThumbnail( avatar.replace( /^(?:https?:)?\/\//, 'https://' ).replace( '?d=mm&s=96', '?d=' + encodeURIComponent( embed?.thumbnail?.url || '404' ) ) );
  89. }
  90. }
  91. }
  92. }, error => {
  93. console.log( '- Error while getting the global edit count: ' + error );
  94. } ) : got.get( 'https://community.fandom.com/wiki/Special:Editcount/' + encodeURIComponent( username ), {
  95. responseType: 'text'
  96. } ).then( gresponse => {
  97. var gbody = gresponse.body;
  98. if ( gresponse.statusCode !== 200 || !gbody ) {
  99. console.log( '- ' + gresponse.statusCode + ': Error while getting the global edit count.' );
  100. }
  101. else {
  102. let $ = cheerio.load(gbody);
  103. var globaledits = $('#editcount .TablePager th').eq(7).text().replace( /[,\.]/g, '' );
  104. if ( globaledits ) {
  105. if ( msg.showEmbed() ) embed.spliceFields(1, 0, {
  106. name: lang.get('user.info.globaleditcount'),
  107. value: globaledits,
  108. inline: true
  109. });
  110. else {
  111. let splittext = text.split('\n');
  112. splittext.splice(5, 0, lang.get('user.info.globaleditcount') + ' ' + globaledits);
  113. text = splittext.join('\n');
  114. }
  115. }
  116. }
  117. }, error => {
  118. console.log( '- Error while getting the global edit count: ' + error );
  119. } ) ) : undefined )
  120. ]).finally( () => {
  121. msg.edit( spoiler + text + spoiler, {embed,allowedMentions:{parse:[]}} ).catch(log_error);
  122. } );
  123. }
  124. module.exports = global_block;