├── .dockerignore ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── app.js ├── commands └── ping.js ├── config.json ├── events ├── guildMemberAdd.js └── ready.js ├── package-lock.json └── package.json /.dockerignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 27 | node_modules 28 | 29 | server/*.spec.js 30 | kubernetes 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependency directory 2 | node_modules -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # https://hub.docker.com/_/node/tags?page=1&name=alpine 2 | FROM node:alpine3.16@sha256:5e6e9c2ac7ae6d48d3eefff99989e09eb94066ed33fcfc43f3f7c13dcc9cb61f 3 | WORKDIR /app 4 | COPY package*.json config.json ./ 5 | # https://docs.npmjs.com/cli/v9/commands/npm-install#synopsis 6 | RUN npm i --save-prod 7 | COPY --chown=node:node . ./ 8 | USER node 9 | CMD ["node", "app.js"] 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 CappeDiem 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 Discord bot template 2 | Basic bot template with command handler and event handler. 3 | 4 | ## This is being updated to discord.js v14 and to use slash commands 5 | 6 | **This README is gonna be rewritten later** 7 | 8 | Change Token and prefix in ``config.json`` 9 | 10 | Make commands in ``commands`` folder. 11 | 12 | There is ``ping`` command in ``commands`` folder 13 | the default prefix of the bot is ``!`` you can change this in the ``config.json`` 14 | ### Prerequisites 15 | 16 | What things you need to install the software and how to install them: 17 | 18 | ``` 19 | Node.js 20 | ``` 21 | ### Installing: 22 | 23 | A step by step series of how to get the bot running 24 | 25 | ##### Install Node.js: 26 | 27 | 1. Goto downloads 28 | 2. You can choose the lts or the current version of node.js depending on what you want 29 | then download the installer according to your operating system 30 | 31 | [Node.js](https://nodejs.org/en/) 32 | 33 | ##### Installing discord.js and making the bot folder 34 | 35 | 36 | After you have node.js: 37 | 1. Create a folder on your computer. 38 | 2. On windows open cmd and copy the folder location from top of the file browser. 39 | 3. On cmd type cd "then paste the location" and enter 40 | 4. Do in the cmd `npm i discord.js` to install discord.js 41 | Before you do the install command make sure the cmd window is in the right folder 42 | what is the api used to connect to Discord. 43 | 44 | 45 | ##### Getting this bot and starting it: 46 | 47 | 1. Download this project as a zip file then move the zip file to the folder you created 48 | 2. Unzip it there then put token in the config.json to get a token goto Discord Developer Site link below 49 | 3. After you have token in config.json and have installed discord.js you can start bot by typing `node app.js` 50 | 51 | [Discord Developer Site](https://discordapp.com/developers/applications/) 52 | 53 | Other things you can do for bot develoment 54 | ``` 55 | You can install nodemon to restart the bot everytime the bot file is changed 56 | to install nodemon globally type `npm i -g nodemon` 57 | ``` 58 | 59 | ## Authors 60 | 61 | * **CappeDiem** - *Initial work* - [CappeDiem](https://github.com/CappeDiem) 62 | 63 | ## Built With 64 | 65 | * [Node.js](https://nodejs.org/en/) - the base that the bot runs on 66 | * [discord.js](https://discord.js.org/#/) - node.js link to the discord bot api 67 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | const { prefix, token } = require("./config.json"); 2 | const fs = require("fs"); 3 | const { Client, Collection, GatewayIntentsString, Partials} = require('discord.js'); 4 | const bot = new Client({ 5 | intents: [ 6 | GatewayIntentsString.Guilds, 7 | GatewayIntentsString.GuildMembers, 8 | GatewayIntentsString.GuildMessages, 9 | GatewayIntentsString.MessageContent, 10 | ], 11 | partials: [ 12 | Partials.Channel, 13 | Partials.Message, 14 | Partials.User 15 | ] 16 | }); 17 | 18 | // Create a collection to store commands inside the bot object 19 | bot.commands = new Collection(); 20 | 21 | // Load Command files from commands folder 22 | const commandFiles = fs.readdirSync('./commands/').filter(f => f.endsWith('.js')) 23 | for (const file of commandFiles) { 24 | const props = require(`./commands/${file}`) 25 | console.log(`${file} loaded`) 26 | bot.commands.set(props.config.name, props) 27 | } 28 | // Get folders inside commands folder 29 | const commandSubFolders = fs.readdirSync('./commands/').filter(f => !f.endsWith('.js')) 30 | // Load Command files from subfolders inside commands folder 31 | commandSubFolders.forEach(folder => { 32 | const commandFiles = fs.readdirSync(`./commands/${folder}/`).filter(f => f.endsWith('.js')) 33 | for (const file of commandFiles) { 34 | const props = require(`./commands/${folder}/${file}`) 35 | console.log(`${file} loaded from ${folder}`) 36 | bot.commands.set(props.config.name, props) 37 | } 38 | }); 39 | // Load Event files from events folder 40 | const eventFiles = fs.readdirSync('./events/').filter(f => f.endsWith('.js')) 41 | for (const file of eventFiles) { 42 | const event = require(`./events/${file}`) 43 | if(event.once) { 44 | bot.once(event.name, (...args) => event.execute(...args, bot)) 45 | } else { 46 | bot.on(event.name, (...args) => event.execute(...args, bot)) 47 | } 48 | } 49 | 50 | // Run when bot receives messageCreate event and then run checks to see if the message is a command 51 | bot.on("messageCreate", async message => { 52 | // Check if author is a bot or the message was sent in dms and return 53 | if(message.author.bot) return; 54 | if(message.channel.type === "dm") return; 55 | 56 | // Get prefix from config and prepare message so it is forwarded correctly to the command 57 | let messageArray = message.content.split(" "); 58 | let cmd = messageArray[0]; 59 | let args = messageArray.slice(1); 60 | 61 | // Check that the message starts with the prefix and return if it does not 62 | if(!cmd.startsWith(prefix)) return; 63 | 64 | // Get command from command collection and run it 65 | let commandfile = bot.commands.get(cmd.slice(prefix.length)); 66 | if(commandfile) commandfile.run(bot,message,args); 67 | 68 | }); 69 | 70 | // Token needed in config.json 71 | bot.login(token); 72 | -------------------------------------------------------------------------------- /commands/ping.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | config: { 3 | name: 'ping', 4 | description: 'Get ping of the bot', 5 | usage: `!ping`, 6 | }, 7 | async run (bot,message,args) { 8 | // Get the ping of the bot and send a message to the channel the command was run in 9 | message.channel.send("My ping is \`" + bot.ws.ping + " ms\`"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "prefix":"!", 3 | "token":"token here" 4 | } 5 | -------------------------------------------------------------------------------- /events/guildMemberAdd.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'guildMemberAdd', 3 | execute(member, bot) { 4 | // Log the newly joined member to console 5 | console.log('User ' + member.user.tag + ' has joined the server!'); 6 | 7 | // Find a channel named welcome and send a Welcome message 8 | member.guild.channels.cache.find(c => c.name === "welcome").send('Welcome '+ member.user.username) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /events/ready.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'ready', 3 | once: true, 4 | execute(bot) { 5 | // Log Bot's username and the amount of servers its in to console 6 | console.log(`${bot.user.username} is online on ${bot.guilds.cache.size} servers!`); 7 | 8 | // Set the Presence of the bot user to show 'Playing: My code' 9 | bot.user.setPresence({ activities: [{ name: 'My code'}] }); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord.js-bot-template", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "discord.js-bot-template", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "asynckit": "^0.4.0", 13 | "callsites": "^3.1.0", 14 | "combined-stream": "^1.0.8", 15 | "delayed-stream": "^1.0.0", 16 | "discord-api-types": "^0.22.0", 17 | "discord.js": "^14.15.3", 18 | "dot-prop": "^6.0.1", 19 | "is-obj": "^2.0.0", 20 | "lodash.isequal": "^4.5.0", 21 | "mime-db": "^1.50.0", 22 | "mime-types": "^2.1.33", 23 | "node-fetch": "^3.2.10", 24 | "ow": "^0.27.0", 25 | "tr46": "^0.0.3", 26 | "ts-mixer": "^6.0.0", 27 | "tslib": "^2.3.1", 28 | "type-fest": "^1.4.0", 29 | "vali-date": "^1.0.0", 30 | "webidl-conversions": "^3.0.1", 31 | "whatwg-url": "^5.0.0", 32 | "ws": "^7.5.5" 33 | } 34 | }, 35 | "node_modules/@discordjs/builders": { 36 | "version": "1.8.2", 37 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.8.2.tgz", 38 | "integrity": "sha512-6wvG3QaCjtMu0xnle4SoOIeFB4y6fKMN6WZfy3BMKJdQQtPLik8KGzDwBVL/+wTtcE/ZlFjgEk74GublyEVZ7g==", 39 | "dependencies": { 40 | "@discordjs/formatters": "^0.4.0", 41 | "@discordjs/util": "^1.1.0", 42 | "@sapphire/shapeshift": "^3.9.7", 43 | "discord-api-types": "0.37.83", 44 | "fast-deep-equal": "^3.1.3", 45 | "ts-mixer": "^6.0.4", 46 | "tslib": "^2.6.2" 47 | }, 48 | "engines": { 49 | "node": ">=16.11.0" 50 | }, 51 | "funding": { 52 | "url": "https://github.com/discordjs/discord.js?sponsor" 53 | } 54 | }, 55 | "node_modules/@discordjs/builders/node_modules/discord-api-types": { 56 | "version": "0.37.83", 57 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", 58 | "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" 59 | }, 60 | "node_modules/@discordjs/collection": { 61 | "version": "1.5.3", 62 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", 63 | "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", 64 | "engines": { 65 | "node": ">=16.11.0" 66 | } 67 | }, 68 | "node_modules/@discordjs/formatters": { 69 | "version": "0.4.0", 70 | "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.4.0.tgz", 71 | "integrity": "sha512-fJ06TLC1NiruF35470q3Nr1bi95BdvKFAF+T5bNfZJ4bNdqZ3VZ+Ttg6SThqTxm6qumSG3choxLBHMC69WXNXQ==", 72 | "dependencies": { 73 | "discord-api-types": "0.37.83" 74 | }, 75 | "engines": { 76 | "node": ">=16.11.0" 77 | }, 78 | "funding": { 79 | "url": "https://github.com/discordjs/discord.js?sponsor" 80 | } 81 | }, 82 | "node_modules/@discordjs/formatters/node_modules/discord-api-types": { 83 | "version": "0.37.83", 84 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", 85 | "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" 86 | }, 87 | "node_modules/@discordjs/rest": { 88 | "version": "2.3.0", 89 | "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.3.0.tgz", 90 | "integrity": "sha512-C1kAJK8aSYRv3ZwMG8cvrrW4GN0g5eMdP8AuN8ODH5DyOCbHgJspze1my3xHOAgwLJdKUbWNVyAeJ9cEdduqIg==", 91 | "dependencies": { 92 | "@discordjs/collection": "^2.1.0", 93 | "@discordjs/util": "^1.1.0", 94 | "@sapphire/async-queue": "^1.5.2", 95 | "@sapphire/snowflake": "^3.5.3", 96 | "@vladfrangu/async_event_emitter": "^2.2.4", 97 | "discord-api-types": "0.37.83", 98 | "magic-bytes.js": "^1.10.0", 99 | "tslib": "^2.6.2", 100 | "undici": "6.13.0" 101 | }, 102 | "engines": { 103 | "node": ">=16.11.0" 104 | }, 105 | "funding": { 106 | "url": "https://github.com/discordjs/discord.js?sponsor" 107 | } 108 | }, 109 | "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { 110 | "version": "2.1.0", 111 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.0.tgz", 112 | "integrity": "sha512-mLcTACtXUuVgutoznkh6hS3UFqYirDYAg5Dc1m8xn6OvPjetnUlf/xjtqnnc47OwWdaoCQnHmHh9KofhD6uRqw==", 113 | "engines": { 114 | "node": ">=18" 115 | }, 116 | "funding": { 117 | "url": "https://github.com/discordjs/discord.js?sponsor" 118 | } 119 | }, 120 | "node_modules/@discordjs/rest/node_modules/discord-api-types": { 121 | "version": "0.37.83", 122 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", 123 | "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" 124 | }, 125 | "node_modules/@discordjs/util": { 126 | "version": "1.1.0", 127 | "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.0.tgz", 128 | "integrity": "sha512-IndcI5hzlNZ7GS96RV3Xw1R2kaDuXEp7tRIy/KlhidpN/BQ1qh1NZt3377dMLTa44xDUNKT7hnXkA/oUAzD/lg==", 129 | "engines": { 130 | "node": ">=16.11.0" 131 | }, 132 | "funding": { 133 | "url": "https://github.com/discordjs/discord.js?sponsor" 134 | } 135 | }, 136 | "node_modules/@discordjs/ws": { 137 | "version": "1.1.1", 138 | "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.1.1.tgz", 139 | "integrity": "sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA==", 140 | "dependencies": { 141 | "@discordjs/collection": "^2.1.0", 142 | "@discordjs/rest": "^2.3.0", 143 | "@discordjs/util": "^1.1.0", 144 | "@sapphire/async-queue": "^1.5.2", 145 | "@types/ws": "^8.5.10", 146 | "@vladfrangu/async_event_emitter": "^2.2.4", 147 | "discord-api-types": "0.37.83", 148 | "tslib": "^2.6.2", 149 | "ws": "^8.16.0" 150 | }, 151 | "engines": { 152 | "node": ">=16.11.0" 153 | }, 154 | "funding": { 155 | "url": "https://github.com/discordjs/discord.js?sponsor" 156 | } 157 | }, 158 | "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { 159 | "version": "2.1.0", 160 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.0.tgz", 161 | "integrity": "sha512-mLcTACtXUuVgutoznkh6hS3UFqYirDYAg5Dc1m8xn6OvPjetnUlf/xjtqnnc47OwWdaoCQnHmHh9KofhD6uRqw==", 162 | "engines": { 163 | "node": ">=18" 164 | }, 165 | "funding": { 166 | "url": "https://github.com/discordjs/discord.js?sponsor" 167 | } 168 | }, 169 | "node_modules/@discordjs/ws/node_modules/discord-api-types": { 170 | "version": "0.37.83", 171 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", 172 | "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" 173 | }, 174 | "node_modules/@discordjs/ws/node_modules/ws": { 175 | "version": "8.17.0", 176 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", 177 | "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", 178 | "engines": { 179 | "node": ">=10.0.0" 180 | }, 181 | "peerDependencies": { 182 | "bufferutil": "^4.0.1", 183 | "utf-8-validate": ">=5.0.2" 184 | }, 185 | "peerDependenciesMeta": { 186 | "bufferutil": { 187 | "optional": true 188 | }, 189 | "utf-8-validate": { 190 | "optional": true 191 | } 192 | } 193 | }, 194 | "node_modules/@sapphire/async-queue": { 195 | "version": "1.5.2", 196 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.2.tgz", 197 | "integrity": "sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg==", 198 | "engines": { 199 | "node": ">=v14.0.0", 200 | "npm": ">=7.0.0" 201 | } 202 | }, 203 | "node_modules/@sapphire/shapeshift": { 204 | "version": "3.9.7", 205 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.7.tgz", 206 | "integrity": "sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==", 207 | "dependencies": { 208 | "fast-deep-equal": "^3.1.3", 209 | "lodash": "^4.17.21" 210 | }, 211 | "engines": { 212 | "node": ">=v16" 213 | } 214 | }, 215 | "node_modules/@sapphire/snowflake": { 216 | "version": "3.5.3", 217 | "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", 218 | "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==", 219 | "engines": { 220 | "node": ">=v14.0.0", 221 | "npm": ">=7.0.0" 222 | } 223 | }, 224 | "node_modules/@sindresorhus/is": { 225 | "version": "4.6.0", 226 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 227 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", 228 | "engines": { 229 | "node": ">=10" 230 | }, 231 | "funding": { 232 | "url": "https://github.com/sindresorhus/is?sponsor=1" 233 | } 234 | }, 235 | "node_modules/@types/node": { 236 | "version": "20.14.2", 237 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", 238 | "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", 239 | "dependencies": { 240 | "undici-types": "~5.26.4" 241 | } 242 | }, 243 | "node_modules/@types/ws": { 244 | "version": "8.5.10", 245 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", 246 | "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", 247 | "dependencies": { 248 | "@types/node": "*" 249 | } 250 | }, 251 | "node_modules/@vladfrangu/async_event_emitter": { 252 | "version": "2.2.4", 253 | "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz", 254 | "integrity": "sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==", 255 | "engines": { 256 | "node": ">=v14.0.0", 257 | "npm": ">=7.0.0" 258 | } 259 | }, 260 | "node_modules/asynckit": { 261 | "version": "0.4.0", 262 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 263 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 264 | }, 265 | "node_modules/callsites": { 266 | "version": "3.1.0", 267 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 268 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 269 | "engines": { 270 | "node": ">=6" 271 | } 272 | }, 273 | "node_modules/combined-stream": { 274 | "version": "1.0.8", 275 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 276 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 277 | "dependencies": { 278 | "delayed-stream": "~1.0.0" 279 | }, 280 | "engines": { 281 | "node": ">= 0.8" 282 | } 283 | }, 284 | "node_modules/data-uri-to-buffer": { 285 | "version": "4.0.0", 286 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", 287 | "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", 288 | "engines": { 289 | "node": ">= 12" 290 | } 291 | }, 292 | "node_modules/delayed-stream": { 293 | "version": "1.0.0", 294 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 295 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 296 | "engines": { 297 | "node": ">=0.4.0" 298 | } 299 | }, 300 | "node_modules/discord-api-types": { 301 | "version": "0.22.0", 302 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", 303 | "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==", 304 | "engines": { 305 | "node": ">=12" 306 | } 307 | }, 308 | "node_modules/discord.js": { 309 | "version": "14.15.3", 310 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.15.3.tgz", 311 | "integrity": "sha512-/UJDQO10VuU6wQPglA4kz2bw2ngeeSbogiIPx/TsnctfzV/tNf+q+i1HlgtX1OGpeOBpJH9erZQNO5oRM2uAtQ==", 312 | "dependencies": { 313 | "@discordjs/builders": "^1.8.2", 314 | "@discordjs/collection": "1.5.3", 315 | "@discordjs/formatters": "^0.4.0", 316 | "@discordjs/rest": "^2.3.0", 317 | "@discordjs/util": "^1.1.0", 318 | "@discordjs/ws": "^1.1.1", 319 | "@sapphire/snowflake": "3.5.3", 320 | "discord-api-types": "0.37.83", 321 | "fast-deep-equal": "3.1.3", 322 | "lodash.snakecase": "4.1.1", 323 | "tslib": "2.6.2", 324 | "undici": "6.13.0" 325 | }, 326 | "engines": { 327 | "node": ">=16.11.0" 328 | }, 329 | "funding": { 330 | "url": "https://github.com/discordjs/discord.js?sponsor" 331 | } 332 | }, 333 | "node_modules/discord.js/node_modules/discord-api-types": { 334 | "version": "0.37.83", 335 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", 336 | "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" 337 | }, 338 | "node_modules/dot-prop": { 339 | "version": "6.0.1", 340 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", 341 | "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", 342 | "dependencies": { 343 | "is-obj": "^2.0.0" 344 | }, 345 | "engines": { 346 | "node": ">=10" 347 | }, 348 | "funding": { 349 | "url": "https://github.com/sponsors/sindresorhus" 350 | } 351 | }, 352 | "node_modules/fast-deep-equal": { 353 | "version": "3.1.3", 354 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 355 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 356 | }, 357 | "node_modules/fetch-blob": { 358 | "version": "3.1.4", 359 | "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", 360 | "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", 361 | "funding": [ 362 | { 363 | "type": "github", 364 | "url": "https://github.com/sponsors/jimmywarting" 365 | }, 366 | { 367 | "type": "paypal", 368 | "url": "https://paypal.me/jimmywarting" 369 | } 370 | ], 371 | "dependencies": { 372 | "node-domexception": "^1.0.0", 373 | "web-streams-polyfill": "^3.0.3" 374 | }, 375 | "engines": { 376 | "node": "^12.20 || >= 14.13" 377 | } 378 | }, 379 | "node_modules/formdata-polyfill": { 380 | "version": "4.0.10", 381 | "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", 382 | "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", 383 | "dependencies": { 384 | "fetch-blob": "^3.1.2" 385 | }, 386 | "engines": { 387 | "node": ">=12.20.0" 388 | } 389 | }, 390 | "node_modules/is-obj": { 391 | "version": "2.0.0", 392 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 393 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 394 | "engines": { 395 | "node": ">=8" 396 | } 397 | }, 398 | "node_modules/lodash": { 399 | "version": "4.17.21", 400 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 401 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 402 | }, 403 | "node_modules/lodash.isequal": { 404 | "version": "4.5.0", 405 | "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 406 | "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" 407 | }, 408 | "node_modules/lodash.snakecase": { 409 | "version": "4.1.1", 410 | "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", 411 | "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" 412 | }, 413 | "node_modules/magic-bytes.js": { 414 | "version": "1.10.0", 415 | "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", 416 | "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==" 417 | }, 418 | "node_modules/mime-db": { 419 | "version": "1.50.0", 420 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", 421 | "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", 422 | "engines": { 423 | "node": ">= 0.6" 424 | } 425 | }, 426 | "node_modules/mime-types": { 427 | "version": "2.1.33", 428 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", 429 | "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", 430 | "dependencies": { 431 | "mime-db": "1.50.0" 432 | }, 433 | "engines": { 434 | "node": ">= 0.6" 435 | } 436 | }, 437 | "node_modules/node-domexception": { 438 | "version": "1.0.0", 439 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 440 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 441 | "funding": [ 442 | { 443 | "type": "github", 444 | "url": "https://github.com/sponsors/jimmywarting" 445 | }, 446 | { 447 | "type": "github", 448 | "url": "https://paypal.me/jimmywarting" 449 | } 450 | ], 451 | "engines": { 452 | "node": ">=10.5.0" 453 | } 454 | }, 455 | "node_modules/node-fetch": { 456 | "version": "3.2.10", 457 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", 458 | "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", 459 | "dependencies": { 460 | "data-uri-to-buffer": "^4.0.0", 461 | "fetch-blob": "^3.1.4", 462 | "formdata-polyfill": "^4.0.10" 463 | }, 464 | "engines": { 465 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 466 | }, 467 | "funding": { 468 | "type": "opencollective", 469 | "url": "https://opencollective.com/node-fetch" 470 | } 471 | }, 472 | "node_modules/ow": { 473 | "version": "0.27.0", 474 | "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", 475 | "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", 476 | "dependencies": { 477 | "@sindresorhus/is": "^4.0.1", 478 | "callsites": "^3.1.0", 479 | "dot-prop": "^6.0.1", 480 | "lodash.isequal": "^4.5.0", 481 | "type-fest": "^1.2.1", 482 | "vali-date": "^1.0.0" 483 | }, 484 | "engines": { 485 | "node": ">=12" 486 | }, 487 | "funding": { 488 | "url": "https://github.com/sponsors/sindresorhus" 489 | } 490 | }, 491 | "node_modules/tr46": { 492 | "version": "0.0.3", 493 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 494 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" 495 | }, 496 | "node_modules/ts-mixer": { 497 | "version": "6.0.4", 498 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", 499 | "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" 500 | }, 501 | "node_modules/tslib": { 502 | "version": "2.6.2", 503 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 504 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" 505 | }, 506 | "node_modules/type-fest": { 507 | "version": "1.4.0", 508 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", 509 | "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", 510 | "engines": { 511 | "node": ">=10" 512 | }, 513 | "funding": { 514 | "url": "https://github.com/sponsors/sindresorhus" 515 | } 516 | }, 517 | "node_modules/undici": { 518 | "version": "6.13.0", 519 | "resolved": "https://registry.npmjs.org/undici/-/undici-6.13.0.tgz", 520 | "integrity": "sha512-Q2rtqmZWrbP8nePMq7mOJIN98M0fYvSgV89vwl/BQRT4mDOeY2GXZngfGpcBBhtky3woM7G24wZV3Q304Bv6cw==", 521 | "engines": { 522 | "node": ">=18.0" 523 | } 524 | }, 525 | "node_modules/undici-types": { 526 | "version": "5.26.5", 527 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 528 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" 529 | }, 530 | "node_modules/vali-date": { 531 | "version": "1.0.0", 532 | "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", 533 | "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", 534 | "engines": { 535 | "node": ">=0.10.0" 536 | } 537 | }, 538 | "node_modules/web-streams-polyfill": { 539 | "version": "3.2.0", 540 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", 541 | "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", 542 | "engines": { 543 | "node": ">= 8" 544 | } 545 | }, 546 | "node_modules/webidl-conversions": { 547 | "version": "3.0.1", 548 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 549 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" 550 | }, 551 | "node_modules/whatwg-url": { 552 | "version": "5.0.0", 553 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 554 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", 555 | "dependencies": { 556 | "tr46": "~0.0.3", 557 | "webidl-conversions": "^3.0.0" 558 | } 559 | }, 560 | "node_modules/ws": { 561 | "version": "7.5.5", 562 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", 563 | "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", 564 | "engines": { 565 | "node": ">=8.3.0" 566 | }, 567 | "peerDependencies": { 568 | "bufferutil": "^4.0.1", 569 | "utf-8-validate": "^5.0.2" 570 | }, 571 | "peerDependenciesMeta": { 572 | "bufferutil": { 573 | "optional": true 574 | }, 575 | "utf-8-validate": { 576 | "optional": true 577 | } 578 | } 579 | } 580 | }, 581 | "dependencies": { 582 | "@discordjs/builders": { 583 | "version": "1.8.2", 584 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.8.2.tgz", 585 | "integrity": "sha512-6wvG3QaCjtMu0xnle4SoOIeFB4y6fKMN6WZfy3BMKJdQQtPLik8KGzDwBVL/+wTtcE/ZlFjgEk74GublyEVZ7g==", 586 | "requires": { 587 | "@discordjs/formatters": "^0.4.0", 588 | "@discordjs/util": "^1.1.0", 589 | "@sapphire/shapeshift": "^3.9.7", 590 | "discord-api-types": "0.37.83", 591 | "fast-deep-equal": "^3.1.3", 592 | "ts-mixer": "^6.0.4", 593 | "tslib": "^2.6.2" 594 | }, 595 | "dependencies": { 596 | "discord-api-types": { 597 | "version": "0.37.83", 598 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", 599 | "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" 600 | } 601 | } 602 | }, 603 | "@discordjs/collection": { 604 | "version": "1.5.3", 605 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", 606 | "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==" 607 | }, 608 | "@discordjs/formatters": { 609 | "version": "0.4.0", 610 | "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.4.0.tgz", 611 | "integrity": "sha512-fJ06TLC1NiruF35470q3Nr1bi95BdvKFAF+T5bNfZJ4bNdqZ3VZ+Ttg6SThqTxm6qumSG3choxLBHMC69WXNXQ==", 612 | "requires": { 613 | "discord-api-types": "0.37.83" 614 | }, 615 | "dependencies": { 616 | "discord-api-types": { 617 | "version": "0.37.83", 618 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", 619 | "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" 620 | } 621 | } 622 | }, 623 | "@discordjs/rest": { 624 | "version": "2.3.0", 625 | "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.3.0.tgz", 626 | "integrity": "sha512-C1kAJK8aSYRv3ZwMG8cvrrW4GN0g5eMdP8AuN8ODH5DyOCbHgJspze1my3xHOAgwLJdKUbWNVyAeJ9cEdduqIg==", 627 | "requires": { 628 | "@discordjs/collection": "^2.1.0", 629 | "@discordjs/util": "^1.1.0", 630 | "@sapphire/async-queue": "^1.5.2", 631 | "@sapphire/snowflake": "^3.5.3", 632 | "@vladfrangu/async_event_emitter": "^2.2.4", 633 | "discord-api-types": "0.37.83", 634 | "magic-bytes.js": "^1.10.0", 635 | "tslib": "^2.6.2", 636 | "undici": "6.13.0" 637 | }, 638 | "dependencies": { 639 | "@discordjs/collection": { 640 | "version": "2.1.0", 641 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.0.tgz", 642 | "integrity": "sha512-mLcTACtXUuVgutoznkh6hS3UFqYirDYAg5Dc1m8xn6OvPjetnUlf/xjtqnnc47OwWdaoCQnHmHh9KofhD6uRqw==" 643 | }, 644 | "discord-api-types": { 645 | "version": "0.37.83", 646 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", 647 | "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" 648 | } 649 | } 650 | }, 651 | "@discordjs/util": { 652 | "version": "1.1.0", 653 | "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.0.tgz", 654 | "integrity": "sha512-IndcI5hzlNZ7GS96RV3Xw1R2kaDuXEp7tRIy/KlhidpN/BQ1qh1NZt3377dMLTa44xDUNKT7hnXkA/oUAzD/lg==" 655 | }, 656 | "@discordjs/ws": { 657 | "version": "1.1.1", 658 | "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.1.1.tgz", 659 | "integrity": "sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA==", 660 | "requires": { 661 | "@discordjs/collection": "^2.1.0", 662 | "@discordjs/rest": "^2.3.0", 663 | "@discordjs/util": "^1.1.0", 664 | "@sapphire/async-queue": "^1.5.2", 665 | "@types/ws": "^8.5.10", 666 | "@vladfrangu/async_event_emitter": "^2.2.4", 667 | "discord-api-types": "0.37.83", 668 | "tslib": "^2.6.2", 669 | "ws": "^8.16.0" 670 | }, 671 | "dependencies": { 672 | "@discordjs/collection": { 673 | "version": "2.1.0", 674 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.0.tgz", 675 | "integrity": "sha512-mLcTACtXUuVgutoznkh6hS3UFqYirDYAg5Dc1m8xn6OvPjetnUlf/xjtqnnc47OwWdaoCQnHmHh9KofhD6uRqw==" 676 | }, 677 | "discord-api-types": { 678 | "version": "0.37.83", 679 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", 680 | "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" 681 | }, 682 | "ws": { 683 | "version": "8.17.0", 684 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", 685 | "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", 686 | "requires": {} 687 | } 688 | } 689 | }, 690 | "@sapphire/async-queue": { 691 | "version": "1.5.2", 692 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.2.tgz", 693 | "integrity": "sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg==" 694 | }, 695 | "@sapphire/shapeshift": { 696 | "version": "3.9.7", 697 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.7.tgz", 698 | "integrity": "sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==", 699 | "requires": { 700 | "fast-deep-equal": "^3.1.3", 701 | "lodash": "^4.17.21" 702 | } 703 | }, 704 | "@sapphire/snowflake": { 705 | "version": "3.5.3", 706 | "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", 707 | "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==" 708 | }, 709 | "@sindresorhus/is": { 710 | "version": "4.6.0", 711 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 712 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" 713 | }, 714 | "@types/node": { 715 | "version": "20.14.2", 716 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", 717 | "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", 718 | "requires": { 719 | "undici-types": "~5.26.4" 720 | } 721 | }, 722 | "@types/ws": { 723 | "version": "8.5.10", 724 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", 725 | "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", 726 | "requires": { 727 | "@types/node": "*" 728 | } 729 | }, 730 | "@vladfrangu/async_event_emitter": { 731 | "version": "2.2.4", 732 | "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz", 733 | "integrity": "sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==" 734 | }, 735 | "asynckit": { 736 | "version": "0.4.0", 737 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 738 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 739 | }, 740 | "callsites": { 741 | "version": "3.1.0", 742 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 743 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" 744 | }, 745 | "combined-stream": { 746 | "version": "1.0.8", 747 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 748 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 749 | "requires": { 750 | "delayed-stream": "~1.0.0" 751 | } 752 | }, 753 | "data-uri-to-buffer": { 754 | "version": "4.0.0", 755 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", 756 | "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" 757 | }, 758 | "delayed-stream": { 759 | "version": "1.0.0", 760 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 761 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 762 | }, 763 | "discord-api-types": { 764 | "version": "0.22.0", 765 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", 766 | "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" 767 | }, 768 | "discord.js": { 769 | "version": "14.15.3", 770 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.15.3.tgz", 771 | "integrity": "sha512-/UJDQO10VuU6wQPglA4kz2bw2ngeeSbogiIPx/TsnctfzV/tNf+q+i1HlgtX1OGpeOBpJH9erZQNO5oRM2uAtQ==", 772 | "requires": { 773 | "@discordjs/builders": "^1.8.2", 774 | "@discordjs/collection": "1.5.3", 775 | "@discordjs/formatters": "^0.4.0", 776 | "@discordjs/rest": "^2.3.0", 777 | "@discordjs/util": "^1.1.0", 778 | "@discordjs/ws": "^1.1.1", 779 | "@sapphire/snowflake": "3.5.3", 780 | "discord-api-types": "0.37.83", 781 | "fast-deep-equal": "3.1.3", 782 | "lodash.snakecase": "4.1.1", 783 | "tslib": "2.6.2", 784 | "undici": "6.13.0" 785 | }, 786 | "dependencies": { 787 | "discord-api-types": { 788 | "version": "0.37.83", 789 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", 790 | "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" 791 | } 792 | } 793 | }, 794 | "dot-prop": { 795 | "version": "6.0.1", 796 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", 797 | "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", 798 | "requires": { 799 | "is-obj": "^2.0.0" 800 | } 801 | }, 802 | "fast-deep-equal": { 803 | "version": "3.1.3", 804 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 805 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 806 | }, 807 | "fetch-blob": { 808 | "version": "3.1.4", 809 | "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", 810 | "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", 811 | "requires": { 812 | "node-domexception": "^1.0.0", 813 | "web-streams-polyfill": "^3.0.3" 814 | } 815 | }, 816 | "formdata-polyfill": { 817 | "version": "4.0.10", 818 | "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", 819 | "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", 820 | "requires": { 821 | "fetch-blob": "^3.1.2" 822 | } 823 | }, 824 | "is-obj": { 825 | "version": "2.0.0", 826 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 827 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" 828 | }, 829 | "lodash": { 830 | "version": "4.17.21", 831 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 832 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 833 | }, 834 | "lodash.isequal": { 835 | "version": "4.5.0", 836 | "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 837 | "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" 838 | }, 839 | "lodash.snakecase": { 840 | "version": "4.1.1", 841 | "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", 842 | "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" 843 | }, 844 | "magic-bytes.js": { 845 | "version": "1.10.0", 846 | "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", 847 | "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==" 848 | }, 849 | "mime-db": { 850 | "version": "1.50.0", 851 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", 852 | "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" 853 | }, 854 | "mime-types": { 855 | "version": "2.1.33", 856 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", 857 | "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", 858 | "requires": { 859 | "mime-db": "1.50.0" 860 | } 861 | }, 862 | "node-domexception": { 863 | "version": "1.0.0", 864 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 865 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" 866 | }, 867 | "node-fetch": { 868 | "version": "3.2.10", 869 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", 870 | "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", 871 | "requires": { 872 | "data-uri-to-buffer": "^4.0.0", 873 | "fetch-blob": "^3.1.4", 874 | "formdata-polyfill": "^4.0.10" 875 | } 876 | }, 877 | "ow": { 878 | "version": "0.27.0", 879 | "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", 880 | "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", 881 | "requires": { 882 | "@sindresorhus/is": "^4.0.1", 883 | "callsites": "^3.1.0", 884 | "dot-prop": "^6.0.1", 885 | "lodash.isequal": "^4.5.0", 886 | "type-fest": "^1.2.1", 887 | "vali-date": "^1.0.0" 888 | } 889 | }, 890 | "tr46": { 891 | "version": "0.0.3", 892 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 893 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" 894 | }, 895 | "ts-mixer": { 896 | "version": "6.0.4", 897 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", 898 | "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" 899 | }, 900 | "tslib": { 901 | "version": "2.6.2", 902 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 903 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" 904 | }, 905 | "type-fest": { 906 | "version": "1.4.0", 907 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", 908 | "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" 909 | }, 910 | "undici": { 911 | "version": "6.13.0", 912 | "resolved": "https://registry.npmjs.org/undici/-/undici-6.13.0.tgz", 913 | "integrity": "sha512-Q2rtqmZWrbP8nePMq7mOJIN98M0fYvSgV89vwl/BQRT4mDOeY2GXZngfGpcBBhtky3woM7G24wZV3Q304Bv6cw==" 914 | }, 915 | "undici-types": { 916 | "version": "5.26.5", 917 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 918 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" 919 | }, 920 | "vali-date": { 921 | "version": "1.0.0", 922 | "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", 923 | "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" 924 | }, 925 | "web-streams-polyfill": { 926 | "version": "3.2.0", 927 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", 928 | "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==" 929 | }, 930 | "webidl-conversions": { 931 | "version": "3.0.1", 932 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 933 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" 934 | }, 935 | "whatwg-url": { 936 | "version": "5.0.0", 937 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 938 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", 939 | "requires": { 940 | "tr46": "~0.0.3", 941 | "webidl-conversions": "^3.0.0" 942 | } 943 | }, 944 | "ws": { 945 | "version": "7.5.5", 946 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", 947 | "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", 948 | "requires": {} 949 | } 950 | } 951 | } 952 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord.js-bot-template", 3 | "version": "1.0.0", 4 | "description": "basic bot template with command handler", 5 | "main": "app.js", 6 | "dependencies": { 7 | "asynckit": "^0.4.0", 8 | "callsites": "^3.1.0", 9 | "combined-stream": "^1.0.8", 10 | "delayed-stream": "^1.0.0", 11 | "discord-api-types": "^0.22.0", 12 | "discord.js": "^14.15.3", 13 | "dot-prop": "^6.0.1", 14 | "is-obj": "^2.0.0", 15 | "lodash.isequal": "^4.5.0", 16 | "mime-db": "^1.50.0", 17 | "mime-types": "^2.1.33", 18 | "node-fetch": "^3.2.10", 19 | "ow": "^0.27.0", 20 | "tr46": "^0.0.3", 21 | "ts-mixer": "^6.0.0", 22 | "tslib": "^2.3.1", 23 | "type-fest": "^1.4.0", 24 | "vali-date": "^1.0.0", 25 | "webidl-conversions": "^3.0.1", 26 | "whatwg-url": "^5.0.0", 27 | "ws": "^7.5.5" 28 | }, 29 | "scripts": { 30 | "test": "echo \"Error: no test specified\" && exit 1", 31 | "build:docker": "docker build -t ds-bot-template ." 32 | }, 33 | "repository": { 34 | "type": "git", 35 | "url": "git+https://github.com/CappeDiem/Discord.js-bot-template.git" 36 | }, 37 | "author": "CappeDiem", 38 | "license": "MIT", 39 | "bugs": { 40 | "url": "https://github.com/CappeDiem/Discord.js-bot-template/issues" 41 | }, 42 | "homepage": "https://github.com/CappeDiem/Discord.js-bot-template#readme" 43 | } 44 | --------------------------------------------------------------------------------