global_block.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. const cheerio = require('cheerio');
  2. /**
  3. * Add global blocks to user messages.
  4. * @param {import('../util/i18n.js')} lang - The user language.
  5. * @param {import('discord.js').Message} msg - The Discord message.
  6. * @param {String} username - The name of the user.
  7. * @param {String} text - The text of the response.
  8. * @param {import('discord.js').MessageEmbed} embed - The embed for the page.
  9. * @param {import('../util/wiki.js')} wiki - The wiki for the page.
  10. * @param {String} spoiler - If the response is in a spoiler.
  11. * @param {String} [gender] - The gender of the user.
  12. */
  13. function global_block(lang, msg, username, text, embed, wiki, spoiler, gender) {
  14. if ( !msg || !msg.channel.isGuild() || !patreons[msg.guild?.id] || !wiki.isFandom() ) return;
  15. var isUser = true;
  16. if ( !gender ) {
  17. isUser = false;
  18. gender = 'unknown';
  19. }
  20. if ( msg.showEmbed() ) embed.fields.pop();
  21. else {
  22. let splittext = text.split('\n\n');
  23. splittext.pop();
  24. text = splittext.join('\n\n');
  25. }
  26. Promise.all([
  27. got.get( 'https://ucp.fandom.com/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1', {
  28. responseType: 'text'
  29. } ).then( response => {
  30. var body = response.body;
  31. if ( response.statusCode !== 200 || !body ) {
  32. console.log( '- ' + response.statusCode + ': Error while getting the global block.' );
  33. }
  34. else {
  35. let $ = cheerio.load(body);
  36. if ( $('#mw-content-text .errorbox').length ) {
  37. if ( msg.showEmbed() ) embed.addField( '\u200b', '**' + lang.get('user.gblock.disabled') + '**' );
  38. else text += '\n\n**' + lang.get('user.gblock.disabled') + '**';
  39. }
  40. else if ( $('head script').eq(1).html().includes( '"isBlockedInPhalanx":true' ) ) {
  41. if ( msg.showEmbed() ) embed.addField( '\u200b', '**' + lang.get('user.gblock.header', username, gender).escapeFormatting() + '**' );
  42. else text += '\n\n**' + lang.get('user.gblock.header', username, gender).escapeFormatting() + '**';
  43. }
  44. }
  45. }, error => {
  46. console.log( '- Error while getting the global block: ' + error );
  47. } ),
  48. ( isUser && wiki.isGamepedia() ? got.get( 'https://help.gamepedia.com/UserProfile:' + encodeURIComponent( username ) + '?cache=' + Date.now(), {
  49. responseType: 'text'
  50. } ).then( gresponse => {
  51. var gbody = gresponse.body;
  52. if ( gresponse.statusCode !== 200 || !gbody ) {
  53. console.log( '- ' + gresponse.statusCode + ': Error while getting the global edit count.' );
  54. }
  55. else {
  56. let $ = cheerio.load(gbody);
  57. var wikisedited = $('.curseprofile .rightcolumn .section.stats dd').eq(0).text().replace( /[,\.]/g, '' );
  58. if ( wikisedited ) {
  59. wikisedited = parseInt(wikisedited, 10).toLocaleString(lang.get('dateformat'));
  60. if ( msg.showEmbed() ) embed.spliceFields(1, 0, {
  61. name: lang.get('user.info.wikisedited'),
  62. value: wikisedited,
  63. inline: true
  64. });
  65. else {
  66. let splittext = text.split('\n');
  67. splittext.splice(5, 0, lang.get('user.info.wikisedited') + ' ' + wikisedited);
  68. text = splittext.join('\n');
  69. }
  70. }
  71. var globaledits = $('.curseprofile .rightcolumn .section.stats dd').eq(2).text().replace( /[,\.]/g, '' );
  72. if ( globaledits ) {
  73. globaledits = parseInt(globaledits, 10).toLocaleString(lang.get('dateformat'));
  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. } ) : undefined )
  95. ]).finally( () => {
  96. msg.edit( spoiler + text + spoiler, {embed,allowedMentions:{parse:[]}} ).catch(log_error);
  97. } );
  98. }
  99. module.exports = global_block;