Advertisement
Guest User

Untitled

a guest
May 27th, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const Discord = require('discord.js');
  2. const moment = require('moment');
  3. const client = new Discord.Client();
  4. const config = require("./config.json");
  5. const settings = require("./settings.json");
  6. const messages = require('./msg.json');
  7. const fs = require('fs');
  8.  
  9. client.on("ready", () => {
  10.     console.log(`Bot has started, with ${client.users.size} users, in ${client.channels.size} channels of ${client.guilds.size} guilds.`);
  11.     //client.user.setActivity(`Watching ${client.guilds.size} Server(s)`);
  12.  
  13.     client.guilds.array().forEach(function (guild) {
  14.         //console.log(settings.hasOwnProperty(guild.id));
  15.         if (!settings.hasOwnProperty(guild.id)) {
  16.             guild_default = {
  17.                 "name": guild.name,
  18.                 "memberCount": guild.memberCount
  19.             };
  20.             settings[guild.id] = guild_default;
  21.             //console.log(settings[guild.id]);
  22.         }
  23.     });
  24.  
  25.     save_settings();
  26.  
  27.     setInterval(function () {
  28.         let status = messages[Math.floor(Math.random() * messages.length)];
  29.         client.user.setActivity(status);
  30.         console.log("Set Activity to " + status);
  31.     }, 300000);
  32. });
  33.  
  34. save_settings = function () {
  35.     fs.writeFile('settings.json', JSON.stringify(settings, null, 4), function (err) {
  36.         if (err) console.log("Failed to save settings : " + err);
  37.         else console.log(`Saved settings!`);
  38.     });
  39. }
  40.  
  41. client.on("guildCreate", guild => {
  42.     console.log(`New guild joined: ${guild.name} (id: ${guild.id}). This guild has ${guild.memberCount} members!`);
  43. });
  44.  
  45. fromGuild = function (message) {
  46.     if (message.guild == null) {
  47.         message.channel.send("No no, not here")
  48.         return false;
  49.     }
  50.     return true
  51. };
  52.  
  53. /**
  54.  * Returns a guild's setting from settings.json
  55.  * @function
  56.  * @param {discord.Guild} guild - Guild to get setting from
  57.  * @param {string} settingKey - Setting name to get
  58.  * @returns {string} The setting value
  59.  */
  60. getGuildSetting = function (guild, settingKey) {
  61.     guildSettings = (settings.hasOwnProperty(guild.id)) ? settings[guild.id] : null;
  62.     if (guildSettings == null) return null;
  63.  
  64.     if (guildSettings.hasOwnProperty(settingKey)) {
  65.         return guildSettings[settingKey];
  66.     }
  67.     else {
  68.         return null;
  69.     }
  70. };
  71.  
  72. setGuildSetting = function (guild, settingKey, settingValue) {
  73.     if (guild == null || settingKey == null || settingValue == null) return false;
  74.     guildSettings = (settings.hasOwnProperty(guild.id)) ? settings[guild.id] : null;
  75.     if (guildSettings == null) return false;
  76.  
  77.     guildSettings[settingKey] = settingValue;
  78.     save_settings();
  79. };
  80.  
  81.  
  82. client.on("message", async message => {
  83.     //if (!message.content.startsWith(config.prefix) || message.author.bot) return;
  84.  
  85.     let prefix = config.prefix;
  86.  
  87.     if (fromGuild(message)) {
  88.  
  89.         const guild = message.guild;
  90.         guild_prefix = getGuildSetting(guild, "prefix");
  91.         if (guild_prefix != null) prefix = guild_prefix;
  92.     }
  93.  
  94.     if (!message.content.startsWith(prefix) || message.author.bot) return;
  95.  
  96.     const date = new Date()
  97.  
  98.     const args = message.content.slice(config.prefix.length).trim().split(/ +/g)
  99.     const command = args.shift().toLowerCase();
  100.  
  101.  
  102.     if (command === "ping") {
  103.         const date = new Date()
  104.         console.log(`[${moment(date).format('DD-MM-Y hh:mm: A')}][${message.guild.name}] User ${message.author.tag} Ran command Ping`)
  105.  
  106.         const m = await message.channel.send("Ping?")
  107.  
  108.         const embed = {
  109.             "embed": {
  110.                 "color": 0xd05333,
  111.                 "title": `:ping_pong:`,
  112.                 'fields': [
  113.                     {
  114.                         'name': 'Latency:',
  115.                         'value': `${m.createdTimestamp - message.createdTimestamp}ms.`,
  116.                     },
  117.                     {
  118.                         'name': 'API Latency:',
  119.                         'value': `${Math.round(client.ping)}ms`,
  120.                     },
  121.  
  122.                 ],
  123.                 footer: {
  124.                     'text': "Member ID: " + message.id + "  |  " + moment(message.createdAt).format('DD-MM-Y hh:mm:ss A')
  125.                 }
  126.             }
  127.         }
  128.         m.edit(embed)
  129.     }
  130.     if (command === 'servers') {
  131.         const date = new Date()
  132.         console.log(`[${moment(date).format('DD-MM-Y hh:mm: A')}][${message.guild.name}] User ${message.author.tag} Ran command ${command}`)
  133.  
  134.         if (config.hasOwnProperty("ownerID")) {
  135.             if (message.author.id !== config.ownerID) {
  136.                 await message.channel.send(`Who is this man. ${message.author} ?`);
  137.                 return;
  138.             }
  139.         }
  140.  
  141.  
  142.         var msg = ''
  143.         client.guilds.array().forEach(server => {
  144.             msg += '[ ' + (client.guilds.array().indexOf(server) + 1)+ ' ] ' + server.name + '\n'
  145.         })
  146.         await message.channel.send(msg)
  147.             .catch(console.error);
  148.         await message.channel.send("Enter the number for the server you would like to leave.")
  149.  
  150.         // Collector to get the response, parse the number
  151.         // If the number isn't indexed in the list, respond saying That server isn't on the list
  152.         // If it is on the list, use guild.leave()
  153.  
  154.         var guild;
  155.         var index;
  156.         var confirmation = false;
  157.  
  158.         const collector = new Discord.MessageCollector(message.channel, m => m.author.id === message.author.id, { maxMatches: 1, time: 5000 })
  159.  
  160.         let resp;
  161.         collector.on('collect', async response => {
  162.             resp = true;
  163.             index = parseInt(response.content);
  164.             if (isNaN(index)) {
  165.                 await message.channel.send("this is not a number.");
  166.                 return;
  167.             }
  168.  
  169.  
  170.             guild = client.guilds.array()[index - 1];
  171.  
  172.             if (guild) {
  173.                 await message.channel.send(`Is this the server you wanted to leave? ${guild.name}`);
  174.                 const collector2 = new Discord.MessageCollector(message.channel, m => m.author.id === message.author.id, { maxMatches: 1, time: 5000 })
  175.                 let resp;
  176.                 collector2.on('collect', async response => {
  177.                     resp = true;
  178.                     if (response.content.toLowerCase().trim() == 'yes') {
  179.                         await guild.leave();
  180.                         await message.channel.send("I have left the server")
  181.                     }
  182.                     else if (response.content.toLowerCase().trim() == 'no') {
  183.                         var msg = await message.channel.send("No U");
  184.                         setTimeout(function () {
  185.                             msg.delete()
  186.                         }, 2000);
  187.                         await message.channel.send("I have not left the server :)")
  188.                     }
  189.                 });
  190.  
  191.                 collector2.on("end", async _collected => {
  192.                     if (!resp) {
  193.                         await message.channel.send("time has run out");
  194.                     };
  195.                 });
  196.                
  197.             }
  198.             else
  199.                 await message.channel.send("Guild not found!");
  200.         });
  201.  
  202.         collector.on("end", async _collected => {
  203.             if (!resp) {
  204.                 await message.channel.send("time has run out");
  205.             };
  206.         });
  207.     }
  208.  
  209.     if (command === 'setlog') {
  210.         const date = new Date()
  211.         console.log(`[${moment(date).format('DD-MM-Y hh:mm: A')}][${message.guild.name}] User ${message.author.tag} Ran command ${command}`)
  212.  
  213.         if (!fromGuild(message)) return;
  214.  
  215.         if (args[0] == null) {
  216.             await message.channel.send("No channel defined. Please enter a channel name or id.\n" +
  217.                 `*\`Syntax : ${prefix}setlog [channel]\`*`);
  218.             return;
  219.         }
  220.  
  221.        
  222.  
  223.         checks = message.member.hasPermission("ADMINISTRATOR") || message.author.id == config.ownerID;
  224.         if (!checks) {
  225.             await message.channel.send("You do not meet the permission requirements to use this command.");
  226.             return;
  227.         }
  228.  
  229.  
  230.         const guild = message.guild;
  231.  
  232.         let foundChannel = null;
  233.         channel_id = (args[0].startsWith("<#")) ? args[0].slice(2) : args[0];
  234.         channel_id = (channel_id.endsWith(">")) ? channel_id.slice(0, channel_id.length - 1) : channel_id;
  235.         if (isNaN(parseInt(channel_id))) {
  236.             input = channel_id.toLowerCase().trim();
  237.             guild.channels.array().forEach(function (channel) {
  238.                 if (channel.name == input) {
  239.                     foundChannel = channel;
  240.                 }
  241.             });
  242.        
  243.         }
  244.         else {
  245.             // Assuming they entered channel ID
  246.             channel_id = (args[0].startsWith("<#")) ? args[0].slice(2) : args[0];
  247.             channel_id = (channel_id.endsWith(">")) ? channel_id.slice(0, channel_id.length - 1) : channel_id;
  248.             var channel = getChannel(guild, channel_id);
  249.             if (channel != null) foundChannel = channel;
  250.             else console.log(`Failed to parse channel_id ${args[1]}`)
  251.         }
  252.  
  253.         if (foundChannel) {
  254.             await message.channel.send(`Setting logging channel to ${foundChannel}`);
  255.             setGuildSetting(guild, "loggingChannel", foundChannel.id);
  256.         }
  257.         else
  258.             await message.channel.send("Channel not found.");
  259.     }
  260.  
  261.     if (command === 'stats') {
  262.         const date = new Date()
  263.         console.log(`[${moment(date).format('DD-MM-Y hh:mm: A')}][${message.guild.name}] User ${message.author.tag}s Ran command ${command}`)
  264.  
  265.         if (!fromGuild(message)) return;
  266.  
  267.         const guild = message.guild;
  268.         var verificationLevel;
  269.  
  270.         switch (guild.verificationLevel) {
  271.             case 4:
  272.                 verificationLevel = "Very High";
  273.                 break;
  274.             case 3:
  275.                 verificationLevel = "High";
  276.                 break;
  277.             case 2:
  278.                 verificationLevel = "Medium";
  279.                 break;
  280.             case 1:
  281.                 verificationLevel = "Low";
  282.                 break;
  283.             case 0:
  284.             default:
  285.                 verificationLevel = "None";
  286.                 break;
  287.         }
  288.  
  289.         const embed = new Discord.RichEmbed()
  290.             .setColor(0x19bf0a)
  291.             .setTitle("Server Stats Page 1")
  292.             .addField("Server Name", `${guild.name}`, true)
  293.             .addField("Member Count", `${guild.memberCount} Members`, true)
  294.             .setFooter(`Member ID: ${message.id} | ${moment(message.createdAt).format("DD-MM-Y hh:mm:ss A")}`);
  295.  
  296.         const embed2 = new Discord.RichEmbed()
  297.             .setColor(0x19bf0a)
  298.             .setTitle("Server Stats Page 2")
  299.             .addField("Server Created On", `${moment(guild.createdAt).format('DD-MM-Y hh:mm:ss A')}`, false)
  300.             .addField("Verification Level", verificationLevel, true)
  301.             .addField("Number of Channels", getGuildTextChannels(guild).length, true)
  302.             .setFooter(`Member ID: ${message.id} | ${moment(message.createdAt).format("DD-MM-Y hh:mm:ss A")}`);
  303.  
  304.         const embed3 = new Discord.RichEmbed()
  305.             .setColor(0x19bf0a)
  306.             .setTitle("Server Stats Page 3")
  307.             .addField("Server Owner", `${guild.owner}`, false)
  308.             .addField("Server Default Role", `${guild.defaultRole}`, false)
  309.             .addField("Server verified", `${guild.verified}`, false)
  310.             .addField("Server Afk timeout", `${guild.afkTimeout}s`, false)
  311.             .setFooter(`Member ID: ${message.id} | ${moment(message.createdAt).format("DD-MM-Y hh:mm:ss A")}`);
  312.  
  313.         showPage = async function (page) {
  314.             switch (page) {
  315.                 default:
  316.                 case 1:
  317.                     msg.edit(embed);
  318.                     break;
  319.                 case 2:
  320.                     msg.edit(embed2);
  321.                     break;
  322.                 case 3:
  323.                     msg.edit(embed3);
  324.                     break;
  325.  
  326.             }
  327.  
  328.             //if (!request_response == null) await request_response.delete();
  329.             //request_response = await message.channel.send("Enter the page number to change to.");
  330.         };
  331.  
  332.         // Initialize by showing first page.
  333.         let msg = await message.channel.send(embed);
  334.  
  335.         // Get response to view another page
  336.         var request_response = await message.channel.send("Enter the page number to change to.");
  337.         const collector = new Discord.MessageCollector(message.channel, m => m.author.id === message.author.id, {time: 5000 });
  338.  
  339.         var resp;
  340.         collector.on('collect', async response => {
  341.             if (request_response != null) {
  342.                 await request_response.delete()
  343.          //           .then(msg => console.log("Deleted request response message"))
  344.                     .catch(console.error);;
  345.          //       console.log("Deleted Request Response");
  346.             }
  347.             resp = true;
  348.             index = parseInt(response.content);
  349.             if (isNaN(index)) {
  350.                 await message.channel.send("This does not seem to be a valid page number. Interactive paging cancelled.");
  351.                 return;
  352.             }
  353.             await response.delete()
  354.          //       .then(msg => console.log("Deleted response"))
  355.                 .catch(console.error);
  356.  
  357.             showPage(index);
  358.             request_response = await message.channel.send("Enter the page number to change to.");
  359.  
  360.         });
  361.  
  362.         collector.on("end", async _collected => {
  363.          //   console.log("Response: " + resp);
  364.             if (resp == null || !resp) {
  365.                 await message.channel.send("Time has run out. Interactive paging cancelled.");
  366.             }
  367.             if (request_response != null) {
  368.                 await request_response.delete()
  369.              //       .then(msg => console.log("Deleted Request Response"))
  370.                     .catch(console.error);
  371.             }
  372.         });
  373.     }
  374.  
  375.     if (command === 'help') {
  376.         const date = new Date()
  377.         console.log(`[${moment(date).format('DD-MM-Y hh:mm: A')}][${message.guild.name}] User ${message.author.tag} Ran command ${command}`)
  378.  
  379.         const embed = new Discord.RichEmbed()
  380.             .setColor(0x19bf0a)
  381.             .setTitle("Command Help")
  382.             .addField("+help ", "Bring you to this page", false)
  383.             .addField("+ping ", "Pings server and API latancy", false)
  384.             .addField("+setlog ", "Sets the logging channel for your guild", false)
  385.             .addField("+stats ", "Interactive stats page for the guild", false)
  386.             .addField("+invite ", "Creates a invite link for a guild", false)
  387.             .addField("More commands to come! ", "We are working on more commands", false);
  388.  
  389.         await message.author.send(embed);
  390.     }
  391.  
  392.     if (command === 'invite') {
  393.         const date = new Date()
  394.         console.log(`[${moment(date).format('DD-MM-Y hh:mm: A')}][${message.guild.name}] User ${message.author.tag} Ran command ${command}`)
  395.  
  396.         if (!fromGuild(message)) return;
  397.         await message.channel.send(`We are working on this command just for you ${message.author.username}`)
  398.         return;
  399.     }
  400. })
  401.  
  402. md = function (msg) {
  403.     return "```md\n" + msg + "```";
  404. };
  405.  
  406.  
  407. getChannel = function (guild, channel_id) {
  408.     let foundChannel = null;
  409.     guild.channels.array().forEach(function (channel) {
  410.         if (channel.id == channel_id) {
  411.             foundChannel = channel;
  412.         }
  413.     });
  414.     return foundChannel;
  415. };
  416.  
  417. getGuildTextChannels = function (guild) {
  418.     var textChannels = [];
  419.  
  420.     guild.channels.array().forEach(function (channel) {
  421.         if (channel.type === "text")
  422.             textChannels.push(channel);
  423.     });
  424.     return textChannels;
  425. };
  426.  
  427.  
  428. guildLog = function (guild, type, arg1, arg2) {
  429.     const guildSettings = (settings.hasOwnProperty(guild.id)) ? settings[guild.id] : null;
  430.     const logChannel = (guildSettings.hasOwnProperty('loggingChannel')) ? getChannel(guild, guildSettings['loggingChannel']) : null;
  431.     if (logChannel == null) {
  432.         console.log(`Failed to get logging channel for guild (${guild.name}).`);
  433.         return;
  434.     }
  435.  
  436.     if (type == "messageDelete") {
  437.         message = arg1;
  438.  
  439.         const date = new Date()
  440.         console.log(`[${moment(date).format('DD-MM-Y hh:mm: A')}][${message.guild.name}] User ${message.author.tag}s message has been deleted`)
  441.  
  442.         let msgContent = '';
  443.  
  444.         if (message.content.length > 0) {
  445.             msgContent += message.content;
  446.         }
  447.  
  448.         if (message.attachments.array().length > 0) {
  449.             msgContent = msgContent + '\n' + message.attachments.array()[0].proxyURL;
  450.         }
  451.  
  452.         const embed = {
  453.             "embed": {
  454.                 "color": 0xd05333,
  455.                 "title": `message removed`,
  456.                 'fields': [
  457.                     {
  458.                         'name': 'member:',
  459.                         'value': `${message.author}`,
  460.                         'inline': true
  461.                     },
  462.                     {
  463.                         'name': 'channel:',
  464.                         'value': `${message.channel}`,
  465.                         'inline': true
  466.                     },
  467.                     {
  468.                         'name': 'message:',
  469.                         'value': `${msgContent}`
  470.                     },
  471.  
  472.                 ],
  473.                 footer: {
  474.                     'text': "member id: " + message.id + "  |  " + moment(message.createdat).format('dd-mm-y hh:mm:ss a')
  475.                 }
  476.             }
  477.         };
  478.         logChannel.send(embed);
  479.  
  480.         client.on("error", (e) => {
  481.             console.error(e);
  482.         });
  483.  
  484.         client.on("warn", (e) => {
  485.             console.warn(e);
  486.         });
  487.     }
  488.  
  489.     if (type == "guildMemberAdd") {
  490.         join = arg1;
  491.  
  492.         const date = new Date();
  493.         console.log(`[${moment(date).format('DD-MM-Y hh:mm: A')}][${join.guild.name}] User ${join.user.tag} has joined the server.`);
  494.  
  495.         const embed = {
  496.             "embed": {
  497.                 "color": 0x19bf0a,
  498.                 'fields': [
  499.                     {
  500.                         'name': 'Member Joined',
  501.                         'value': `${join.user}`
  502.                     }
  503.                 ],
  504.                 footer: {
  505.                     'text': `${moment(date).format('DD-MM-Y hh:mm:ss A')}`
  506.                 }
  507.             }
  508.         };
  509.         logChannel.send(embed);
  510.     };
  511.  
  512.     if (type == "guildMemberRemove") {
  513.         leave = arg1;
  514.  
  515.         const date = new Date();
  516.         console.log(`[${moment(date).format('DD-MM-Y hh:mm: A')}][${leave.guild.name}] User ${leave.user.tag} has left the server.`);
  517.  
  518.         const embed = {
  519.             "embed": {
  520.                 "color": 0xd05333,
  521.                 'fields': [
  522.                     {
  523.                         'name': 'Member Left',
  524.                         'value': `${leave.user}`
  525.                     }
  526.                 ],
  527.                 footer: {
  528.                     'text': `${moment(date).format('DD-MM-Y hh:mm:ss A')}`
  529.                 }
  530.             }
  531.         }
  532.         logChannel.send(embed);
  533.     }
  534.  
  535.     if (type == "messageUpdate") {
  536.         eold = arg1;
  537.         enew = arg2;
  538.  
  539.         const date = new Date()
  540.         console.log(`[${moment(date).format('DD-MM-Y hh:mm: A')}][${eold.guild.name}] User ${eold.author.tag} has uptaded their message.`);
  541.  
  542.         const embed = {
  543.             "embed": {
  544.                 "color": 0x1674ae,
  545.                 "title": `Message Changed`,
  546.                 'fields': [
  547.                     {
  548.                         'name': 'Member',
  549.                         'value': `${enew.author}`,
  550.                         'inline': true
  551.                     },
  552.                     {
  553.                         'name': 'Channel',
  554.                         'value': `${enew.channel}`,
  555.                         'inline': true
  556.                     },
  557.                     {
  558.                         'name': 'Old Message',
  559.                         'value': `${eold.content}`
  560.                     },
  561.                     {
  562.                         'name': 'New Message',
  563.                         'value': `${enew.content}`
  564.                     }
  565.                 ],
  566.                 footer: {
  567.                     'text': `${moment(date).format('DD-MM-Y hh:mm:ss A')}`
  568.                 }
  569.             }
  570.         };
  571.         logChannel.send(embed);
  572.     }
  573.  
  574.     if (type == "guildMemberUpdate") {
  575.         nous = arg1;
  576.         nnus = arg2;
  577.  
  578.         const oldNick = nous.nickname || nous.user.username;
  579.         const newNick = nnus.nickname || nnus.user.username;
  580.         if (oldNick === newNick) return;
  581.         const date = new Date();
  582.         console.log(`[${moment(date).format('DD-MM-Y hh:mm A')}][${nnus.guild.name}] User ${nnus.user.tag} has changed their nickname.`);
  583.  
  584.         const embed = {
  585.             "embed": {
  586.                 "color": 0x1674ae,
  587.                 "title": `Name Changed`,
  588.                 'fields': [
  589.                     {
  590.                         'name': 'Old Name',
  591.                         'value': `${oldNick}`,
  592.                         'inline': true
  593.                     },
  594.                     {
  595.                         'name': 'New Name',
  596.                         'value': `${newNick}`,
  597.                         'inline': true
  598.                     },
  599.                 ],
  600.                 footer: {
  601.                     'text': `${moment(date).format('DD-MM-Y hh:mm:ss A')}`
  602.                 }
  603.             }
  604.         };
  605.         logChannel.send(embed);
  606.     }
  607. };
  608.  
  609.  
  610.  
  611. client.on('messageDelete', message => {
  612.     if (message.author.bot) return;
  613.  
  614.     guildLog(message.guild, "messageDelete", message);
  615. })
  616.  
  617. client.on('guildMemberAdd', join => {
  618.     if (join.user.bot) return;
  619.  
  620.     guildLog(join.guild, "guildMemberAdd", join);
  621. })
  622.  
  623. client.on('guildMemberRemove', leave => {
  624.     if (leave.user.bot) return;
  625.  
  626.     guildLog(leave.guild, "guildMemberRemove", leave);
  627. })
  628.  
  629. client.on('messageUpdate', (eold, enew) => {
  630.     if (eold.author.bot) return;
  631.  
  632.     guildLog(eold.guild, "messageUpdate", eold, enew);
  633. })
  634.  
  635. client.on('guildMemberUpdate', (nous, nnus) => {
  636.     if (nous.user.bot) return;
  637.  
  638.     guildLog(nous.guild, "guildMemberUpdate", nous, nnus);
  639. })
  640. client.login(config.token)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement