guilds.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. const cheerio = require('cheerio');
  2. const {defaultPermissions} = require('../util/default.json');
  3. const {db, settingsData, sendMsg, createNotice, hasPerm} = require('./util.js');
  4. const DiscordOauth2 = require('discord-oauth2');
  5. const oauth = new DiscordOauth2( {
  6. clientId: process.env.bot,
  7. clientSecret: process.env.secret,
  8. redirectUri: process.env.dashboard
  9. } );
  10. const file = require('fs').readFileSync('./dashboard/index.html');
  11. /**
  12. * Let a user change settings
  13. * @param {import('http').ServerResponse} res - The server response
  14. * @param {String} state - The user state
  15. * @param {URL} reqURL - The used url
  16. */
  17. function dashboard_guilds(res, state, reqURL) {
  18. var arguments = reqURL.pathname.split('/');
  19. var settings = settingsData.get(state);
  20. var $ = cheerio.load(file);
  21. let notice = '';
  22. if ( process.env.READONLY ) {
  23. notice = createNotice($, {
  24. title: 'Read-only database!',
  25. text: 'You can currently only view your settings but not change them.'
  26. });
  27. }
  28. $('replace#notice').replaceWith(notice);
  29. $('.navbar #logout img').attr('src', settings.user.avatar);
  30. $('.navbar #logout span').text(`${settings.user.username} #${settings.user.discriminator}`);
  31. $('.guild#invite a').attr('href', oauth.generateAuthUrl( {
  32. scope: ['identify', 'guilds', 'bot'],
  33. permissions: defaultPermissions, state
  34. } ));
  35. $('.guild#refresh a').attr('href', '/refresh?return=' + reqURL.pathname);
  36. let guilds = $('<div>');
  37. if ( settings.guilds.isMember.size ) {
  38. $('<div class="guild">').append(
  39. $('<div class="separator">')
  40. ).appendTo(guilds);
  41. settings.guilds.isMember.forEach( guild => {
  42. $('<div class="guild">').attr('id', guild.id).append(
  43. $('<div class="bar">'),
  44. $('<a>').attr('href', `/guild/${guild.id}`).attr('alt', guild.name).append(
  45. ( guild.icon ?
  46. $('<img class="avatar" width="48" height="48">').attr('src', guild.icon).attr('alt', guild.name)
  47. : $('<div class="avatar noicon">').text(guild.acronym) )
  48. )
  49. ).appendTo(guilds);
  50. } );
  51. }
  52. if ( settings.guilds.notMember.size ) {
  53. $('<div class="guild">').append(
  54. $('<div class="separator">')
  55. ).appendTo(guilds);
  56. settings.guilds.notMember.forEach( guild => {
  57. $('<div class="guild">').attr('id', guild.id).append(
  58. $('<div class="bar">'),
  59. $('<a>').attr('href', `/guild/${guild.id}`).attr('alt', guild.name).append(
  60. ( guild.icon ?
  61. $('<img class="avatar" width="48" height="48">').attr('src', guild.icon).attr('alt', guild.name)
  62. : $('<div class="avatar noicon">').text(guild.acronym) )
  63. )
  64. ).appendTo(guilds);
  65. } );
  66. }
  67. $('replace#guilds').replaceWith(guilds.children());
  68. if ( reqURL.pathname.startsWith( '/guild/' ) ) {
  69. let id = reqURL.pathname.replace( '/guild/', '' );
  70. if ( settings.guilds.isMember.has(id) ) {
  71. $(`.guild#${id}`).addClass('selected');
  72. let guild = settings.guilds.isMember.get(id);
  73. $('head title').text(`${guild.name} – ` + $('head title').text());
  74. res.setHeader('Set-Cookie', [`guild="${id}"; HttpOnly; Path=/`]);
  75. $('replace#text').replaceWith(`${guild.permissions}`);
  76. }
  77. if ( settings.guilds.notMember.has(id) ) {
  78. $(`.guild#${id}`).addClass('selected');
  79. let guild = settings.guilds.notMember.get(id);
  80. $('head title').text(`${guild.name} – ` + $('head title').text());
  81. res.setHeader('Set-Cookie', [`guild="${id}"; HttpOnly; Path=/`]);
  82. let url = oauth.generateAuthUrl( {
  83. scope: ['identify', 'guilds', 'bot'],
  84. permissions: defaultPermissions,
  85. guild_id: id, state
  86. } );
  87. $('replace#text').replaceWith($('<a>').attr('href', url).text(guild.permissions));
  88. }
  89. $('replace#text').replaceWith('You are missing the <code>MANAGE_GUILD</code> permission.');
  90. }
  91. $('replace#text').replaceWith('Keks');
  92. let body = $.html();
  93. res.writeHead(200, {'Content-Length': body.length});
  94. res.write( body );
  95. return res.end();
  96. }
  97. module.exports = dashboard_guilds;