├── .gitignore ├── Procfile ├── bot.js ├── courseCommands.js ├── package-lock.json ├── package.json └── roleCommands.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | courseCommands.json -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | worker: npm start -------------------------------------------------------------------------------- /bot.js: -------------------------------------------------------------------------------- 1 | require("dotenv").config() 2 | 3 | const Discord = require("discord.js") 4 | const client = new Discord.Client({ 5 | intents: [ 6 | Discord.Intents.FLAGS.GUILDS, 7 | Discord.Intents.FLAGS.GUILD_MEMBERS, 8 | Discord.Intents.FLAGS.GUILD_MESSAGES, 9 | Discord.Intents.FLAGS.DIRECT_MESSAGES, 10 | // Discord.Intents.FLAGS.MESSAGE_CONTENT, 11 | ], 12 | }) 13 | const courseCommands = require("./courseCommands.js") 14 | const roleCommands = require("./roleCommands.js") 15 | const BOT_PREFIX = "!wds-" 16 | 17 | client.on("messageCreate", async msg => { 18 | if (msg.content.startsWith(BOT_PREFIX)) { 19 | await Promise.all([handleCourseCommands(msg), handleRoleCommands(msg)]) 20 | } 21 | 22 | if (msg.channelId === process.env.BOT_COMMANDS_CHANNEL_ID && msg.deletable) { 23 | msg 24 | .delete() 25 | .then(() => { 26 | msg.member 27 | .send( 28 | `It looks like the command "${msg}" is not valid. Please check your command and try re-entering it.` 29 | ) 30 | .catch(e => { 31 | console.log(e) 32 | }) 33 | }) 34 | .catch(e => { 35 | console.log(e) 36 | }) 37 | } 38 | }) 39 | 40 | function handleCourseCommands(msg) { 41 | const courseCommand = courseCommands.find(courseCommand => { 42 | return msg.content === `${BOT_PREFIX}${courseCommand.command}` 43 | }) 44 | 45 | if (courseCommand == null) return 46 | 47 | const role = msg.guild.roles.cache.get(courseCommand.roleId) 48 | if (role == null) return 49 | 50 | return Promise.all([ 51 | msg.member.roles.add([role, process.env.GENERIC_COURSE_ROLE_ID]), 52 | msg.member.send( 53 | `Thank you so much for your support! You have been added to the private ${courseCommand.courseName} course chat.` 54 | ), 55 | msg.delete(), 56 | ]).catch(e => { 57 | console.error(e) 58 | }) 59 | } 60 | 61 | function handleRoleCommands(msg) { 62 | return Promise.all([ 63 | handleAddRoleCommands(msg), 64 | handleRemoveRoleCommands(msg), 65 | ]) 66 | } 67 | 68 | function handleAddRoleCommands(msg) { 69 | const roleCommand = roleCommands.find(roleCommand => { 70 | return msg.content === `${BOT_PREFIX}add-${roleCommand.command}-role` 71 | }) 72 | if (roleCommand == null) return 73 | 74 | const role = msg.guild.roles.cache.get(roleCommand.roleId) 75 | if (role == null) return 76 | 77 | return Promise.all([ 78 | msg.member.roles.add(role), 79 | msg.member.send( 80 | `You will now be notified when new ${roleCommand?.type} are posted.` 81 | ), 82 | msg.delete(), 83 | ]).catch(e => { 84 | console.error(e) 85 | }) 86 | } 87 | 88 | function handleRemoveRoleCommands(msg) { 89 | const roleCommand = roleCommands.find(roleCommand => { 90 | return msg.content === `${BOT_PREFIX}remove-${roleCommand.command}-role` 91 | }) 92 | if (roleCommand == null) return 93 | 94 | const role = msg.guild.roles.cache.get(roleCommand.roleId) 95 | if (role == null) return 96 | 97 | return Promise.all([ 98 | msg.member.roles.remove(role), 99 | msg.member.send( 100 | `You will no longer be notified when new ${roleCommand?.type} are posted.` 101 | ), 102 | msg.delete(), 103 | ]).catch(e => { 104 | console.error(e) 105 | }) 106 | } 107 | 108 | client.login(process.env.BOT_TOKEN) 109 | -------------------------------------------------------------------------------- /courseCommands.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | command: `javascript-simplified-${process.env.JAVASCRIPT_SIMPLIFIED_COMMAND_NUMBERS}`, 4 | roleId: process.env.JAVASCRIPT_SIMPLIFIED_ROLE_ID, 5 | courseName: "JavaScript Simplified", 6 | }, 7 | { 8 | command: `react-simplified-${process.env.REACT_SIMPLIFIED_COMMAND_NUMBERS}`, 9 | roleId: process.env.REACT_SIMPLIFIED_ROLE_ID, 10 | courseName: "React Simplified", 11 | }, 12 | { 13 | command: `typescript-simplified-${process.env.TYPESCRIPT_SIMPLIFIED_COMMAND_NUMBERS}`, 14 | roleId: process.env.TYPESCRIPT_SIMPLIFIED_ROLE_ID, 15 | courseName: "TypeScript Simplified", 16 | }, 17 | { 18 | command: `css-simplified-${process.env.CSS_SIMPLIFIED_COMMAND_NUMBERS}`, 19 | roleId: process.env.CSS_SIMPLIFIED_ROLE_ID, 20 | courseName: "CSS Simplified", 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wds-discord-bot", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "wds-discord-bot", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "discord.js": "^13.8.1", 13 | "dotenv": "^16.0.1" 14 | }, 15 | "devDependencies": { 16 | "nodemon": "^2.0.19" 17 | } 18 | }, 19 | "node_modules/@discordjs/builders": { 20 | "version": "0.14.0", 21 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.14.0.tgz", 22 | "integrity": "sha512-+fqLIqa9wN3R+kvlld8sgG0nt04BAZxdCDP4t2qZ9TJsquLWA+xMtT8Waibb3d4li4AQS+IOfjiHAznv/dhHgQ==", 23 | "dependencies": { 24 | "@sapphire/shapeshift": "^3.1.0", 25 | "@sindresorhus/is": "^4.6.0", 26 | "discord-api-types": "^0.33.3", 27 | "fast-deep-equal": "^3.1.3", 28 | "ts-mixer": "^6.0.1", 29 | "tslib": "^2.4.0" 30 | }, 31 | "engines": { 32 | "node": ">=16.9.0" 33 | } 34 | }, 35 | "node_modules/@discordjs/collection": { 36 | "version": "0.7.0", 37 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.7.0.tgz", 38 | "integrity": "sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA==", 39 | "engines": { 40 | "node": ">=16.9.0" 41 | } 42 | }, 43 | "node_modules/@sapphire/async-queue": { 44 | "version": "1.3.1", 45 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.3.1.tgz", 46 | "integrity": "sha512-FFTlPOWZX1kDj9xCAsRzH5xEJfawg1lNoYAA+ecOWJMHOfiZYb1uXOI3ne9U4UILSEPwfE68p3T9wUHwIQfR0g==", 47 | "engines": { 48 | "node": ">=v14.0.0", 49 | "npm": ">=7.0.0" 50 | } 51 | }, 52 | "node_modules/@sapphire/shapeshift": { 53 | "version": "3.5.0", 54 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.5.0.tgz", 55 | "integrity": "sha512-r6Iw3ZWgwzWcWDtsPwHKHnc6LCD84AqyXi1IolSS8TGLodTuggYxQ63V+Si5Jb7KVLhMYPCdlwM0HEDHEeZ9Iw==", 56 | "dependencies": { 57 | "fast-deep-equal": "^3.1.3", 58 | "lodash.uniqwith": "^4.5.0" 59 | }, 60 | "engines": { 61 | "node": ">=v14.0.0", 62 | "npm": ">=7.0.0" 63 | } 64 | }, 65 | "node_modules/@sindresorhus/is": { 66 | "version": "4.6.0", 67 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 68 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", 69 | "engines": { 70 | "node": ">=10" 71 | }, 72 | "funding": { 73 | "url": "https://github.com/sindresorhus/is?sponsor=1" 74 | } 75 | }, 76 | "node_modules/@types/node": { 77 | "version": "18.0.4", 78 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.4.tgz", 79 | "integrity": "sha512-M0+G6V0Y4YV8cqzHssZpaNCqvYwlCiulmm0PwpNLF55r/+cT8Ol42CHRU1SEaYFH2rTwiiE1aYg/2g2rrtGdPA==" 80 | }, 81 | "node_modules/@types/node-fetch": { 82 | "version": "2.6.2", 83 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", 84 | "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", 85 | "dependencies": { 86 | "@types/node": "*", 87 | "form-data": "^3.0.0" 88 | } 89 | }, 90 | "node_modules/@types/node-fetch/node_modules/form-data": { 91 | "version": "3.0.1", 92 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 93 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 94 | "dependencies": { 95 | "asynckit": "^0.4.0", 96 | "combined-stream": "^1.0.8", 97 | "mime-types": "^2.1.12" 98 | }, 99 | "engines": { 100 | "node": ">= 6" 101 | } 102 | }, 103 | "node_modules/@types/ws": { 104 | "version": "8.5.3", 105 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", 106 | "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", 107 | "dependencies": { 108 | "@types/node": "*" 109 | } 110 | }, 111 | "node_modules/abbrev": { 112 | "version": "1.1.1", 113 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 114 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 115 | "dev": true 116 | }, 117 | "node_modules/anymatch": { 118 | "version": "3.1.2", 119 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 120 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 121 | "dev": true, 122 | "dependencies": { 123 | "normalize-path": "^3.0.0", 124 | "picomatch": "^2.0.4" 125 | }, 126 | "engines": { 127 | "node": ">= 8" 128 | } 129 | }, 130 | "node_modules/asynckit": { 131 | "version": "0.4.0", 132 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 133 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 134 | }, 135 | "node_modules/balanced-match": { 136 | "version": "1.0.2", 137 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 138 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 139 | "dev": true 140 | }, 141 | "node_modules/binary-extensions": { 142 | "version": "2.2.0", 143 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 144 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 145 | "dev": true, 146 | "engines": { 147 | "node": ">=8" 148 | } 149 | }, 150 | "node_modules/brace-expansion": { 151 | "version": "1.1.11", 152 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 153 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 154 | "dev": true, 155 | "dependencies": { 156 | "balanced-match": "^1.0.0", 157 | "concat-map": "0.0.1" 158 | } 159 | }, 160 | "node_modules/braces": { 161 | "version": "3.0.2", 162 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 163 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 164 | "dev": true, 165 | "dependencies": { 166 | "fill-range": "^7.0.1" 167 | }, 168 | "engines": { 169 | "node": ">=8" 170 | } 171 | }, 172 | "node_modules/chokidar": { 173 | "version": "3.5.2", 174 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", 175 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", 176 | "dev": true, 177 | "dependencies": { 178 | "anymatch": "~3.1.2", 179 | "braces": "~3.0.2", 180 | "glob-parent": "~5.1.2", 181 | "is-binary-path": "~2.1.0", 182 | "is-glob": "~4.0.1", 183 | "normalize-path": "~3.0.0", 184 | "readdirp": "~3.6.0" 185 | }, 186 | "engines": { 187 | "node": ">= 8.10.0" 188 | }, 189 | "optionalDependencies": { 190 | "fsevents": "~2.3.2" 191 | } 192 | }, 193 | "node_modules/combined-stream": { 194 | "version": "1.0.8", 195 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 196 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 197 | "dependencies": { 198 | "delayed-stream": "~1.0.0" 199 | }, 200 | "engines": { 201 | "node": ">= 0.8" 202 | } 203 | }, 204 | "node_modules/concat-map": { 205 | "version": "0.0.1", 206 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 207 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 208 | "dev": true 209 | }, 210 | "node_modules/debug": { 211 | "version": "3.2.7", 212 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 213 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 214 | "dev": true, 215 | "dependencies": { 216 | "ms": "^2.1.1" 217 | } 218 | }, 219 | "node_modules/delayed-stream": { 220 | "version": "1.0.0", 221 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 222 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 223 | "engines": { 224 | "node": ">=0.4.0" 225 | } 226 | }, 227 | "node_modules/discord-api-types": { 228 | "version": "0.33.5", 229 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.33.5.tgz", 230 | "integrity": "sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==" 231 | }, 232 | "node_modules/discord.js": { 233 | "version": "13.8.1", 234 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.8.1.tgz", 235 | "integrity": "sha512-jOsD+4tEZWWx0RHVyH+FBcqoTrsL+d5Mm5p+ULQOdU0qSaxhLNkWYig+yDHNZoND7nlkXX3qi+BW+gO5erWylg==", 236 | "dependencies": { 237 | "@discordjs/builders": "^0.14.0", 238 | "@discordjs/collection": "^0.7.0", 239 | "@sapphire/async-queue": "^1.3.1", 240 | "@types/node-fetch": "^2.6.1", 241 | "@types/ws": "^8.5.3", 242 | "discord-api-types": "^0.33.3", 243 | "form-data": "^4.0.0", 244 | "node-fetch": "^2.6.1", 245 | "ws": "^8.7.0" 246 | }, 247 | "engines": { 248 | "node": ">=16.6.0", 249 | "npm": ">=7.0.0" 250 | } 251 | }, 252 | "node_modules/dotenv": { 253 | "version": "16.0.1", 254 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", 255 | "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", 256 | "engines": { 257 | "node": ">=12" 258 | } 259 | }, 260 | "node_modules/fast-deep-equal": { 261 | "version": "3.1.3", 262 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 263 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 264 | }, 265 | "node_modules/fill-range": { 266 | "version": "7.0.1", 267 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 268 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 269 | "dev": true, 270 | "dependencies": { 271 | "to-regex-range": "^5.0.1" 272 | }, 273 | "engines": { 274 | "node": ">=8" 275 | } 276 | }, 277 | "node_modules/form-data": { 278 | "version": "4.0.0", 279 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 280 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 281 | "dependencies": { 282 | "asynckit": "^0.4.0", 283 | "combined-stream": "^1.0.8", 284 | "mime-types": "^2.1.12" 285 | }, 286 | "engines": { 287 | "node": ">= 6" 288 | } 289 | }, 290 | "node_modules/fsevents": { 291 | "version": "2.3.2", 292 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 293 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 294 | "dev": true, 295 | "hasInstallScript": true, 296 | "optional": true, 297 | "os": [ 298 | "darwin" 299 | ], 300 | "engines": { 301 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 302 | } 303 | }, 304 | "node_modules/glob-parent": { 305 | "version": "5.1.2", 306 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 307 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 308 | "dev": true, 309 | "dependencies": { 310 | "is-glob": "^4.0.1" 311 | }, 312 | "engines": { 313 | "node": ">= 6" 314 | } 315 | }, 316 | "node_modules/has-flag": { 317 | "version": "3.0.0", 318 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 319 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 320 | "dev": true, 321 | "engines": { 322 | "node": ">=4" 323 | } 324 | }, 325 | "node_modules/ignore-by-default": { 326 | "version": "1.0.1", 327 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 328 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", 329 | "dev": true 330 | }, 331 | "node_modules/is-binary-path": { 332 | "version": "2.1.0", 333 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 334 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 335 | "dev": true, 336 | "dependencies": { 337 | "binary-extensions": "^2.0.0" 338 | }, 339 | "engines": { 340 | "node": ">=8" 341 | } 342 | }, 343 | "node_modules/is-extglob": { 344 | "version": "2.1.1", 345 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 346 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 347 | "dev": true, 348 | "engines": { 349 | "node": ">=0.10.0" 350 | } 351 | }, 352 | "node_modules/is-glob": { 353 | "version": "4.0.3", 354 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 355 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 356 | "dev": true, 357 | "dependencies": { 358 | "is-extglob": "^2.1.1" 359 | }, 360 | "engines": { 361 | "node": ">=0.10.0" 362 | } 363 | }, 364 | "node_modules/is-number": { 365 | "version": "7.0.0", 366 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 367 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 368 | "dev": true, 369 | "engines": { 370 | "node": ">=0.12.0" 371 | } 372 | }, 373 | "node_modules/lodash.uniqwith": { 374 | "version": "4.5.0", 375 | "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz", 376 | "integrity": "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==" 377 | }, 378 | "node_modules/mime-db": { 379 | "version": "1.52.0", 380 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 381 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 382 | "engines": { 383 | "node": ">= 0.6" 384 | } 385 | }, 386 | "node_modules/mime-types": { 387 | "version": "2.1.35", 388 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 389 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 390 | "dependencies": { 391 | "mime-db": "1.52.0" 392 | }, 393 | "engines": { 394 | "node": ">= 0.6" 395 | } 396 | }, 397 | "node_modules/minimatch": { 398 | "version": "3.0.4", 399 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 400 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 401 | "dev": true, 402 | "dependencies": { 403 | "brace-expansion": "^1.1.7" 404 | }, 405 | "engines": { 406 | "node": "*" 407 | } 408 | }, 409 | "node_modules/ms": { 410 | "version": "2.1.3", 411 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 412 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 413 | "dev": true 414 | }, 415 | "node_modules/node-fetch": { 416 | "version": "2.6.1", 417 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 418 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 419 | "engines": { 420 | "node": "4.x || >=6.0.0" 421 | } 422 | }, 423 | "node_modules/nodemon": { 424 | "version": "2.0.19", 425 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", 426 | "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", 427 | "dev": true, 428 | "hasInstallScript": true, 429 | "dependencies": { 430 | "chokidar": "^3.5.2", 431 | "debug": "^3.2.7", 432 | "ignore-by-default": "^1.0.1", 433 | "minimatch": "^3.0.4", 434 | "pstree.remy": "^1.1.8", 435 | "semver": "^5.7.1", 436 | "simple-update-notifier": "^1.0.7", 437 | "supports-color": "^5.5.0", 438 | "touch": "^3.1.0", 439 | "undefsafe": "^2.0.5" 440 | }, 441 | "bin": { 442 | "nodemon": "bin/nodemon.js" 443 | }, 444 | "engines": { 445 | "node": ">=8.10.0" 446 | }, 447 | "funding": { 448 | "type": "opencollective", 449 | "url": "https://opencollective.com/nodemon" 450 | } 451 | }, 452 | "node_modules/nopt": { 453 | "version": "1.0.10", 454 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 455 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", 456 | "dev": true, 457 | "dependencies": { 458 | "abbrev": "1" 459 | }, 460 | "bin": { 461 | "nopt": "bin/nopt.js" 462 | }, 463 | "engines": { 464 | "node": "*" 465 | } 466 | }, 467 | "node_modules/normalize-path": { 468 | "version": "3.0.0", 469 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 470 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 471 | "dev": true, 472 | "engines": { 473 | "node": ">=0.10.0" 474 | } 475 | }, 476 | "node_modules/picomatch": { 477 | "version": "2.3.0", 478 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 479 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 480 | "dev": true, 481 | "engines": { 482 | "node": ">=8.6" 483 | }, 484 | "funding": { 485 | "url": "https://github.com/sponsors/jonschlinkert" 486 | } 487 | }, 488 | "node_modules/pstree.remy": { 489 | "version": "1.1.8", 490 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 491 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 492 | "dev": true 493 | }, 494 | "node_modules/readdirp": { 495 | "version": "3.6.0", 496 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 497 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 498 | "dev": true, 499 | "dependencies": { 500 | "picomatch": "^2.2.1" 501 | }, 502 | "engines": { 503 | "node": ">=8.10.0" 504 | } 505 | }, 506 | "node_modules/semver": { 507 | "version": "5.7.1", 508 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 509 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 510 | "dev": true, 511 | "bin": { 512 | "semver": "bin/semver" 513 | } 514 | }, 515 | "node_modules/simple-update-notifier": { 516 | "version": "1.0.7", 517 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", 518 | "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", 519 | "dev": true, 520 | "dependencies": { 521 | "semver": "~7.0.0" 522 | }, 523 | "engines": { 524 | "node": ">=8.10.0" 525 | } 526 | }, 527 | "node_modules/simple-update-notifier/node_modules/semver": { 528 | "version": "7.0.0", 529 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 530 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 531 | "dev": true, 532 | "bin": { 533 | "semver": "bin/semver.js" 534 | } 535 | }, 536 | "node_modules/supports-color": { 537 | "version": "5.5.0", 538 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 539 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 540 | "dev": true, 541 | "dependencies": { 542 | "has-flag": "^3.0.0" 543 | }, 544 | "engines": { 545 | "node": ">=4" 546 | } 547 | }, 548 | "node_modules/to-regex-range": { 549 | "version": "5.0.1", 550 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 551 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 552 | "dev": true, 553 | "dependencies": { 554 | "is-number": "^7.0.0" 555 | }, 556 | "engines": { 557 | "node": ">=8.0" 558 | } 559 | }, 560 | "node_modules/touch": { 561 | "version": "3.1.0", 562 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 563 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 564 | "dev": true, 565 | "dependencies": { 566 | "nopt": "~1.0.10" 567 | }, 568 | "bin": { 569 | "nodetouch": "bin/nodetouch.js" 570 | } 571 | }, 572 | "node_modules/ts-mixer": { 573 | "version": "6.0.1", 574 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", 575 | "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" 576 | }, 577 | "node_modules/tslib": { 578 | "version": "2.4.0", 579 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 580 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" 581 | }, 582 | "node_modules/undefsafe": { 583 | "version": "2.0.5", 584 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 585 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", 586 | "dev": true 587 | }, 588 | "node_modules/ws": { 589 | "version": "8.8.0", 590 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", 591 | "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", 592 | "engines": { 593 | "node": ">=10.0.0" 594 | }, 595 | "peerDependencies": { 596 | "bufferutil": "^4.0.1", 597 | "utf-8-validate": "^5.0.2" 598 | }, 599 | "peerDependenciesMeta": { 600 | "bufferutil": { 601 | "optional": true 602 | }, 603 | "utf-8-validate": { 604 | "optional": true 605 | } 606 | } 607 | } 608 | }, 609 | "dependencies": { 610 | "@discordjs/builders": { 611 | "version": "0.14.0", 612 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.14.0.tgz", 613 | "integrity": "sha512-+fqLIqa9wN3R+kvlld8sgG0nt04BAZxdCDP4t2qZ9TJsquLWA+xMtT8Waibb3d4li4AQS+IOfjiHAznv/dhHgQ==", 614 | "requires": { 615 | "@sapphire/shapeshift": "^3.1.0", 616 | "@sindresorhus/is": "^4.6.0", 617 | "discord-api-types": "^0.33.3", 618 | "fast-deep-equal": "^3.1.3", 619 | "ts-mixer": "^6.0.1", 620 | "tslib": "^2.4.0" 621 | } 622 | }, 623 | "@discordjs/collection": { 624 | "version": "0.7.0", 625 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.7.0.tgz", 626 | "integrity": "sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA==" 627 | }, 628 | "@sapphire/async-queue": { 629 | "version": "1.3.1", 630 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.3.1.tgz", 631 | "integrity": "sha512-FFTlPOWZX1kDj9xCAsRzH5xEJfawg1lNoYAA+ecOWJMHOfiZYb1uXOI3ne9U4UILSEPwfE68p3T9wUHwIQfR0g==" 632 | }, 633 | "@sapphire/shapeshift": { 634 | "version": "3.5.0", 635 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.5.0.tgz", 636 | "integrity": "sha512-r6Iw3ZWgwzWcWDtsPwHKHnc6LCD84AqyXi1IolSS8TGLodTuggYxQ63V+Si5Jb7KVLhMYPCdlwM0HEDHEeZ9Iw==", 637 | "requires": { 638 | "fast-deep-equal": "^3.1.3", 639 | "lodash.uniqwith": "^4.5.0" 640 | } 641 | }, 642 | "@sindresorhus/is": { 643 | "version": "4.6.0", 644 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 645 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" 646 | }, 647 | "@types/node": { 648 | "version": "18.0.4", 649 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.4.tgz", 650 | "integrity": "sha512-M0+G6V0Y4YV8cqzHssZpaNCqvYwlCiulmm0PwpNLF55r/+cT8Ol42CHRU1SEaYFH2rTwiiE1aYg/2g2rrtGdPA==" 651 | }, 652 | "@types/node-fetch": { 653 | "version": "2.6.2", 654 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", 655 | "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", 656 | "requires": { 657 | "@types/node": "*", 658 | "form-data": "^3.0.0" 659 | }, 660 | "dependencies": { 661 | "form-data": { 662 | "version": "3.0.1", 663 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 664 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 665 | "requires": { 666 | "asynckit": "^0.4.0", 667 | "combined-stream": "^1.0.8", 668 | "mime-types": "^2.1.12" 669 | } 670 | } 671 | } 672 | }, 673 | "@types/ws": { 674 | "version": "8.5.3", 675 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", 676 | "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", 677 | "requires": { 678 | "@types/node": "*" 679 | } 680 | }, 681 | "abbrev": { 682 | "version": "1.1.1", 683 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 684 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 685 | "dev": true 686 | }, 687 | "anymatch": { 688 | "version": "3.1.2", 689 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 690 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 691 | "dev": true, 692 | "requires": { 693 | "normalize-path": "^3.0.0", 694 | "picomatch": "^2.0.4" 695 | } 696 | }, 697 | "asynckit": { 698 | "version": "0.4.0", 699 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 700 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 701 | }, 702 | "balanced-match": { 703 | "version": "1.0.2", 704 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 705 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 706 | "dev": true 707 | }, 708 | "binary-extensions": { 709 | "version": "2.2.0", 710 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 711 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 712 | "dev": true 713 | }, 714 | "brace-expansion": { 715 | "version": "1.1.11", 716 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 717 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 718 | "dev": true, 719 | "requires": { 720 | "balanced-match": "^1.0.0", 721 | "concat-map": "0.0.1" 722 | } 723 | }, 724 | "braces": { 725 | "version": "3.0.2", 726 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 727 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 728 | "dev": true, 729 | "requires": { 730 | "fill-range": "^7.0.1" 731 | } 732 | }, 733 | "chokidar": { 734 | "version": "3.5.2", 735 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", 736 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", 737 | "dev": true, 738 | "requires": { 739 | "anymatch": "~3.1.2", 740 | "braces": "~3.0.2", 741 | "fsevents": "~2.3.2", 742 | "glob-parent": "~5.1.2", 743 | "is-binary-path": "~2.1.0", 744 | "is-glob": "~4.0.1", 745 | "normalize-path": "~3.0.0", 746 | "readdirp": "~3.6.0" 747 | } 748 | }, 749 | "combined-stream": { 750 | "version": "1.0.8", 751 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 752 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 753 | "requires": { 754 | "delayed-stream": "~1.0.0" 755 | } 756 | }, 757 | "concat-map": { 758 | "version": "0.0.1", 759 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 760 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 761 | "dev": true 762 | }, 763 | "debug": { 764 | "version": "3.2.7", 765 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 766 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 767 | "dev": true, 768 | "requires": { 769 | "ms": "^2.1.1" 770 | } 771 | }, 772 | "delayed-stream": { 773 | "version": "1.0.0", 774 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 775 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" 776 | }, 777 | "discord-api-types": { 778 | "version": "0.33.5", 779 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.33.5.tgz", 780 | "integrity": "sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==" 781 | }, 782 | "discord.js": { 783 | "version": "13.8.1", 784 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.8.1.tgz", 785 | "integrity": "sha512-jOsD+4tEZWWx0RHVyH+FBcqoTrsL+d5Mm5p+ULQOdU0qSaxhLNkWYig+yDHNZoND7nlkXX3qi+BW+gO5erWylg==", 786 | "requires": { 787 | "@discordjs/builders": "^0.14.0", 788 | "@discordjs/collection": "^0.7.0", 789 | "@sapphire/async-queue": "^1.3.1", 790 | "@types/node-fetch": "^2.6.1", 791 | "@types/ws": "^8.5.3", 792 | "discord-api-types": "^0.33.3", 793 | "form-data": "^4.0.0", 794 | "node-fetch": "^2.6.1", 795 | "ws": "^8.7.0" 796 | } 797 | }, 798 | "dotenv": { 799 | "version": "16.0.1", 800 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", 801 | "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" 802 | }, 803 | "fast-deep-equal": { 804 | "version": "3.1.3", 805 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 806 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 807 | }, 808 | "fill-range": { 809 | "version": "7.0.1", 810 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 811 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 812 | "dev": true, 813 | "requires": { 814 | "to-regex-range": "^5.0.1" 815 | } 816 | }, 817 | "form-data": { 818 | "version": "4.0.0", 819 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 820 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 821 | "requires": { 822 | "asynckit": "^0.4.0", 823 | "combined-stream": "^1.0.8", 824 | "mime-types": "^2.1.12" 825 | } 826 | }, 827 | "fsevents": { 828 | "version": "2.3.2", 829 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 830 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 831 | "dev": true, 832 | "optional": true 833 | }, 834 | "glob-parent": { 835 | "version": "5.1.2", 836 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 837 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 838 | "dev": true, 839 | "requires": { 840 | "is-glob": "^4.0.1" 841 | } 842 | }, 843 | "has-flag": { 844 | "version": "3.0.0", 845 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 846 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 847 | "dev": true 848 | }, 849 | "ignore-by-default": { 850 | "version": "1.0.1", 851 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 852 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", 853 | "dev": true 854 | }, 855 | "is-binary-path": { 856 | "version": "2.1.0", 857 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 858 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 859 | "dev": true, 860 | "requires": { 861 | "binary-extensions": "^2.0.0" 862 | } 863 | }, 864 | "is-extglob": { 865 | "version": "2.1.1", 866 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 867 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 868 | "dev": true 869 | }, 870 | "is-glob": { 871 | "version": "4.0.3", 872 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 873 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 874 | "dev": true, 875 | "requires": { 876 | "is-extglob": "^2.1.1" 877 | } 878 | }, 879 | "is-number": { 880 | "version": "7.0.0", 881 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 882 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 883 | "dev": true 884 | }, 885 | "lodash.uniqwith": { 886 | "version": "4.5.0", 887 | "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz", 888 | "integrity": "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==" 889 | }, 890 | "mime-db": { 891 | "version": "1.52.0", 892 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 893 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 894 | }, 895 | "mime-types": { 896 | "version": "2.1.35", 897 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 898 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 899 | "requires": { 900 | "mime-db": "1.52.0" 901 | } 902 | }, 903 | "minimatch": { 904 | "version": "3.0.4", 905 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 906 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 907 | "dev": true, 908 | "requires": { 909 | "brace-expansion": "^1.1.7" 910 | } 911 | }, 912 | "ms": { 913 | "version": "2.1.3", 914 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 915 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 916 | "dev": true 917 | }, 918 | "node-fetch": { 919 | "version": "2.6.1", 920 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 921 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 922 | }, 923 | "nodemon": { 924 | "version": "2.0.19", 925 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", 926 | "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", 927 | "dev": true, 928 | "requires": { 929 | "chokidar": "^3.5.2", 930 | "debug": "^3.2.7", 931 | "ignore-by-default": "^1.0.1", 932 | "minimatch": "^3.0.4", 933 | "pstree.remy": "^1.1.8", 934 | "semver": "^5.7.1", 935 | "simple-update-notifier": "^1.0.7", 936 | "supports-color": "^5.5.0", 937 | "touch": "^3.1.0", 938 | "undefsafe": "^2.0.5" 939 | } 940 | }, 941 | "nopt": { 942 | "version": "1.0.10", 943 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 944 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", 945 | "dev": true, 946 | "requires": { 947 | "abbrev": "1" 948 | } 949 | }, 950 | "normalize-path": { 951 | "version": "3.0.0", 952 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 953 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 954 | "dev": true 955 | }, 956 | "picomatch": { 957 | "version": "2.3.0", 958 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 959 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 960 | "dev": true 961 | }, 962 | "pstree.remy": { 963 | "version": "1.1.8", 964 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 965 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 966 | "dev": true 967 | }, 968 | "readdirp": { 969 | "version": "3.6.0", 970 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 971 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 972 | "dev": true, 973 | "requires": { 974 | "picomatch": "^2.2.1" 975 | } 976 | }, 977 | "semver": { 978 | "version": "5.7.1", 979 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 980 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 981 | "dev": true 982 | }, 983 | "simple-update-notifier": { 984 | "version": "1.0.7", 985 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", 986 | "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", 987 | "dev": true, 988 | "requires": { 989 | "semver": "~7.0.0" 990 | }, 991 | "dependencies": { 992 | "semver": { 993 | "version": "7.0.0", 994 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 995 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 996 | "dev": true 997 | } 998 | } 999 | }, 1000 | "supports-color": { 1001 | "version": "5.5.0", 1002 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1003 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1004 | "dev": true, 1005 | "requires": { 1006 | "has-flag": "^3.0.0" 1007 | } 1008 | }, 1009 | "to-regex-range": { 1010 | "version": "5.0.1", 1011 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1012 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1013 | "dev": true, 1014 | "requires": { 1015 | "is-number": "^7.0.0" 1016 | } 1017 | }, 1018 | "touch": { 1019 | "version": "3.1.0", 1020 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 1021 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 1022 | "dev": true, 1023 | "requires": { 1024 | "nopt": "~1.0.10" 1025 | } 1026 | }, 1027 | "ts-mixer": { 1028 | "version": "6.0.1", 1029 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", 1030 | "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" 1031 | }, 1032 | "tslib": { 1033 | "version": "2.4.0", 1034 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 1035 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" 1036 | }, 1037 | "undefsafe": { 1038 | "version": "2.0.5", 1039 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 1040 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", 1041 | "dev": true 1042 | }, 1043 | "ws": { 1044 | "version": "8.8.0", 1045 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", 1046 | "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", 1047 | "requires": {} 1048 | } 1049 | } 1050 | } 1051 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wds-discord-bot", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "bot.js", 6 | "scripts": { 7 | "start": "node bot.js", 8 | "dev": "nodemon bot.js" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "discord.js": "^13.8.1", 15 | "dotenv": "^16.0.1" 16 | }, 17 | "devDependencies": { 18 | "nodemon": "^2.0.19" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /roleCommands.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | command: `video-notification`, 4 | roleId: process.env.VIDEO_NOTIFICATION_ROLE_ID, 5 | type: "videos", 6 | }, 7 | { 8 | command: `event-notification`, 9 | roleId: process.env.EVENT_NOTIFICATION_ROLE_ID, 10 | type: "events", 11 | }, 12 | ] 13 | --------------------------------------------------------------------------------