Advertisement
Xbobcatx420

nkjk

Sep 26th, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let fs = require('fs');
  2. let uuid = require('uuid/v1');
  3. let discord = require('discord.js');
  4. let snek = require('snekfetch');
  5.  
  6. exports.run = async (bot, message, args) => {
  7.   if (!message.member.permissions.has('ADMINISTRATOR')) return message.channel.send('❌ | You do not have the `ADMINISTRATOR` permission!');
  8.   if (!message.guild.me.permissions.has('ADMINISTRATOR')) return message.channel.send('❌ | I do not have the `ADMINISTRATOR` permission!');
  9.   let {highestRole} = message.guild.me;
  10.   let compare = highestRole.position == message.guild.roles.size-1;
  11.   if (!compare) return message.channel.send('❌ | My role must be at the top!');
  12.   if (!args[0]) {
  13.     return message.channel.send(':x: | Invalid command usage!');
  14.   };
  15.   if (args[0].toLowerCase() == 'create') {
  16.   let m = await message.channel.send('Creating backup...');
  17.   let roles = message.guild.roles.map(r => {
  18.     let {members} = r;
  19.     let mdata = members.map(m => {
  20.       let {id} = m.user;
  21.       let {tag} = m.user;
  22.       let {username} = m.user;
  23.       return {id:id,tag:tag,username:username};
  24.     });
  25.     let {permissions} = r;
  26.     let {mentionable} = r;
  27.     let {position} = r;
  28.     let {color} = r;
  29.     let {name} = r;
  30.     let {id} = r;
  31.     return {members:mdata,permissions:permissions,mentionable:mentionable,position:position,color:color,name:name,id:id};
  32.   });
  33.   let members = message.guild.members.map(m => {
  34.     let {id} = m.user;
  35.     return id;
  36.   });
  37.   let category = message.guild.channels.filter(c => c.type === 'category').map(c => {
  38.     let children = c.children.map(c2 => {
  39.       return {id:c2.id,name:c2.name};
  40.     });
  41.     let {name} = c;
  42.     let {id} = c;
  43.     let {position} = c;
  44.     let {permissionOverwrites} = c;
  45.     let permissions = permissionOverwrites.map(p => {
  46.       let pa = new discord.Permissions(p.allow);
  47.       let pd = new discord.Permissions(p.deny);
  48.       let allowFlags = pa.FLAGS;
  49.       let denyFlags = pd.FLAGS;
  50.       return {id:p.id,type:p.type,deny:p.deny,allow:p.allow};
  51.     });
  52.     return {children:children,name:name,id:id,position:position,permissionOverwrites:permissionOverwrites,permissions:permissions};
  53.   });
  54.   let text = message.guild.channels.filter(c => c.type === 'text').map(c => {
  55.     let {name} = c;
  56.     let {id} = c;
  57.     let {calculatedPosition} = c;
  58.     let parent,parentID,parentName;
  59.     if (c.parent) {
  60.       let {parent} = c;
  61.       let {parentID} = c;
  62.       let parentName = parent.name;
  63.     };
  64.     let {nsfw} = c;
  65.     let {permissionOverwrites} = c;
  66.     let permissions = permissionOverwrites.map(p => {
  67.       let pa = new discord.Permissions(p.allow);
  68.       let pd = new discord.Permissions(p.deny);
  69.       let allowFlags = pa.FLAGS;
  70.       let denyFlags = pd.FLAGS;
  71.       return {id:p.id,type:p.type,deny:p.deny,allow:p.allow};
  72.     });
  73.     let po = JSON.stringify(permissionOverwrites.array());
  74.     return {name:name,id:id,calculatedPosition:calculatedPosition,parentID:parentID,parentName:parentName,nsfw:nsfw,po:po,permissions:permissions};
  75.   });
  76.   let voice = message.guild.channels.filter(c => c.type === 'voice').map(c => {
  77.     let {bitrate,calculatedPosition,name,id,permissionOverwrites} = c;
  78.     let po = JSON.stringify(permissionOverwrites.array());
  79.     let permissions = permissionOverwrites.map(p => {
  80.       let pa = new discord.Permissions(p.allow);
  81.       let pd = new discord.Permissions(p.deny);
  82.       let allowFlags = pa.FLAGS;
  83.       let denyFlags = pd.FLAGS;
  84.       return {id:p.id,type:p.type,deny:p.deny,allow:p.allow};
  85.     });
  86.     let parent,parentID,parentName;
  87.     if (c.parent) {
  88.       let {parent} = c;
  89.       let {parentID} = c;
  90.       let parentName = parent.name;
  91.     };
  92.     return {name:name,id:id,calculatedPosition:calculatedPosition,parentID:parentID,parentName:parentName,permissionOverwrites:permissionOverwrites,permissions:permissions,po:po};
  93.   });
  94.   let data = JSON.stringify({roles:roles,members:members,channels:{category:category,text:text,voice:voice}});
  95.   let id = (new Date().getTime()/16).toString(36);
  96.   fs.writeFile(`/tmp/backup-${id}.data`, data, async (err) => {
  97.     if (err) {
  98.       console.error(err);
  99.       return message.channel.send(':x: | An error occured: ' + err);
  100.     };
  101.     await message.author.send('Your backup is here:',{ file: `/tmp/backup-${id}.data` });
  102.     await m.edit('✅ | Your backup has been created. Check your DMs.');
  103.   });
  104.     return
  105.   };
  106.   if (args[0].toLowerCase() === 'load') {
  107.     let {attachments} = message;
  108.     if (!attachments.first()) {
  109.       return message.channel.send(':x: | You must upload a backup file!');
  110.     };
  111.     let attachment = attachments.first();
  112.     let {url} = attachment;
  113.     let {body} = await snek.get(url);
  114.     let buffer = new Buffer(body);
  115.     if (!buffer) return message.channel.send(':x: | That backup seems to be invalid');
  116.     let data = buffer.toString();
  117.     if (!data) return message.channel.send(':x: | That backup seems to be invalid');
  118.     try {
  119.       data = JSON.parse(data);
  120.     } catch(e) {
  121.       return message.channel.send(':x: | That backup seems to be invalid');
  122.     }
  123.     if (!data) return message.channel.send(':x: | That backup seems to be invalid');
  124.     message.guild.channels.map(c => c.delete().catch(O_o=>{}));
  125.     let category = data.channels.category;
  126.     if (category) {
  127.       category.map(c => {
  128.         c = message.guild.createChannel(c.name,'category');
  129.       });
  130.     };
  131.     let text = data.channels.text;
  132.     if (text) {
  133.       text.map(c => {
  134.         let permissions = c;
  135.         c = message.guild.createChannel(c.name,'text');
  136.         /*permissions.map(p => {
  137.           c.overwritePermissions(c.id);
  138.         });*/
  139.       });
  140.     };
  141.   };
  142. }
  143.  
  144. module.exports.help = {
  145.     name: "backup",
  146.     desc: "Create/load a server backup.",
  147.     usage: "backup"
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement