├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md └── dependabot.yml ├── .gitignore ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── commands ├── info │ ├── help-normal.js │ ├── help.js │ └── ping.js └── other │ ├── avatar.js │ ├── serverinfo.js │ └── userinfo.js ├── config ├── config.json └── embed.json ├── events ├── interactionCreate.js ├── messageCreate.js └── ready.js ├── handler └── command.js ├── index.js ├── package-lock.json ├── package.json ├── setup.bat ├── slashCommands └── info │ ├── help.js │ └── ping.js ├── start.bat └── utils └── function.js /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | patreon: Blazer 2 | github: Wumpuspro 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: weekly 7 | time: "04:00" 8 | open-pull-requests-limit: 10 9 | target-branch: develop 10 | reviewers: 11 | - Wumpus/Npg 12 | ignore: 13 | - dependency-name: ascii-table 14 | versions: 15 | - 0.0.9 16 | 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.agdai 2 | MAlonzo/** 3 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "javascript.validate.enable": false, 3 | "deno.enable": false, 4 | "editor.codeActionsOnSave": { 5 | "source.fixAll.eslint": true 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Wumpus 1942 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # discord.js-v13-with-slash-command 2 | 3 | `npm install` - install all required dependancies 4 | 5 | `node index.js` - start the project 6 | -------------------------------------------------------------------------------- /commands/info/help-normal.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed } = require('discord.js'); 2 | const { readdirSync } = require("fs"); 3 | const prefix = require("../../config/config.json").prefix; 4 | 5 | module.exports = { 6 | name: 'help-normal', 7 | aliases: ['h'], 8 | categories : 'info', 9 | description: 'Show All Commands', 10 | usage: '', 11 | /** 12 | * @param {Client} client 13 | * @param {Message} message 14 | * @param {String[]} args 15 | */ 16 | run: async(client, message, args) => { 17 | 18 | const roleColor = 19 | message.guild.me.displayHexColor === "#000000" 20 | ? "#ffffff" 21 | : message.guild.me.displayHexColor; 22 | 23 | if (!args[0]) { 24 | let categories = []; 25 | 26 | readdirSync("./commands/").forEach((dir) => { 27 | const commands = readdirSync(`./commands/${dir}/`).filter((file) => 28 | file.endsWith(".js") 29 | ); 30 | 31 | const cmds = commands.map((command) => { 32 | let file = require(`../../commands/${dir}/${command}`); 33 | 34 | if (!file.name) return "No command name."; 35 | 36 | let name = file.name.replace(".js", ""); 37 | 38 | return `\`${name}\``; 39 | }); 40 | 41 | let data = new Object(); 42 | 43 | data = { 44 | name: dir.toUpperCase(), 45 | value: cmds.length === 0 ? "In progress." : cmds.join(" "), 46 | }; 47 | 48 | categories.push(data); 49 | }); 50 | 51 | const embed = new MessageEmbed() 52 | .setTitle("📬 Need help? Here are all of my commands:") 53 | .addFields(categories) 54 | .setDescription( 55 | `Use \`${prefix}help\` followed by a command name to get more additional information on a command. For example: \`${prefix}help ban\`.` 56 | ) 57 | .setFooter( 58 | `Requested by ${message.author.tag}`, 59 | message.author.displayAvatarURL({ dynamic: true }) 60 | ) 61 | .setTimestamp() 62 | .setColor(roleColor); 63 | return message.channel.send({embeds : [embed]}) 64 | } else { 65 | const command = 66 | client.commands.get(args[0].toLowerCase()) || 67 | client.commands.find( 68 | (c) => c.aliases && c.aliases.includes(args[0].toLowerCase()) 69 | ); 70 | 71 | if (!command) { 72 | const embed = new MessageEmbed() 73 | .setTitle(`Invalid command! Use \`${prefix}help\` for all of my commands!`) 74 | .setColor("FF0000"); 75 | return message.channel.send({embeds : [embed]}); 76 | } 77 | 78 | const embed = new MessageEmbed() 79 | .setTitle("Command Details:") 80 | .addField("PREFIX:", `\`${prefix}\``) 81 | .addField( 82 | "COMMAND:", 83 | command.name ? `\`${command.name}\`` : "No name for this command." 84 | ) 85 | .addField( 86 | "ALIASES:", 87 | command.aliases 88 | ? `\`${command.aliases.join("` `")}\`` 89 | : "No aliases for this command." 90 | ) 91 | .addField( 92 | "USAGE:", 93 | command.usage 94 | ? `\`${prefix}${command.name} ${command.usage}\`` 95 | : `\`${prefix}${command.name}\`` 96 | ) 97 | .addField( 98 | "DESCRIPTION:", 99 | command.description 100 | ? command.description 101 | : "No description for this command." 102 | ) 103 | .setFooter( 104 | `Requested by ${message.author.tag}`, 105 | message.author.displayAvatarURL({ dynamic: true }) 106 | ) 107 | .setTimestamp() 108 | .setColor(roleColor); 109 | return message.channel.send({embeds : [embed]}); 110 | } 111 | 112 | } 113 | } -------------------------------------------------------------------------------- /commands/info/help.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, Message, Client } = require("discord.js"); 2 | const { readdirSync } = require("fs"); 3 | let color = "#36393f"; 4 | const prefix = require("../../config/config.json").prefix; 5 | 6 | module.exports = { 7 | name: "help", 8 | aliases: ["hb"], 9 | emoji: "🚑", 10 | description: "Shows all available bot commands, In button form.", 11 | /** 12 | * 13 | * @param {Client} client 14 | * @param {Message} message 15 | * @param {String} args 16 | * @returns 17 | */ 18 | run: async (client, message, args) => { 19 | if (!args[0]) { 20 | let categories = []; 21 | 22 | let ignored = ["owner"]; 23 | 24 | const emo = { 25 | info: "❓", 26 | other : "🔰" 27 | 28 | }; 29 | 30 | readdirSync("./commands/").forEach((dir) => { 31 | if (ignored.includes(dir.toLowerCase())) return; 32 | const name = `${emo[dir.toLowerCase()]} ${dir.toUpperCase()}`; 33 | let cats = new Object(); 34 | 35 | cats = { 36 | name: name, 37 | value: `\`${prefix}help ${dir.toLowerCase()}\``, 38 | inline: true, 39 | }; 40 | 41 | categories.push(cats); 42 | }); 43 | 44 | const embed = new MessageEmbed() 45 | .setTitle(`\`\`🔰 Help Menu \`\``) 46 | .setDescription(`\`\`❗ My Prefix is :- ${prefix} \`\`\n \`\`\` Discord.js v13 Handler Coded By NPG \`\`\` \n To check out a category, use command !help [category] For more information go to the next page by reacting! \n\n [🔴 Invite Me Now](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=8&scope=bot%20applications.commands)`) 47 | .addFields(categories) 48 | .setFooter( 49 | `Requested by ${message.author.tag}`, 50 | message.author.displayAvatarURL({ 51 | dynamic: true, 52 | }) 53 | ) 54 | .setTimestamp() 55 | .setThumbnail( 56 | client.user.displayAvatarURL({ 57 | dynamic: true, 58 | }) 59 | ) 60 | .setColor(color); 61 | 62 | return message.channel.send({ embeds: [embed] }); 63 | } else { 64 | let cots = []; 65 | let catts = []; 66 | 67 | readdirSync("./commands/").forEach((dir) => { 68 | if (dir.toLowerCase() !== args[0].toLowerCase()) return; 69 | const commands = readdirSync(`./commands/${dir}/`).filter((file) => 70 | file.endsWith(".js") 71 | ); 72 | 73 | const cmds = commands.map((command) => { 74 | let file = require(`../../commands/${dir}/${command}`); 75 | 76 | if (!file.name) return "No command name."; 77 | 78 | let name = file.name.replace(".js", ""); 79 | 80 | let des = `${client.commands.get(name).description}`; 81 | let emo = `✅`; 82 | 83 | let obj = { 84 | cname: `${emo} \`${name}\``, 85 | des, 86 | }; 87 | 88 | return obj; 89 | }); 90 | 91 | let dota = new Object(); 92 | 93 | cmds.map((co) => { 94 | dota = { 95 | name: `${cmds.length === 0 ? "In progress." : co.cname}`, 96 | value: co.des ? co.des : "No Description", 97 | inline: true, 98 | }; 99 | catts.push(dota); 100 | }); 101 | 102 | cots.push(dir.toLowerCase()); 103 | }); 104 | 105 | // console.log(cots); 106 | 107 | const command = 108 | client.commands.get(args[0].toLowerCase()) || 109 | client.commands.find( 110 | (c) => c.aliases && c.aliases.includes(args[0].toLowerCase()) 111 | ); 112 | 113 | if (cots.includes(args[0].toLowerCase())) { 114 | const combed = new MessageEmbed() 115 | .setTitle( 116 | `__${ 117 | args[0].charAt(0).toUpperCase() + args[0].slice(1) 118 | } Commands!__` 119 | ) 120 | .setDescription( 121 | `Use \`${prefix}help\` followed by a command name to get more information on a command.\nFor example: \`${prefix}help ping\`.\n\n` 122 | ) 123 | .addFields(catts) 124 | .setColor(color); 125 | 126 | return message.channel.send({ embeds: [combed] }); 127 | } 128 | 129 | if (!command) { 130 | const embed = new MessageEmbed() 131 | .setTitle( 132 | `Invalid command! Use \`${prefix}help\` for all of my commands!` 133 | ) 134 | .setColor("RED"); 135 | return message.channel.send({ embeds: [embed] }); 136 | } 137 | 138 | const embed = new MessageEmbed() 139 | .setTitle("Command Details:") 140 | .addField( 141 | "Command:", 142 | command.name ? `\`${command.name}\`` : "No name for this command." 143 | ) 144 | .addField( 145 | "Aliases:", 146 | command.aliases 147 | ? `\`${command.aliases.join("` `")}\`` 148 | : "No aliases for this command." 149 | ) 150 | .addField( 151 | "Usage:", 152 | command.usage 153 | ? `\`${prefix}${command.name} ${command.usage}\`` 154 | : `\`${prefix}${command.name}\`` 155 | ) 156 | .addField( 157 | "Command Description:", 158 | command.description 159 | ? command.description 160 | : "No description for this command." 161 | ) 162 | .setFooter( 163 | `Requested by ${message.author.tag}`, 164 | message.author.displayAvatarURL({ 165 | dynamic: true, 166 | }) 167 | ) 168 | .setTimestamp() 169 | .setColor(color); 170 | return message.channel.send({ embeds: [embed] }); 171 | } 172 | }, 173 | }; 174 | -------------------------------------------------------------------------------- /commands/info/ping.js: -------------------------------------------------------------------------------- 1 | 2 | const { Client, Message, MessageEmbed } = require('discord.js'); 3 | 4 | module.exports = { 5 | name: 'ping', 6 | aliases: ['pi'], 7 | categories : 'info', 8 | permissions : ' ', 9 | description: 'Show Bot Ping', 10 | cooldown : 10000, 11 | usage: '', 12 | /** 13 | * @param {Client} client 14 | * @param {Message} message 15 | * @param {String[]} args 16 | */ 17 | run: async(client, message, args) => { 18 | try { 19 | let ping = new MessageEmbed() 20 | .setDescription(`🏓 Ping : ${client.ws.ping}`) 21 | 22 | message.channel.send({embeds : [ping]}) 23 | } catch (e) { 24 | console.log(e); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /commands/other/avatar.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed } = require("discord.js"); 2 | var ee = require('../../config/embed.json'); 3 | var config = require('../../config/config.json'); 4 | 5 | module.exports = { 6 | name: "avatar", 7 | aliases: ["av"], 8 | categories: "other", 9 | permissions: " ", 10 | description: "Show Your Avatar", 11 | usage: "", 12 | /** 13 | * @param {Client} client 14 | * @param {Message} message 15 | * @param {String[]} args 16 | */ 17 | run: async (client, message, args) => { 18 | let user = message.author || message.mentions.users.first(); 19 | let avs = new MessageEmbed() 20 | .setAuthor( 21 | `Avatar from: ${user.tag}`, 22 | user.displayAvatarURL({ dynamic: true }), 23 | "https://discord.gg/UA6sSqKXpZ" 24 | ) 25 | .setColor(ee.color) 26 | .addField( 27 | "❱ PNG", 28 | `[\`LINK\`](${user.displayAvatarURL({ format: "png" })})`, 29 | true 30 | ) 31 | .addField( 32 | "❱ JPEG", 33 | `[\`LINK\`](${user.displayAvatarURL({ format: "jpg" })})`, 34 | true 35 | ) 36 | .addField( 37 | "❱ WEBP", 38 | `[\`LINK\`](${user.displayAvatarURL({ format: "webp" })})`, 39 | true 40 | ) 41 | .setURL( 42 | user.displayAvatarURL({ 43 | dynamic: true, 44 | }) 45 | ) 46 | .setFooter(ee.footertext, ee.footericon) 47 | .setImage( 48 | user.displayAvatarURL({ 49 | dynamic: true, 50 | size: 512, 51 | }) 52 | ); 53 | 54 | message.channel.send({embeds : [avs]}) 55 | }, 56 | }; 57 | -------------------------------------------------------------------------------- /commands/other/serverinfo.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed } = require("discord.js"); 2 | var ee = require("../../config/embed.json"); 3 | var config = require("../../config/config.json"); 4 | const moment = require("moment") 5 | 6 | module.exports = { 7 | name: "serverinfo", 8 | aliases: ["srv"], 9 | categories: "other", 10 | permissions: " ", 11 | description: "Show All Info Of Server", 12 | usage: "", 13 | /** 14 | * @param {Client} client 15 | * @param {Message} message 16 | * @param {String[]} args 17 | */ 18 | run: async (client, message, args) => { 19 | function trimArray(arr, maxLen = 25) { 20 | if (arr.array().length > maxLen) { 21 | const len = arr.array().length - maxLen; 22 | arr = arr 23 | .array() 24 | .sort((a, b) => b.rawPosition - a.rawPosition) 25 | .slice(0, maxLen); 26 | arr.map((role) => `<@&${role.id}>`); 27 | arr.push(`${len} more...`); 28 | } 29 | return arr.join(", "); 30 | } 31 | await message.guild.members.fetch(); 32 | function emojitrimarray(arr, maxLen = 20) { 33 | if (arr.length > maxLen) { 34 | const len = arr.length - maxLen; 35 | arr = arr.slice(0, maxLen); 36 | arr.push(`${len} more...`); 37 | } 38 | return arr.join(", "); 39 | } 40 | let boosts = message.guild.premiumSubscriptionCount; 41 | var boostlevel = 0; 42 | if (boosts >= 2) boostlevel = "1"; 43 | if (boosts >= 15) boostlevel = "2"; 44 | if (boosts >= 30) boostlevel = "3 / ∞"; 45 | let maxbitrate = 96000; 46 | if (boosts >= 2) maxbitrate = 128000; 47 | if (boosts >= 15) maxbitrate = 256000; 48 | if (boosts >= 30) maxbitrate = 384000; 49 | 50 | let srv = new MessageEmbed() 51 | .setAuthor( 52 | "Server Information About: " + message.guild.name, 53 | message.guild.iconURL({ 54 | dynamic: true, 55 | }) 56 | ) 57 | .setColor(ee.color) 58 | .addField( 59 | "❱ Owner", 60 | `,<@${(await message.guild.fetchOwner()).id}>\n\`${message.guild.name}\``, 61 | true 62 | ) 63 | .addField( 64 | "❱ Created On", 65 | "`" + 66 | moment(message.guild.createdTimestamp).format("DD/MM/YYYY") + 67 | "`\n" + 68 | "`" + 69 | moment(message.guild.createdTimestamp).format("hh:mm:ss") + 70 | "`", 71 | true 72 | ) 73 | .addField( 74 | "❱ You Joined", 75 | "`" + 76 | moment(message.member.joinedTimestamp).format("DD/MM/YYYY") + 77 | "`\n" + 78 | "`" + 79 | moment(message.member.joinedTimestamp).format("hh:mm:ss") + 80 | "`", 81 | true 82 | ) 83 | 84 | .addField( 85 | "❱ All Channels", 86 | "👁‍🗨 `" + message.guild.channels.cache.size + "`", 87 | true 88 | ) 89 | .addField( 90 | "❱ Text Channels", 91 | "💬 `" + 92 | message.guild.channels.cache.filter( 93 | (channel) => channel.type == "text" 94 | ).size + 95 | "`", 96 | true 97 | ) 98 | .addField( 99 | "❱ Voice Channels", 100 | "🔈 `" + 101 | message.guild.channels.cache.filter( 102 | (channel) => channel.type == "voice" 103 | ).size + 104 | "`", 105 | true 106 | ) 107 | 108 | .addField( 109 | "❱ Total USERS", 110 | "😀 `" + message.guild.memberCount + "`", 111 | true 112 | ) 113 | .addField( 114 | "❱ Total HUMANS", 115 | "👤 `" + 116 | message.guild.members.cache.filter((member) => !member.user.bot) 117 | .size + 118 | "`", 119 | true 120 | ) 121 | .addField( 122 | "❱ Total BOTS", 123 | "🤖 `" + 124 | message.guild.members.cache.filter((member) => member.user.bot) 125 | .size + 126 | "`", 127 | true 128 | ) 129 | 130 | .addField( 131 | "❱ Total Boosts", 132 | "`" + message.guild.premiumSubscriptionCount + "`", 133 | true 134 | ) 135 | .addField("❱ Boost-Level", "`" + boostlevel + "`", true) 136 | .addField("❱ Max-Talk-Bitrate", "👾 `" + maxbitrate + " kbps`", true) 137 | 138 | .addField( 139 | `❱ [${message.guild.emojis.cache.size}] Emojis: `, 140 | "> " + message.guild.emojis.cache.size < 20 141 | ? message.guild.emojis.cache.map((emoji) => `${emoji}`).join(", ") 142 | : message.guild.emojis.cache.size > 20 143 | ? emojitrimarray( 144 | message.guild.emojis.cache.map((emoji) => `${emoji}`) 145 | ).substr(0, 1024) 146 | : "No Emojis" 147 | ) 148 | .addField( 149 | `❱ [${message.guild.roles.cache.size}] Roles: `, 150 | "> " + message.guild.roles.cache.size < 25 151 | ? message.guild.roles.cache 152 | .array() 153 | .sort((a, b) => b.rawPosition - a.rawPosition) 154 | .map((role) => `<@&${role.id}>`) 155 | .join(", ") 156 | : message.guild.roles.cache.size > 25 157 | ? trimArray(message.guild.roles.cache) 158 | : "None" 159 | ) 160 | .setThumbnail( 161 | message.guild.iconURL({ 162 | dynamic: true, 163 | }) 164 | ) 165 | .setFooter( 166 | "ID: " + message.guild.id, 167 | message.guild.iconURL({ 168 | dynamic: true, 169 | }) 170 | ) 171 | message.channel.send({embeds : [srv]}); 172 | 173 | }, 174 | }; 175 | -------------------------------------------------------------------------------- /commands/other/userinfo.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed } = require("discord.js"); 2 | var ee = require("../../config/embed.json"); 3 | var config = require("../../config/config.json"); 4 | const moment = require("moment") 5 | 6 | const flags = { 7 | DISCORD_EMPLOYEE: 'Discord Employee', 8 | DISCORD_PARTNER: 'Discord Partner', 9 | BUGHUNTER_LEVEL_1: 'Bug Hunter (Level 1)', 10 | BUGHUNTER_LEVEL_2: 'Bug Hunter (Level 2)', 11 | HYPESQUAD_EVENTS: 'HypeSquad Events', 12 | HOUSE_BRAVERY: 'House of Bravery', 13 | HOUSE_BRILLIANCE: 'House of Brilliance', 14 | HOUSE_BALANCE: 'House of Balance', 15 | EARLY_SUPPORTER: 'Early Supporter', 16 | TEAM_USER: 'Team User', 17 | SYSTEM: 'System', 18 | VERIFIED_BOT: 'Verified Bot', 19 | VERIFIED_DEVELOPER: 'Verified Bot Developer' 20 | }; 21 | function trimArray(arr, maxLen = 25) { 22 | if (arr.array().length > maxLen) { 23 | const len = arr.array().length - maxLen; 24 | arr = arr.array().sort((a, b) => b.rawPosition - a.rawPosition).slice(0, maxLen); 25 | arr.map(role => `<@&${role.id}>`) 26 | arr.push(`${len} more...`); 27 | } 28 | return arr.join(", "); 29 | } 30 | const statuses = { 31 | "online" : "🟢", 32 | "idle" : "🟠", 33 | "dnd" : "🔴", 34 | "offline" : "⚫️", 35 | } 36 | 37 | 38 | module.exports = { 39 | name: "userinfo", 40 | aliases: ["ui"], 41 | categories: "other", 42 | permissions: " ", 43 | description: "Show All Info Of User", 44 | usage: "", 45 | /** 46 | * @param {Client} client 47 | * @param {Message} message 48 | * @param {String[]} args 49 | */ 50 | run: async (client, message, args) => { 51 | user = message.author; 52 | 53 | if(!user || user == null || user.id == null || !user.id) return message.reply({content : "<:no:867068050499305482> Could not find the USER"}) 54 | 55 | const member = message.guild.members.cache.get(user.id); 56 | const roles = member.roles; 57 | const userFlags = member.user.flags.toArray(); 58 | //create the EMBED 59 | const embeduserinfo = new MessageEmbed() 60 | embeduserinfo.setThumbnail(member.user.displayAvatarURL({ dynamic: true, size: 512 })) 61 | embeduserinfo.setAuthor("Information about: " + member.user.username + "#" + member.user.discriminator, member.user.displayAvatarURL({ dynamic: true }), "https://discord.gg/UA6sSqKXpZ") 62 | embeduserinfo.addField('**❱ Username:**',`<@${member.user.id}>\n\`${member.user.tag}\``,true) 63 | embeduserinfo.addField('**❱ ID:**',`\`${member.id}\``,true) 64 | embeduserinfo.addField('**❱ Avatar:**',`[\`Link to avatar\`](${member.user.displayAvatarURL({ format: "png" })})`,true) 65 | embeduserinfo.addField('**❱ Date Join DC:**', "\`"+moment(member.user.createdTimestamp).format("DD/MM/YYYY") + "\`\n" + "`"+ moment(member.user.createdTimestamp).format("hh:mm:ss") + "\`",true) 66 | embeduserinfo.addField('**❱ Date Join Guild:**', "\`"+moment(member.joinedTimestamp).format("DD/MM/YYYY") + "\`\n" + "`"+ moment(member.joinedTimestamp).format("hh:mm:ss")+ "\`",true) 67 | embeduserinfo.addField('**❱ Flags:**',`\`${userFlags.length ? userFlags.map(flag => flags[flag]).join(', ') : 'None'}\``,true) 68 | embeduserinfo.addField('**❱ Highest Role:**',`${member.roles.highest.id === message.guild.id ? 'None' : member.roles.highest}`,true) 69 | embeduserinfo.addField('**❱ Is a Bot:**',`\`${member.user.bot ? "✔️" : "❌"}\``,true) 70 | embeduserinfo.addField('**❱ Permissions:**',`${message.member.permissions.toArray().map(p=>`\`${p}\``).join(", ")}`) 71 | embeduserinfo.addField(`❱ [${roles.cache.size}] Roles: `, roles.cache.size < 25 ? roles.cache.array().sort((a, b) => b.rawPosition - a.rawPosition).map(role => `<@&${role.id}>`).join(', ') : roles.cache.size > 25 ? trimArray(roles.cache) : 'None') 72 | embeduserinfo.setColor(ee.color) 73 | embeduserinfo.setFooter(ee.footertext, ee.footericon) 74 | 75 | message.channel.send({embeds : [embeduserinfo]}) 76 | }, 77 | }; 78 | -------------------------------------------------------------------------------- /config/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "Bot_Token", 3 | "prefix": "Bot_Prefix" 4 | } 5 | -------------------------------------------------------------------------------- /config/embed.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "#3498db", 3 | "wrongcolor": "#e01e01", 4 | "footertext": "Invite tracker", 5 | "footericon": "https://img.icons8.com/color/452/discord-logo.png" 6 | } -------------------------------------------------------------------------------- /events/interactionCreate.js: -------------------------------------------------------------------------------- 1 | const client = require(".."); 2 | 3 | 4 | client.on("interactionCreate", async (interaction) => { 5 | // Slash Command Handling 6 | if (interaction.isCommand()) { 7 | await interaction.deferReply({ ephemeral: false }).catch(() => {}); 8 | 9 | const cmd = client.slashCommands.get(interaction.commandName); 10 | if (!cmd) 11 | return interaction.followUp({ content: "An error has occured " }); 12 | 13 | const args = []; 14 | 15 | for (let option of interaction.options.data) { 16 | if (option.type === "SUB_COMMAND") { 17 | if (option.name) args.push(option.name); 18 | option.options?.forEach((x) => { 19 | if (x.value) args.push(x.value); 20 | }); 21 | } else if (option.value) args.push(option.value); 22 | } 23 | interaction.member = interaction.guild.members.cache.get(interaction.user.id); 24 | 25 | cmd.run(client, interaction, args); 26 | } 27 | });  28 | -------------------------------------------------------------------------------- /events/messageCreate.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, Collection } = require("discord.js"); 2 | var config = require("../config/config.json"); 3 | var ee = require("../config/config.json"); 4 | const client = require(".."); 5 | const prefix = config.prefix; 6 | 7 | client.on("messageCreate", async (message) => { 8 | const { escapeRegex, onCoolDown } = require("../utils/function"); 9 | if (!message.guild) return; 10 | if (message.author.bot) return; 11 | if (message.channel.partial) await message.channel.fetch(); 12 | if (message.partial) await message.fetch(); 13 | const prefixRegex = new RegExp( 14 | `^(<@!?${client.user.id}>|${escapeRegex(config.prefix)})\\s*` 15 | ); 16 | if (!prefixRegex.test(message.content)) return; 17 | const [, matchedPrefix] = message.content.match(prefixRegex); 18 | const args = message.content.slice(matchedPrefix.length).trim().split(/ +/); 19 | const cmd = args.shift().toLowerCase(); 20 | // getting mention prefix 21 | if (cmd.length === 0) { 22 | if (matchedPrefix.includes(client.user.id)) { 23 | message.reply( 24 | `<@${message.author.id}>To see all Commands type: \`${config.prefix}help\`` 25 | ); 26 | } 27 | } 28 | const command = client.commands.get(cmd.toLowerCase()); 29 | if (!command) return; 30 | if (command) { 31 | let perms = new MessageEmbed().setDescription( 32 | `You don't Have ${command.permissions} To Run Command..` 33 | ); 34 | if (!message.member.permissions.has(command.permissions || [])) 35 | return message.channel.send({ embeds: [perms] }); 36 | 37 | 38 | //Check if user is on cooldown with the cmd, with Tomato#6966's Function from /handlers/functions.js 39 | if (onCoolDown(message, command)) { 40 | let cool = new MessageEmbed() 41 | .setDescription(`❌ Please wait ${onCoolDown(message, command)} more Second(s) before reusing the ${command.name} command.`) 42 | return message.channel.send({embeds : [cool]}) 43 | } 44 | await command.run(client, message, args, prefix); 45 | } 46 | 47 | // new start from here 48 | }); 49 | -------------------------------------------------------------------------------- /events/ready.js: -------------------------------------------------------------------------------- 1 | const client = require("../index"); 2 | 3 | client.on("ready", () => { 4 | console.log(`${client.user.tag} is Online!`.bgRed) 5 | client.user.setActivity(`With You`) 6 | }); 7 | -------------------------------------------------------------------------------- /handler/command.js: -------------------------------------------------------------------------------- 1 | const { Client } = require("discord.js"); 2 | const { glob } = require("glob"); 3 | const { promisify } = require("util"); 4 | const globPromise = promisify(glob); 5 | const { readdirSync } = require("fs"); 6 | const ascii = require("ascii-table"); 7 | let table = new ascii("Commands"); 8 | table.setHeading("Command", "Load status"); 9 | 10 | /** 11 | * @param {Client} client 12 | */ 13 | 14 | module.exports = async (client) => { 15 | try { 16 | readdirSync("./commands/").forEach((dir) => { 17 | const commands = readdirSync(`./commands/${dir}/`).filter((file) => 18 | file.endsWith(".js") 19 | ); 20 | for (let file of commands) { 21 | let pull = require(`../commands/${dir}/${file}`); 22 | if (pull.name) { 23 | client.commands.set(pull.name, pull); 24 | table.addRow(file, "Ready"); 25 | } else { 26 | table.addRow( 27 | file, 28 | `error -> missing a help.name, or help.name is not a string.` 29 | ); 30 | continue; 31 | } 32 | if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach((alias) => client.aliases.set(alias, pull.name)); 33 | } 34 | }); 35 | console.log(table.toString().cyan); 36 | } catch (e) { 37 | console.log(String(e.stack).bgRed); 38 | } 39 | 40 | // events start 41 | readdirSync("./events/").forEach((file) => { 42 | const events = readdirSync("./events/").filter((file) => 43 | file.endsWith(".js") 44 | ); 45 | for (let file of events) { 46 | let pull = require(`../events/${file}`); 47 | if (pull.name) { 48 | client.events.set(pull.name, pull); 49 | } 50 | } 51 | console.log((`${file} Events Loaded Successfullly`)); 52 | }); 53 | 54 | // slashcommands start 55 | const slashCommands = await globPromise( 56 | `${process.cwd()}/SlashCommands/*/*.js` 57 | ); 58 | 59 | const arrayOfSlashCommands = []; 60 | slashCommands.map((value) => { 61 | const file = require(value); 62 | if (!file?.name) return; 63 | client.slashCommands.set(file.name, file); 64 | arrayOfSlashCommands.push(file); 65 | }); 66 | client.on("ready", async () => { 67 | client.guilds.cache.forEach(async (g) => { 68 | await client.guilds.cache.get(g.id).commands.set(arrayOfSlashCommands); 69 | }); 70 | 71 | 72 | }); 73 | 74 | };  75 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed, Collection } = require("discord.js"); 2 | const colors = require("colors"); 3 | const fs = require("fs"); 4 | const client = new Client({ 5 | messageCacheLifetime: 60, 6 | fetchAllMembers: false, 7 | messageCacheMaxSize: 10, 8 | restTimeOffset: 0, 9 | restWsBridgetimeout: 100, 10 | shards: "auto", 11 | allowedMentions: { 12 | parse: ["roles", "users", "everyone"], 13 | repliedUser: true, 14 | }, 15 | partials: ["MESSAGE", "CHANNEL", "REACTION"], 16 | intents: 32767, 17 | }); 18 | module.exports = client; 19 | 20 | const config = require("./config/config.json"); 21 | 22 | const ee = require("./config/embed.json"); 23 | const prefix = config.prefix; 24 | const token = config.token; 25 | // Global Variables 26 | client.commands = new Collection(); 27 | client.aliases = new Collection(); 28 | client.events = new Collection(); 29 | client.cooldowns = new Collection(); 30 | client.slashCommands = new Collection(); 31 | client.categories = fs.readdirSync("./commands/"); 32 | 33 | // Initializing the project 34 | //Loading files, with the client variable like Command Handler, Event Handler, ... 35 | ["command"].forEach((handler) => { 36 | require(`./handler/${handler}`)(client); 37 | }); 38 | 39 | client.login(token);  40 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "djsv13", 3 | "version": "3.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@discordjs/builders": { 8 | "version": "0.1.1", 9 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.1.1.tgz", 10 | "integrity": "sha512-9eBC22bX2HBsob5ixMwZ6quy/vewU5GHuSJhpmSZ3cDGg8XPnrYdzbwI54U+V9kQBTa7M+aMu1lYVqMEPojj8A==", 11 | "requires": { 12 | "discord-api-types": "^0.18.1", 13 | "tslib": "^2.3.0" 14 | }, 15 | "dependencies": { 16 | "discord-api-types": { 17 | "version": "0.18.1", 18 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.18.1.tgz", 19 | "integrity": "sha512-hNC38R9ZF4uaujaZQtQfm5CdQO58uhdkoHQAVvMfIL0LgOSZeW575W8H6upngQOuoxWd8tiRII3LLJm9zuQKYg==" 20 | } 21 | } 22 | }, 23 | "@discordjs/collection": { 24 | "version": "0.1.6", 25 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", 26 | "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" 27 | }, 28 | "@discordjs/form-data": { 29 | "version": "3.0.1", 30 | "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", 31 | "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", 32 | "requires": { 33 | "asynckit": "^0.4.0", 34 | "combined-stream": "^1.0.8", 35 | "mime-types": "^2.1.12" 36 | } 37 | }, 38 | "@sapphire/async-queue": { 39 | "version": "1.1.4", 40 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.4.tgz", 41 | "integrity": "sha512-fFrlF/uWpGOX5djw5Mu2Hnnrunao75WGey0sP0J3jnhmrJ5TAPzHYOmytD5iN/+pMxS+f+u/gezqHa9tPhRHEA==" 42 | }, 43 | "@tootallnate/once": { 44 | "version": "1.1.2", 45 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", 46 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" 47 | }, 48 | "@types/bson": { 49 | "version": "4.0.4", 50 | "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.4.tgz", 51 | "integrity": "sha512-awqorHvQS0DqxkHQ/FxcPX9E+H7Du51Qw/2F+5TBMSaE3G0hm+8D3eXJ6MAzFw75nE8V7xF0QvzUSdxIjJb/GA==", 52 | "requires": { 53 | "@types/node": "*" 54 | } 55 | }, 56 | "@types/mongodb": { 57 | "version": "3.6.20", 58 | "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", 59 | "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", 60 | "requires": { 61 | "@types/bson": "*", 62 | "@types/node": "*" 63 | } 64 | }, 65 | "@types/node": { 66 | "version": "16.0.1", 67 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.1.tgz", 68 | "integrity": "sha512-hBOx4SUlEPKwRi6PrXuTGw1z6lz0fjsibcWCM378YxsSu/6+C30L6CR49zIBKHiwNWCYIcOLjg4OHKZaFeLAug==" 69 | }, 70 | "@types/ws": { 71 | "version": "7.4.6", 72 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.6.tgz", 73 | "integrity": "sha512-ijZ1vzRawI7QoWnTNL8KpHixd2b2XVb9I9HAqI3triPsh1EC0xH0Eg6w2O3TKbDCgiNNlJqfrof6j4T2I+l9vw==", 74 | "requires": { 75 | "@types/node": "*" 76 | } 77 | }, 78 | "abab": { 79 | "version": "2.0.5", 80 | "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", 81 | "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" 82 | }, 83 | "abort-controller": { 84 | "version": "3.0.0", 85 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 86 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 87 | "requires": { 88 | "event-target-shim": "^5.0.0" 89 | } 90 | }, 91 | "acorn": { 92 | "version": "8.4.1", 93 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", 94 | "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" 95 | }, 96 | "acorn-globals": { 97 | "version": "6.0.0", 98 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", 99 | "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", 100 | "requires": { 101 | "acorn": "^7.1.1", 102 | "acorn-walk": "^7.1.1" 103 | }, 104 | "dependencies": { 105 | "acorn": { 106 | "version": "7.4.1", 107 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 108 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" 109 | } 110 | } 111 | }, 112 | "acorn-walk": { 113 | "version": "7.2.0", 114 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 115 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" 116 | }, 117 | "agent-base": { 118 | "version": "6.0.2", 119 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 120 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 121 | "requires": { 122 | "debug": "4" 123 | }, 124 | "dependencies": { 125 | "debug": { 126 | "version": "4.3.2", 127 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 128 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 129 | "requires": { 130 | "ms": "2.1.2" 131 | } 132 | } 133 | } 134 | }, 135 | "ascii-table": { 136 | "version": "0.0.9", 137 | "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", 138 | "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=" 139 | }, 140 | "asynckit": { 141 | "version": "0.4.0", 142 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 143 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 144 | }, 145 | "balanced-match": { 146 | "version": "1.0.2", 147 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 148 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 149 | }, 150 | "bl": { 151 | "version": "2.2.1", 152 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", 153 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", 154 | "requires": { 155 | "readable-stream": "^2.3.5", 156 | "safe-buffer": "^5.1.1" 157 | } 158 | }, 159 | "bluebird": { 160 | "version": "3.5.1", 161 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 162 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 163 | }, 164 | "brace-expansion": { 165 | "version": "1.1.11", 166 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 167 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 168 | "requires": { 169 | "balanced-match": "^1.0.0", 170 | "concat-map": "0.0.1" 171 | } 172 | }, 173 | "browser-process-hrtime": { 174 | "version": "1.0.0", 175 | "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", 176 | "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" 177 | }, 178 | "bson": { 179 | "version": "1.1.6", 180 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", 181 | "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" 182 | }, 183 | "colors": { 184 | "version": "1.4.0", 185 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 186 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" 187 | }, 188 | "combined-stream": { 189 | "version": "1.0.8", 190 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 191 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 192 | "requires": { 193 | "delayed-stream": "~1.0.0" 194 | } 195 | }, 196 | "concat-map": { 197 | "version": "0.0.1", 198 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 199 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 200 | }, 201 | "core-util-is": { 202 | "version": "1.0.2", 203 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 204 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 205 | }, 206 | "cssom": { 207 | "version": "0.4.4", 208 | "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", 209 | "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" 210 | }, 211 | "cssstyle": { 212 | "version": "2.3.0", 213 | "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", 214 | "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", 215 | "requires": { 216 | "cssom": "~0.3.6" 217 | }, 218 | "dependencies": { 219 | "cssom": { 220 | "version": "0.3.8", 221 | "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", 222 | "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" 223 | } 224 | } 225 | }, 226 | "data-urls": { 227 | "version": "2.0.0", 228 | "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", 229 | "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", 230 | "requires": { 231 | "abab": "^2.0.3", 232 | "whatwg-mimetype": "^2.3.0", 233 | "whatwg-url": "^8.0.0" 234 | } 235 | }, 236 | "debug": { 237 | "version": "3.1.0", 238 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 239 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 240 | "requires": { 241 | "ms": "2.0.0" 242 | }, 243 | "dependencies": { 244 | "ms": { 245 | "version": "2.0.0", 246 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 247 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 248 | } 249 | } 250 | }, 251 | "decimal.js": { 252 | "version": "10.3.1", 253 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", 254 | "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" 255 | }, 256 | "deep-is": { 257 | "version": "0.1.3", 258 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 259 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" 260 | }, 261 | "delayed-stream": { 262 | "version": "1.0.0", 263 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 264 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 265 | }, 266 | "denque": { 267 | "version": "1.5.0", 268 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", 269 | "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" 270 | }, 271 | "discord-api-types": { 272 | "version": "0.19.0", 273 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.19.0.tgz", 274 | "integrity": "sha512-t2HKLd43Lbe+rf+ffYfKVv9Kk5f6p7sFqvO6CMV55ZB0PgZv8WigCkt9FoJciYo5S3Q6CGYK+WnE/ZG+6vkBDQ==" 275 | }, 276 | "discord.js": { 277 | "version": "13.0.0-dev.4886ae2.1627085022", 278 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.0.0-dev.4886ae2.1627085022.tgz", 279 | "integrity": "sha512-io2ecUFRK41YbfN+zlxmbfL8y5wsJOqvjXjCCb68VmiIQHPjKmOxnQkWnlT6JrkFkPbBdiDX93VKvnie1JLpoA==", 280 | "requires": { 281 | "@discordjs/builders": "^0.2.0", 282 | "@discordjs/collection": "^0.1.6", 283 | "@discordjs/form-data": "^3.0.1", 284 | "@sapphire/async-queue": "^1.1.4", 285 | "@types/ws": "^7.4.5", 286 | "abort-controller": "^3.0.0", 287 | "discord-api-types": "^0.19.0", 288 | "node-fetch": "^2.6.1", 289 | "ws": "^7.5.1" 290 | }, 291 | "dependencies": { 292 | "@discordjs/builders": { 293 | "version": "0.2.0", 294 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.2.0.tgz", 295 | "integrity": "sha512-TVq7NZBCJrrTRc3CfxOr3IdgY5nrtqVxZ7qDUF1mN6LgxIiOldmFxsSwMrQBzLFVmOwqFyNLKCeblley8UpEuw==", 296 | "requires": { 297 | "discord-api-types": "^0.18.1", 298 | "tslib": "^2.3.0" 299 | }, 300 | "dependencies": { 301 | "discord-api-types": { 302 | "version": "0.18.1", 303 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.18.1.tgz", 304 | "integrity": "sha512-hNC38R9ZF4uaujaZQtQfm5CdQO58uhdkoHQAVvMfIL0LgOSZeW575W8H6upngQOuoxWd8tiRII3LLJm9zuQKYg==" 305 | } 306 | } 307 | }, 308 | "discord-api-types": { 309 | "version": "0.19.0", 310 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.19.0.tgz", 311 | "integrity": "sha512-t2HKLd43Lbe+rf+ffYfKVv9Kk5f6p7sFqvO6CMV55ZB0PgZv8WigCkt9FoJciYo5S3Q6CGYK+WnE/ZG+6vkBDQ==" 312 | } 313 | } 314 | }, 315 | "domexception": { 316 | "version": "2.0.1", 317 | "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", 318 | "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", 319 | "requires": { 320 | "webidl-conversions": "^5.0.0" 321 | }, 322 | "dependencies": { 323 | "webidl-conversions": { 324 | "version": "5.0.0", 325 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", 326 | "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" 327 | } 328 | } 329 | }, 330 | "escodegen": { 331 | "version": "2.0.0", 332 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", 333 | "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", 334 | "requires": { 335 | "esprima": "^4.0.1", 336 | "estraverse": "^5.2.0", 337 | "esutils": "^2.0.2", 338 | "optionator": "^0.8.1", 339 | "source-map": "~0.6.1" 340 | } 341 | }, 342 | "esprima": { 343 | "version": "4.0.1", 344 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 345 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 346 | }, 347 | "estraverse": { 348 | "version": "5.2.0", 349 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 350 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" 351 | }, 352 | "esutils": { 353 | "version": "2.0.3", 354 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 355 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 356 | }, 357 | "event-target-shim": { 358 | "version": "5.0.1", 359 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 360 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 361 | }, 362 | "fast-levenshtein": { 363 | "version": "2.0.6", 364 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 365 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" 366 | }, 367 | "form-data": { 368 | "version": "3.0.1", 369 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 370 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 371 | "requires": { 372 | "asynckit": "^0.4.0", 373 | "combined-stream": "^1.0.8", 374 | "mime-types": "^2.1.12" 375 | } 376 | }, 377 | "fs.realpath": { 378 | "version": "1.0.0", 379 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 380 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 381 | }, 382 | "glob": { 383 | "version": "7.1.7", 384 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 385 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 386 | "requires": { 387 | "fs.realpath": "^1.0.0", 388 | "inflight": "^1.0.4", 389 | "inherits": "2", 390 | "minimatch": "^3.0.4", 391 | "once": "^1.3.0", 392 | "path-is-absolute": "^1.0.0" 393 | } 394 | }, 395 | "html-encoding-sniffer": { 396 | "version": "2.0.1", 397 | "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", 398 | "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", 399 | "requires": { 400 | "whatwg-encoding": "^1.0.5" 401 | } 402 | }, 403 | "http-proxy-agent": { 404 | "version": "4.0.1", 405 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", 406 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", 407 | "requires": { 408 | "@tootallnate/once": "1", 409 | "agent-base": "6", 410 | "debug": "4" 411 | }, 412 | "dependencies": { 413 | "debug": { 414 | "version": "4.3.2", 415 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 416 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 417 | "requires": { 418 | "ms": "2.1.2" 419 | } 420 | } 421 | } 422 | }, 423 | "https-proxy-agent": { 424 | "version": "5.0.0", 425 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 426 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 427 | "requires": { 428 | "agent-base": "6", 429 | "debug": "4" 430 | }, 431 | "dependencies": { 432 | "debug": { 433 | "version": "4.3.2", 434 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 435 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 436 | "requires": { 437 | "ms": "2.1.2" 438 | } 439 | } 440 | } 441 | }, 442 | "iconv-lite": { 443 | "version": "0.4.24", 444 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 445 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 446 | "requires": { 447 | "safer-buffer": ">= 2.1.2 < 3" 448 | } 449 | }, 450 | "inflight": { 451 | "version": "1.0.6", 452 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 453 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 454 | "requires": { 455 | "once": "^1.3.0", 456 | "wrappy": "1" 457 | } 458 | }, 459 | "inherits": { 460 | "version": "2.0.4", 461 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 462 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 463 | }, 464 | "is-potential-custom-element-name": { 465 | "version": "1.0.1", 466 | "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", 467 | "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" 468 | }, 469 | "isarray": { 470 | "version": "1.0.0", 471 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 472 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 473 | }, 474 | "jsdom": { 475 | "version": "16.6.0", 476 | "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", 477 | "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", 478 | "requires": { 479 | "abab": "^2.0.5", 480 | "acorn": "^8.2.4", 481 | "acorn-globals": "^6.0.0", 482 | "cssom": "^0.4.4", 483 | "cssstyle": "^2.3.0", 484 | "data-urls": "^2.0.0", 485 | "decimal.js": "^10.2.1", 486 | "domexception": "^2.0.1", 487 | "escodegen": "^2.0.0", 488 | "form-data": "^3.0.0", 489 | "html-encoding-sniffer": "^2.0.1", 490 | "http-proxy-agent": "^4.0.1", 491 | "https-proxy-agent": "^5.0.0", 492 | "is-potential-custom-element-name": "^1.0.1", 493 | "nwsapi": "^2.2.0", 494 | "parse5": "6.0.1", 495 | "saxes": "^5.0.1", 496 | "symbol-tree": "^3.2.4", 497 | "tough-cookie": "^4.0.0", 498 | "w3c-hr-time": "^1.0.2", 499 | "w3c-xmlserializer": "^2.0.0", 500 | "webidl-conversions": "^6.1.0", 501 | "whatwg-encoding": "^1.0.5", 502 | "whatwg-mimetype": "^2.3.0", 503 | "whatwg-url": "^8.5.0", 504 | "ws": "^7.4.5", 505 | "xml-name-validator": "^3.0.0" 506 | } 507 | }, 508 | "kareem": { 509 | "version": "2.3.2", 510 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", 511 | "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" 512 | }, 513 | "levn": { 514 | "version": "0.3.0", 515 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 516 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 517 | "requires": { 518 | "prelude-ls": "~1.1.2", 519 | "type-check": "~0.3.2" 520 | } 521 | }, 522 | "lodash": { 523 | "version": "4.17.21", 524 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 525 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 526 | }, 527 | "memory-pager": { 528 | "version": "1.5.0", 529 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 530 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 531 | "optional": true 532 | }, 533 | "mime-db": { 534 | "version": "1.48.0", 535 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", 536 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" 537 | }, 538 | "mime-types": { 539 | "version": "2.1.31", 540 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", 541 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", 542 | "requires": { 543 | "mime-db": "1.48.0" 544 | } 545 | }, 546 | "minimatch": { 547 | "version": "3.0.4", 548 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 549 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 550 | "requires": { 551 | "brace-expansion": "^1.1.7" 552 | } 553 | }, 554 | "moment": { 555 | "version": "2.29.1", 556 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", 557 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" 558 | }, 559 | "mongodb": { 560 | "version": "3.6.10", 561 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.10.tgz", 562 | "integrity": "sha512-fvIBQBF7KwCJnDZUnFFy4WqEFP8ibdXeFANnylW19+vOwdjOAvqIzPdsNCEMT6VKTHnYu4K64AWRih0mkFms6Q==", 563 | "requires": { 564 | "bl": "^2.2.1", 565 | "bson": "^1.1.4", 566 | "denque": "^1.4.1", 567 | "optional-require": "^1.0.3", 568 | "safe-buffer": "^5.1.2", 569 | "saslprep": "^1.0.0" 570 | } 571 | }, 572 | "mongoose": { 573 | "version": "5.13.3", 574 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.3.tgz", 575 | "integrity": "sha512-q+zX6kqHAvwxf5speMWhq6qF4vdj+x6/kfD5RSKdZKNm52yGmaUygN+zgrtQjBZPFEzG0B3vF6GP0PoAGadE+w==", 576 | "requires": { 577 | "@types/mongodb": "^3.5.27", 578 | "@types/node": "14.x || 15.x", 579 | "bson": "^1.1.4", 580 | "kareem": "2.3.2", 581 | "mongodb": "3.6.10", 582 | "mongoose-legacy-pluralize": "1.0.2", 583 | "mpath": "0.8.3", 584 | "mquery": "3.2.5", 585 | "ms": "2.1.2", 586 | "regexp-clone": "1.0.0", 587 | "safe-buffer": "5.2.1", 588 | "sift": "13.5.2", 589 | "sliced": "1.0.1" 590 | }, 591 | "dependencies": { 592 | "@types/node": { 593 | "version": "15.14.2", 594 | "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.2.tgz", 595 | "integrity": "sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw==" 596 | } 597 | } 598 | }, 599 | "mongoose-legacy-pluralize": { 600 | "version": "1.0.2", 601 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 602 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" 603 | }, 604 | "mpath": { 605 | "version": "0.8.3", 606 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", 607 | "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" 608 | }, 609 | "mquery": { 610 | "version": "3.2.5", 611 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", 612 | "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", 613 | "requires": { 614 | "bluebird": "3.5.1", 615 | "debug": "3.1.0", 616 | "regexp-clone": "^1.0.0", 617 | "safe-buffer": "5.1.2", 618 | "sliced": "1.0.1" 619 | }, 620 | "dependencies": { 621 | "safe-buffer": { 622 | "version": "5.1.2", 623 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 624 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 625 | } 626 | } 627 | }, 628 | "ms": { 629 | "version": "2.1.2", 630 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 631 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 632 | }, 633 | "node-fetch": { 634 | "version": "2.6.1", 635 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 636 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 637 | }, 638 | "nwsapi": { 639 | "version": "2.2.0", 640 | "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", 641 | "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" 642 | }, 643 | "once": { 644 | "version": "1.4.0", 645 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 646 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 647 | "requires": { 648 | "wrappy": "1" 649 | } 650 | }, 651 | "optional-require": { 652 | "version": "1.1.0", 653 | "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.0.tgz", 654 | "integrity": "sha512-5/7ee3eTFg1P+F9usTubuNCLfWRK6DjV0EFHLlbp7MmV5UlWqpWIVSnH6xo4u+fc5WHXaJuvJi6iuYnfDyj6oQ==", 655 | "requires": { 656 | "require-at": "^1.0.6" 657 | } 658 | }, 659 | "optionator": { 660 | "version": "0.8.3", 661 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 662 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 663 | "requires": { 664 | "deep-is": "~0.1.3", 665 | "fast-levenshtein": "~2.0.6", 666 | "levn": "~0.3.0", 667 | "prelude-ls": "~1.1.2", 668 | "type-check": "~0.3.2", 669 | "word-wrap": "~1.2.3" 670 | } 671 | }, 672 | "parse5": { 673 | "version": "6.0.1", 674 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", 675 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" 676 | }, 677 | "path-is-absolute": { 678 | "version": "1.0.1", 679 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 680 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 681 | }, 682 | "prelude-ls": { 683 | "version": "1.1.2", 684 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 685 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" 686 | }, 687 | "process-nextick-args": { 688 | "version": "2.0.1", 689 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 690 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 691 | }, 692 | "psl": { 693 | "version": "1.8.0", 694 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 695 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 696 | }, 697 | "punycode": { 698 | "version": "2.1.1", 699 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 700 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 701 | }, 702 | "readable-stream": { 703 | "version": "2.3.7", 704 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 705 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 706 | "requires": { 707 | "core-util-is": "~1.0.0", 708 | "inherits": "~2.0.3", 709 | "isarray": "~1.0.0", 710 | "process-nextick-args": "~2.0.0", 711 | "safe-buffer": "~5.1.1", 712 | "string_decoder": "~1.1.1", 713 | "util-deprecate": "~1.0.1" 714 | }, 715 | "dependencies": { 716 | "safe-buffer": { 717 | "version": "5.1.2", 718 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 719 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 720 | } 721 | } 722 | }, 723 | "reconlx": { 724 | "version": "1.3.51", 725 | "resolved": "https://registry.npmjs.org/reconlx/-/reconlx-1.3.51.tgz", 726 | "integrity": "sha512-Qft+2w2TRLwmZYAmR3tWT572WHoTTXEsxPZWJPdNMthFKaszR6u4lLQkRlhQgRMKhzkwomBPEWsOK1H9aQa1qA==", 727 | "requires": { 728 | "discord.js": "^13.0.0-dev.98c6078.1626221017", 729 | "jsdom": "^16.4.0", 730 | "mongoose": "^5.10.15", 731 | "ms": "^2.1.2" 732 | }, 733 | "dependencies": { 734 | "discord.js": { 735 | "version": "13.0.0-dev.fe6cc0c.1625227356", 736 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.0.0-dev.fe6cc0c.1625227356.tgz", 737 | "integrity": "sha512-m9oY7nlAX6RhZYxTzg9s5JHGdkm6Fk+XKCHj2qeD7pG+GOmFV9mrqVBt5xZq4NZME81BmPASLhn0q6us4uDfJA==", 738 | "requires": { 739 | "@discordjs/builders": "^0.1.1", 740 | "@discordjs/collection": "^0.1.6", 741 | "@discordjs/form-data": "^3.0.1", 742 | "@sapphire/async-queue": "^1.1.4", 743 | "@types/ws": "^7.4.5", 744 | "abort-controller": "^3.0.0", 745 | "discord-api-types": "^0.19.0-next.f393ba520d7d6d2aacaca7b3ca5d355fab614f6e", 746 | "node-fetch": "^2.6.1", 747 | "ws": "^7.5.1" 748 | } 749 | } 750 | } 751 | }, 752 | "regexp-clone": { 753 | "version": "1.0.0", 754 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", 755 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" 756 | }, 757 | "require-at": { 758 | "version": "1.0.6", 759 | "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", 760 | "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==" 761 | }, 762 | "safe-buffer": { 763 | "version": "5.2.1", 764 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 765 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 766 | }, 767 | "safer-buffer": { 768 | "version": "2.1.2", 769 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 770 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 771 | }, 772 | "saslprep": { 773 | "version": "1.0.3", 774 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 775 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 776 | "optional": true, 777 | "requires": { 778 | "sparse-bitfield": "^3.0.3" 779 | } 780 | }, 781 | "saxes": { 782 | "version": "5.0.1", 783 | "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", 784 | "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", 785 | "requires": { 786 | "xmlchars": "^2.2.0" 787 | } 788 | }, 789 | "sift": { 790 | "version": "13.5.2", 791 | "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", 792 | "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" 793 | }, 794 | "sliced": { 795 | "version": "1.0.1", 796 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 797 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 798 | }, 799 | "source-map": { 800 | "version": "0.6.1", 801 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 802 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 803 | "optional": true 804 | }, 805 | "sparse-bitfield": { 806 | "version": "3.0.3", 807 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 808 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 809 | "optional": true, 810 | "requires": { 811 | "memory-pager": "^1.0.2" 812 | } 813 | }, 814 | "string_decoder": { 815 | "version": "1.1.1", 816 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 817 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 818 | "requires": { 819 | "safe-buffer": "~5.1.0" 820 | }, 821 | "dependencies": { 822 | "safe-buffer": { 823 | "version": "5.1.2", 824 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 825 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 826 | } 827 | } 828 | }, 829 | "symbol-tree": { 830 | "version": "3.2.4", 831 | "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", 832 | "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" 833 | }, 834 | "tough-cookie": { 835 | "version": "4.0.0", 836 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", 837 | "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", 838 | "requires": { 839 | "psl": "^1.1.33", 840 | "punycode": "^2.1.1", 841 | "universalify": "^0.1.2" 842 | } 843 | }, 844 | "tr46": { 845 | "version": "2.1.0", 846 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", 847 | "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", 848 | "requires": { 849 | "punycode": "^2.1.1" 850 | } 851 | }, 852 | "tslib": { 853 | "version": "2.3.0", 854 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", 855 | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" 856 | }, 857 | "type-check": { 858 | "version": "0.3.2", 859 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 860 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 861 | "requires": { 862 | "prelude-ls": "~1.1.2" 863 | } 864 | }, 865 | "universalify": { 866 | "version": "0.1.2", 867 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 868 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 869 | }, 870 | "util-deprecate": { 871 | "version": "1.0.2", 872 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 873 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 874 | }, 875 | "w3c-hr-time": { 876 | "version": "1.0.2", 877 | "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", 878 | "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", 879 | "requires": { 880 | "browser-process-hrtime": "^1.0.0" 881 | } 882 | }, 883 | "w3c-xmlserializer": { 884 | "version": "2.0.0", 885 | "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", 886 | "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", 887 | "requires": { 888 | "xml-name-validator": "^3.0.0" 889 | } 890 | }, 891 | "webidl-conversions": { 892 | "version": "6.1.0", 893 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", 894 | "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" 895 | }, 896 | "whatwg-encoding": { 897 | "version": "1.0.5", 898 | "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", 899 | "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", 900 | "requires": { 901 | "iconv-lite": "0.4.24" 902 | } 903 | }, 904 | "whatwg-mimetype": { 905 | "version": "2.3.0", 906 | "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", 907 | "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" 908 | }, 909 | "whatwg-url": { 910 | "version": "8.7.0", 911 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", 912 | "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", 913 | "requires": { 914 | "lodash": "^4.7.0", 915 | "tr46": "^2.1.0", 916 | "webidl-conversions": "^6.1.0" 917 | } 918 | }, 919 | "word-wrap": { 920 | "version": "1.2.3", 921 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 922 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" 923 | }, 924 | "wrappy": { 925 | "version": "1.0.2", 926 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 927 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 928 | }, 929 | "ws": { 930 | "version": "7.5.2", 931 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", 932 | "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==" 933 | }, 934 | "xml-name-validator": { 935 | "version": "3.0.0", 936 | "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", 937 | "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" 938 | }, 939 | "xmlchars": { 940 | "version": "2.2.0", 941 | "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", 942 | "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" 943 | } 944 | } 945 | } 946 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "djsv13", 3 | "version": "3.0.0", 4 | "description": "A Advance Discord.js Handler", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "ascii-table": "0.0.9", 14 | "colors": "^1.4.0", 15 | "discord.js": "^13.0.0-dev.4886ae2.1627085022", 16 | "glob": "^7.1.7", 17 | "moment": "^2.29.1", 18 | "mongoose": "^5.13.3", 19 | "reconlx": "^1.3.51" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /setup.bat: -------------------------------------------------------------------------------- 1 | npm install 2 | -------------------------------------------------------------------------------- /slashCommands/info/help.js: -------------------------------------------------------------------------------- 1 | const { Client, CommandInteraction, MessageEmbed } = require("discord.js"); 2 | const { readdirSync } = require("fs"); 3 | const prefix = require("../../config/config.json").prefix; 4 | 5 | module.exports = { 6 | name: "help", 7 | aliases: [""], 8 | categories: "info", 9 | permissions: " ", 10 | description: "Show All Commands", 11 | usage: "", 12 | /** 13 | * @param {Client} client 14 | * @param {CommandInteraction} interaction 15 | * @param {String[]} args 16 | */ 17 | run: async (client, interaction, args) => { 18 | const roleColor = 19 | interaction.guild.me.displayHexColor === "#000000" 20 | ? "#ffffff" 21 | : interaction.guild.me.displayHexColor; 22 | 23 | if (!args[0]) { 24 | let categories = []; 25 | 26 | readdirSync("./commands/").forEach((dir) => { 27 | const commands = readdirSync(`./commands/${dir}/`).filter((file) => 28 | file.endsWith(".js") 29 | ); 30 | 31 | const cmds = commands.map((command) => { 32 | let file = require(`../../commands/${dir}/${command}`); 33 | 34 | if (!file.name) return "No command name."; 35 | 36 | let name = file.name.replace(".js", ""); 37 | 38 | return `\`${name}\``; 39 | }); 40 | 41 | let data = new Object(); 42 | 43 | data = { 44 | name: dir.toUpperCase(), 45 | value: cmds.length === 0 ? "In progress." : cmds.join(" "), 46 | }; 47 | 48 | categories.push(data); 49 | }); 50 | 51 | const embed = new MessageEmbed() 52 | .setTitle("📬 Need help? Here are all of my commands:") 53 | .addFields(categories) 54 | .setDescription( 55 | `Use \`${prefix}help\` followed by a command name to get more additional information on a command. For example: \`${prefix}help ban\`.` 56 | ) 57 | .setFooter( 58 | `Requested by ${interaction.user.tag}`, 59 | ) 60 | .setTimestamp() 61 | .setColor(roleColor); 62 | return interaction.followUp({ embeds: [embed] }); 63 | } else { 64 | const command = 65 | client.commands.get(args[0].toLowerCase()) || 66 | client.commands.find( 67 | (c) => c.aliases && c.aliases.includes(args[0].toLowerCase()) 68 | ); 69 | 70 | if (!command) { 71 | const embed = new MessageEmbed() 72 | .setTitle( 73 | `Invalid command! Use \`${prefix}help\` for all of my commands!` 74 | ) 75 | .setColor("FF0000"); 76 | return interaction.followUp({ embeds: [embed] }); 77 | } 78 | 79 | const embed = new MessageEmbed() 80 | .setTitle("Command Details:") 81 | .addField("PREFIX:", `\`${prefix}\``) 82 | .addField( 83 | "COMMAND:", 84 | command.name ? `\`${command.name}\`` : "No name for this command." 85 | ) 86 | .addField( 87 | "ALIASES:", 88 | command.aliases 89 | ? `\`${command.aliases.join("` `")}\`` 90 | : "No aliases for this command." 91 | ) 92 | .addField( 93 | "USAGE:", 94 | command.usage 95 | ? `\`${prefix}${command.name} ${command.usage}\`` 96 | : `\`${prefix}${command.name}\`` 97 | ) 98 | .addField( 99 | "DESCRIPTION:", 100 | command.description 101 | ? command.description 102 | : "No description for this command." 103 | ) 104 | .setFooter( 105 | `Requested by ${interaction.user.tag}`, 106 | ) 107 | .setTimestamp() 108 | .setColor(roleColor); 109 | return interaction.followUp({ embeds: [embed] }); 110 | } 111 | }, 112 | }; -------------------------------------------------------------------------------- /slashCommands/info/ping.js: -------------------------------------------------------------------------------- 1 | const { Client, CommandInteraction, MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | name: 'ping', 5 | aliases: [''], 6 | categories : ' ', 7 | description: 'showping', 8 | usage: '', 9 | /** 10 | * @param {Client} client 11 | * @param {CommandInteraction} interaction 12 | * @param {String[]} args 13 | */ 14 | run: async(client, interaction, args) => { 15 | interaction.editReply({content : `Ping : ${client.ws.ping}`}) 16 | } 17 | } -------------------------------------------------------------------------------- /start.bat: -------------------------------------------------------------------------------- 1 | node . 2 | -------------------------------------------------------------------------------- /utils/function.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed , Collection} = require('discord.js'); 2 | 3 | /** 4 | * @param {Client} client 5 | * @param {Message} message 6 | * @param {String[]} args 7 | */ 8 | 9 | 10 | module.exports.escapeRegex = escapeRegex; 11 | module.exports.onCoolDown = onCoolDown; 12 | 13 | function escapeRegex(str) { 14 | try { 15 | return str.replace(/[.*+?^${}()|[\]\\]/g, `\\$&`); 16 | } catch (e) { 17 | console.log(String(e.stack).bgRed); 18 | } 19 | } 20 | 21 | /** 22 | * 23 | * @param {*} message A DiscordMessage, with the client, information 24 | * @param {*} command The Command with the command.name 25 | * @returns BOOLEAN 26 | */ 27 | function onCoolDown(message, command) { 28 | if(!message || !message.client) throw "No Message with a valid DiscordClient granted as First Parameter"; 29 | if(!command || !command.name) throw "No Command with a valid Name granted as Second Parameter"; 30 | const client = message.client; 31 | if (!client.cooldowns.has(command.name)) { //if its not in the cooldown, set it too there 32 | client.cooldowns.set(command.name, new Collection()); 33 | } 34 | const now = Date.now(); //get the current time 35 | const timestamps = client.cooldowns.get(command.name); //get the timestamp of the last used commands 36 | const cooldownAmount = (command.cooldown) * 1000; //get the cooldownamount of the command, if there is no cooldown there will be automatically 1 sec cooldown, so you cannot spam it^^ 37 | if (timestamps.has(message.author.id)) { //if the user is on cooldown 38 | const expirationTime = timestamps.get(message.author.id) + cooldownAmount; //get the amount of time he needs to wait until he can run the cmd again 39 | if (now < expirationTime) { //if he is still on cooldonw 40 | const timeLeft = (expirationTime - now) / 1000; //get the lefttime 41 | //return true 42 | return timeLeft 43 | } 44 | else { 45 | //if he is not on cooldown, set it to the cooldown 46 | timestamps.set(message.author.id, now); 47 | //set a timeout function with the cooldown, so it gets deleted later on again 48 | setTimeout(() => timestamps.delete(message.author.id), cooldownAmount); 49 | //return false aka not on cooldown 50 | return false; 51 | } 52 | } 53 | else { 54 | //if he is not on cooldown, set it to the cooldown 55 | timestamps.set(message.author.id, now); 56 | //set a timeout function with the cooldown, so it gets deleted later on again 57 | setTimeout(() => timestamps.delete(message.author.id), cooldownAmount); 58 | //return false aka not on cooldown 59 | return false; 60 | } 61 | } --------------------------------------------------------------------------------