├── .gitignore ├── package-lock.json ├── package.json ├── readme.md ├── renovate.json └── src ├── SlashCommands ├── Info │ └── help.js └── Sheets │ ├── add.js │ ├── check.js │ ├── list.js │ └── remove.js ├── events ├── client │ └── ready.js └── guild │ └── slashCommands.js ├── handlers ├── loadEvents.js └── loadSlashCommands.js ├── index.js └── jsons └── config.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-sheets", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "discord-sheets", 9 | "version": "1.0.0", 10 | "license": "GPL-3.0", 11 | "dependencies": { 12 | "ascii-table": "^0.0.9", 13 | "chalk": "^4.1.2", 14 | "discord.js": "^13.3.1", 15 | "fs": "^0.0.1-security", 16 | "googleapis": "^100.0.0" 17 | } 18 | }, 19 | "node_modules/@discordjs/builders": { 20 | "version": "0.8.2", 21 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", 22 | "integrity": "sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==", 23 | "dependencies": { 24 | "@sindresorhus/is": "^4.2.0", 25 | "discord-api-types": "^0.24.0", 26 | "ow": "^0.27.0", 27 | "ts-mixer": "^6.0.0", 28 | "tslib": "^2.3.1" 29 | }, 30 | "engines": { 31 | "node": ">=16.0.0", 32 | "npm": ">=7.0.0" 33 | } 34 | }, 35 | "node_modules/@discordjs/collection": { 36 | "version": "0.3.2", 37 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.3.2.tgz", 38 | "integrity": "sha512-dMjLl60b2DMqObbH1MQZKePgWhsNe49XkKBZ0W5Acl5uVV43SN414i2QfZwRI7dXAqIn8pEWD2+XXQFn9KWxqg==", 39 | "engines": { 40 | "node": ">=16.0.0", 41 | "npm": ">=7.0.0" 42 | } 43 | }, 44 | "node_modules/@discordjs/form-data": { 45 | "version": "3.0.1", 46 | "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", 47 | "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", 48 | "dependencies": { 49 | "asynckit": "^0.4.0", 50 | "combined-stream": "^1.0.8", 51 | "mime-types": "^2.1.12" 52 | }, 53 | "engines": { 54 | "node": ">= 6" 55 | } 56 | }, 57 | "node_modules/@sapphire/async-queue": { 58 | "version": "1.1.9", 59 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.9.tgz", 60 | "integrity": "sha512-CbXaGwwlEMq+l1TRu01FJCvySJ1CEFKFclHT48nIfNeZXaAAmmwwy7scUKmYHPUa3GhoMp6Qr1B3eAJux6XgOQ==", 61 | "engines": { 62 | "node": ">=v14.0.0", 63 | "npm": ">=7.0.0" 64 | } 65 | }, 66 | "node_modules/@sindresorhus/is": { 67 | "version": "4.2.0", 68 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", 69 | "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", 70 | "engines": { 71 | "node": ">=10" 72 | }, 73 | "funding": { 74 | "url": "https://github.com/sindresorhus/is?sponsor=1" 75 | } 76 | }, 77 | "node_modules/@types/node": { 78 | "version": "16.11.7", 79 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", 80 | "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" 81 | }, 82 | "node_modules/@types/node-fetch": { 83 | "version": "2.5.12", 84 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", 85 | "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", 86 | "dependencies": { 87 | "@types/node": "*", 88 | "form-data": "^3.0.0" 89 | } 90 | }, 91 | "node_modules/@types/ws": { 92 | "version": "8.2.0", 93 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", 94 | "integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==", 95 | "dependencies": { 96 | "@types/node": "*" 97 | } 98 | }, 99 | "node_modules/abort-controller": { 100 | "version": "3.0.0", 101 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 102 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 103 | "dependencies": { 104 | "event-target-shim": "^5.0.0" 105 | }, 106 | "engines": { 107 | "node": ">=6.5" 108 | } 109 | }, 110 | "node_modules/agent-base": { 111 | "version": "6.0.2", 112 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 113 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 114 | "dependencies": { 115 | "debug": "4" 116 | }, 117 | "engines": { 118 | "node": ">= 6.0.0" 119 | } 120 | }, 121 | "node_modules/ansi-styles": { 122 | "version": "4.3.0", 123 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 124 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 125 | "dependencies": { 126 | "color-convert": "^2.0.1" 127 | }, 128 | "engines": { 129 | "node": ">=8" 130 | }, 131 | "funding": { 132 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 133 | } 134 | }, 135 | "node_modules/arrify": { 136 | "version": "2.0.1", 137 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", 138 | "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", 139 | "engines": { 140 | "node": ">=8" 141 | } 142 | }, 143 | "node_modules/ascii-table": { 144 | "version": "0.0.9", 145 | "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", 146 | "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=" 147 | }, 148 | "node_modules/asynckit": { 149 | "version": "0.4.0", 150 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 151 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 152 | }, 153 | "node_modules/base64-js": { 154 | "version": "1.5.1", 155 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 156 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 157 | "funding": [ 158 | { 159 | "type": "github", 160 | "url": "https://github.com/sponsors/feross" 161 | }, 162 | { 163 | "type": "patreon", 164 | "url": "https://www.patreon.com/feross" 165 | }, 166 | { 167 | "type": "consulting", 168 | "url": "https://feross.org/support" 169 | } 170 | ] 171 | }, 172 | "node_modules/bignumber.js": { 173 | "version": "9.0.1", 174 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", 175 | "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", 176 | "engines": { 177 | "node": "*" 178 | } 179 | }, 180 | "node_modules/buffer-equal-constant-time": { 181 | "version": "1.0.1", 182 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 183 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 184 | }, 185 | "node_modules/call-bind": { 186 | "version": "1.0.2", 187 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 188 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 189 | "dependencies": { 190 | "function-bind": "^1.1.1", 191 | "get-intrinsic": "^1.0.2" 192 | }, 193 | "funding": { 194 | "url": "https://github.com/sponsors/ljharb" 195 | } 196 | }, 197 | "node_modules/callsites": { 198 | "version": "3.1.0", 199 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 200 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 201 | "engines": { 202 | "node": ">=6" 203 | } 204 | }, 205 | "node_modules/chalk": { 206 | "version": "4.1.2", 207 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 208 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 209 | "dependencies": { 210 | "ansi-styles": "^4.1.0", 211 | "supports-color": "^7.1.0" 212 | }, 213 | "engines": { 214 | "node": ">=10" 215 | }, 216 | "funding": { 217 | "url": "https://github.com/chalk/chalk?sponsor=1" 218 | } 219 | }, 220 | "node_modules/color-convert": { 221 | "version": "2.0.1", 222 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 223 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 224 | "dependencies": { 225 | "color-name": "~1.1.4" 226 | }, 227 | "engines": { 228 | "node": ">=7.0.0" 229 | } 230 | }, 231 | "node_modules/color-name": { 232 | "version": "1.1.4", 233 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 234 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 235 | }, 236 | "node_modules/combined-stream": { 237 | "version": "1.0.8", 238 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 239 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 240 | "dependencies": { 241 | "delayed-stream": "~1.0.0" 242 | }, 243 | "engines": { 244 | "node": ">= 0.8" 245 | } 246 | }, 247 | "node_modules/debug": { 248 | "version": "4.3.2", 249 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 250 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 251 | "dependencies": { 252 | "ms": "2.1.2" 253 | }, 254 | "engines": { 255 | "node": ">=6.0" 256 | }, 257 | "peerDependenciesMeta": { 258 | "supports-color": { 259 | "optional": true 260 | } 261 | } 262 | }, 263 | "node_modules/delayed-stream": { 264 | "version": "1.0.0", 265 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 266 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 267 | "engines": { 268 | "node": ">=0.4.0" 269 | } 270 | }, 271 | "node_modules/discord-api-types": { 272 | "version": "0.24.0", 273 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.24.0.tgz", 274 | "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==", 275 | "engines": { 276 | "node": ">=12" 277 | } 278 | }, 279 | "node_modules/discord.js": { 280 | "version": "13.3.1", 281 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.3.1.tgz", 282 | "integrity": "sha512-zn4G8tL5+tMV00+0aSsVYNYcIfMSdT2g0nudKny+Ikd+XKv7m6bqI7n3Vji0GIRqXDr5ArPaw+iYFM2I1Iw3vg==", 283 | "dependencies": { 284 | "@discordjs/builders": "^0.8.1", 285 | "@discordjs/collection": "^0.3.2", 286 | "@discordjs/form-data": "^3.0.1", 287 | "@sapphire/async-queue": "^1.1.8", 288 | "@types/node-fetch": "^2.5.12", 289 | "@types/ws": "^8.2.0", 290 | "discord-api-types": "^0.24.0", 291 | "node-fetch": "^2.6.1", 292 | "ws": "^8.2.3" 293 | }, 294 | "engines": { 295 | "node": ">=16.6.0", 296 | "npm": ">=7.0.0" 297 | } 298 | }, 299 | "node_modules/dot-prop": { 300 | "version": "6.0.1", 301 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", 302 | "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", 303 | "dependencies": { 304 | "is-obj": "^2.0.0" 305 | }, 306 | "engines": { 307 | "node": ">=10" 308 | }, 309 | "funding": { 310 | "url": "https://github.com/sponsors/sindresorhus" 311 | } 312 | }, 313 | "node_modules/ecdsa-sig-formatter": { 314 | "version": "1.0.11", 315 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 316 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 317 | "dependencies": { 318 | "safe-buffer": "^5.0.1" 319 | } 320 | }, 321 | "node_modules/event-target-shim": { 322 | "version": "5.0.1", 323 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 324 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 325 | "engines": { 326 | "node": ">=6" 327 | } 328 | }, 329 | "node_modules/extend": { 330 | "version": "3.0.2", 331 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 332 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 333 | }, 334 | "node_modules/fast-text-encoding": { 335 | "version": "1.0.3", 336 | "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", 337 | "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" 338 | }, 339 | "node_modules/form-data": { 340 | "version": "3.0.1", 341 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 342 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 343 | "dependencies": { 344 | "asynckit": "^0.4.0", 345 | "combined-stream": "^1.0.8", 346 | "mime-types": "^2.1.12" 347 | }, 348 | "engines": { 349 | "node": ">= 6" 350 | } 351 | }, 352 | "node_modules/fs": { 353 | "version": "0.0.1-security", 354 | "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", 355 | "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" 356 | }, 357 | "node_modules/function-bind": { 358 | "version": "1.1.1", 359 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 360 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 361 | }, 362 | "node_modules/gaxios": { 363 | "version": "4.3.2", 364 | "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz", 365 | "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==", 366 | "dependencies": { 367 | "abort-controller": "^3.0.0", 368 | "extend": "^3.0.2", 369 | "https-proxy-agent": "^5.0.0", 370 | "is-stream": "^2.0.0", 371 | "node-fetch": "^2.6.1" 372 | }, 373 | "engines": { 374 | "node": ">=10" 375 | } 376 | }, 377 | "node_modules/gcp-metadata": { 378 | "version": "4.3.1", 379 | "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", 380 | "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", 381 | "dependencies": { 382 | "gaxios": "^4.0.0", 383 | "json-bigint": "^1.0.0" 384 | }, 385 | "engines": { 386 | "node": ">=10" 387 | } 388 | }, 389 | "node_modules/get-intrinsic": { 390 | "version": "1.1.1", 391 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 392 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 393 | "dependencies": { 394 | "function-bind": "^1.1.1", 395 | "has": "^1.0.3", 396 | "has-symbols": "^1.0.1" 397 | }, 398 | "funding": { 399 | "url": "https://github.com/sponsors/ljharb" 400 | } 401 | }, 402 | "node_modules/google-auth-library": { 403 | "version": "7.10.2", 404 | "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.2.tgz", 405 | "integrity": "sha512-M37o9Kxa/TLvOLgF71SXvLeVEP5sbSTmKl1zlIgl72SFy5PtsU3pOdu8G8MIHHpQ3/NZabDI8rQkA9DvQVKkPA==", 406 | "dependencies": { 407 | "arrify": "^2.0.0", 408 | "base64-js": "^1.3.0", 409 | "ecdsa-sig-formatter": "^1.0.11", 410 | "fast-text-encoding": "^1.0.0", 411 | "gaxios": "^4.0.0", 412 | "gcp-metadata": "^4.2.0", 413 | "gtoken": "^5.0.4", 414 | "jws": "^4.0.0", 415 | "lru-cache": "^6.0.0" 416 | }, 417 | "engines": { 418 | "node": ">=10" 419 | } 420 | }, 421 | "node_modules/google-p12-pem": { 422 | "version": "3.1.2", 423 | "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz", 424 | "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==", 425 | "dependencies": { 426 | "node-forge": "^0.10.0" 427 | }, 428 | "bin": { 429 | "gp12-pem": "build/src/bin/gp12-pem.js" 430 | }, 431 | "engines": { 432 | "node": ">=10" 433 | } 434 | }, 435 | "node_modules/googleapis": { 436 | "version": "100.0.0", 437 | "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-100.0.0.tgz", 438 | "integrity": "sha512-RToFQGY54B756IDbjdyjb1vWFmn03bYpXHB2lIf0eq2UBYsIbYOLZ0kqSomfJnpclEukwEmMF7Jn6Wsev871ew==", 439 | "dependencies": { 440 | "google-auth-library": "^7.0.2", 441 | "googleapis-common": "^5.0.2" 442 | }, 443 | "engines": { 444 | "node": ">=10" 445 | } 446 | }, 447 | "node_modules/googleapis-common": { 448 | "version": "5.0.5", 449 | "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.0.5.tgz", 450 | "integrity": "sha512-o2dgoW4x4fLIAN+IVAOccz3mEH8Lj1LP9c9BSSvkNJEn+U7UZh0WSr4fdH08x5VH7+sstIpd1lOYFZD0g7j4pw==", 451 | "dependencies": { 452 | "extend": "^3.0.2", 453 | "gaxios": "^4.0.0", 454 | "google-auth-library": "^7.0.2", 455 | "qs": "^6.7.0", 456 | "url-template": "^2.0.8", 457 | "uuid": "^8.0.0" 458 | }, 459 | "engines": { 460 | "node": ">=10.10.0" 461 | } 462 | }, 463 | "node_modules/gtoken": { 464 | "version": "5.3.1", 465 | "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", 466 | "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==", 467 | "dependencies": { 468 | "gaxios": "^4.0.0", 469 | "google-p12-pem": "^3.0.3", 470 | "jws": "^4.0.0" 471 | }, 472 | "engines": { 473 | "node": ">=10" 474 | } 475 | }, 476 | "node_modules/has": { 477 | "version": "1.0.3", 478 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 479 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 480 | "dependencies": { 481 | "function-bind": "^1.1.1" 482 | }, 483 | "engines": { 484 | "node": ">= 0.4.0" 485 | } 486 | }, 487 | "node_modules/has-flag": { 488 | "version": "4.0.0", 489 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 490 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 491 | "engines": { 492 | "node": ">=8" 493 | } 494 | }, 495 | "node_modules/has-symbols": { 496 | "version": "1.0.2", 497 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 498 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 499 | "engines": { 500 | "node": ">= 0.4" 501 | }, 502 | "funding": { 503 | "url": "https://github.com/sponsors/ljharb" 504 | } 505 | }, 506 | "node_modules/https-proxy-agent": { 507 | "version": "5.0.0", 508 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 509 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 510 | "dependencies": { 511 | "agent-base": "6", 512 | "debug": "4" 513 | }, 514 | "engines": { 515 | "node": ">= 6" 516 | } 517 | }, 518 | "node_modules/is-obj": { 519 | "version": "2.0.0", 520 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 521 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 522 | "engines": { 523 | "node": ">=8" 524 | } 525 | }, 526 | "node_modules/is-stream": { 527 | "version": "2.0.1", 528 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 529 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 530 | "engines": { 531 | "node": ">=8" 532 | }, 533 | "funding": { 534 | "url": "https://github.com/sponsors/sindresorhus" 535 | } 536 | }, 537 | "node_modules/json-bigint": { 538 | "version": "1.0.0", 539 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", 540 | "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", 541 | "dependencies": { 542 | "bignumber.js": "^9.0.0" 543 | } 544 | }, 545 | "node_modules/jwa": { 546 | "version": "2.0.0", 547 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", 548 | "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", 549 | "dependencies": { 550 | "buffer-equal-constant-time": "1.0.1", 551 | "ecdsa-sig-formatter": "1.0.11", 552 | "safe-buffer": "^5.0.1" 553 | } 554 | }, 555 | "node_modules/jws": { 556 | "version": "4.0.0", 557 | "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", 558 | "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", 559 | "dependencies": { 560 | "jwa": "^2.0.0", 561 | "safe-buffer": "^5.0.1" 562 | } 563 | }, 564 | "node_modules/lodash.isequal": { 565 | "version": "4.5.0", 566 | "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 567 | "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" 568 | }, 569 | "node_modules/lru-cache": { 570 | "version": "6.0.0", 571 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 572 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 573 | "dependencies": { 574 | "yallist": "^4.0.0" 575 | }, 576 | "engines": { 577 | "node": ">=10" 578 | } 579 | }, 580 | "node_modules/mime-db": { 581 | "version": "1.51.0", 582 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", 583 | "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", 584 | "engines": { 585 | "node": ">= 0.6" 586 | } 587 | }, 588 | "node_modules/mime-types": { 589 | "version": "2.1.34", 590 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", 591 | "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", 592 | "dependencies": { 593 | "mime-db": "1.51.0" 594 | }, 595 | "engines": { 596 | "node": ">= 0.6" 597 | } 598 | }, 599 | "node_modules/ms": { 600 | "version": "2.1.2", 601 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 602 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 603 | }, 604 | "node_modules/node-fetch": { 605 | "version": "2.6.6", 606 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", 607 | "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", 608 | "dependencies": { 609 | "whatwg-url": "^5.0.0" 610 | }, 611 | "engines": { 612 | "node": "4.x || >=6.0.0" 613 | } 614 | }, 615 | "node_modules/node-forge": { 616 | "version": "0.10.0", 617 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", 618 | "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", 619 | "engines": { 620 | "node": ">= 6.0.0" 621 | } 622 | }, 623 | "node_modules/object-inspect": { 624 | "version": "1.11.0", 625 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", 626 | "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", 627 | "funding": { 628 | "url": "https://github.com/sponsors/ljharb" 629 | } 630 | }, 631 | "node_modules/ow": { 632 | "version": "0.27.0", 633 | "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", 634 | "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", 635 | "dependencies": { 636 | "@sindresorhus/is": "^4.0.1", 637 | "callsites": "^3.1.0", 638 | "dot-prop": "^6.0.1", 639 | "lodash.isequal": "^4.5.0", 640 | "type-fest": "^1.2.1", 641 | "vali-date": "^1.0.0" 642 | }, 643 | "engines": { 644 | "node": ">=12" 645 | }, 646 | "funding": { 647 | "url": "https://github.com/sponsors/sindresorhus" 648 | } 649 | }, 650 | "node_modules/qs": { 651 | "version": "6.10.1", 652 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", 653 | "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", 654 | "dependencies": { 655 | "side-channel": "^1.0.4" 656 | }, 657 | "engines": { 658 | "node": ">=0.6" 659 | }, 660 | "funding": { 661 | "url": "https://github.com/sponsors/ljharb" 662 | } 663 | }, 664 | "node_modules/safe-buffer": { 665 | "version": "5.2.1", 666 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 667 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 668 | "funding": [ 669 | { 670 | "type": "github", 671 | "url": "https://github.com/sponsors/feross" 672 | }, 673 | { 674 | "type": "patreon", 675 | "url": "https://www.patreon.com/feross" 676 | }, 677 | { 678 | "type": "consulting", 679 | "url": "https://feross.org/support" 680 | } 681 | ] 682 | }, 683 | "node_modules/side-channel": { 684 | "version": "1.0.4", 685 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 686 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 687 | "dependencies": { 688 | "call-bind": "^1.0.0", 689 | "get-intrinsic": "^1.0.2", 690 | "object-inspect": "^1.9.0" 691 | }, 692 | "funding": { 693 | "url": "https://github.com/sponsors/ljharb" 694 | } 695 | }, 696 | "node_modules/supports-color": { 697 | "version": "7.2.0", 698 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 699 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 700 | "dependencies": { 701 | "has-flag": "^4.0.0" 702 | }, 703 | "engines": { 704 | "node": ">=8" 705 | } 706 | }, 707 | "node_modules/tr46": { 708 | "version": "0.0.3", 709 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 710 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" 711 | }, 712 | "node_modules/ts-mixer": { 713 | "version": "6.0.0", 714 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", 715 | "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" 716 | }, 717 | "node_modules/tslib": { 718 | "version": "2.3.1", 719 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", 720 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" 721 | }, 722 | "node_modules/type-fest": { 723 | "version": "1.4.0", 724 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", 725 | "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", 726 | "engines": { 727 | "node": ">=10" 728 | }, 729 | "funding": { 730 | "url": "https://github.com/sponsors/sindresorhus" 731 | } 732 | }, 733 | "node_modules/url-template": { 734 | "version": "2.0.8", 735 | "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", 736 | "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" 737 | }, 738 | "node_modules/uuid": { 739 | "version": "8.3.2", 740 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 741 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 742 | "bin": { 743 | "uuid": "dist/bin/uuid" 744 | } 745 | }, 746 | "node_modules/vali-date": { 747 | "version": "1.0.0", 748 | "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", 749 | "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", 750 | "engines": { 751 | "node": ">=0.10.0" 752 | } 753 | }, 754 | "node_modules/webidl-conversions": { 755 | "version": "3.0.1", 756 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 757 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" 758 | }, 759 | "node_modules/whatwg-url": { 760 | "version": "5.0.0", 761 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 762 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", 763 | "dependencies": { 764 | "tr46": "~0.0.3", 765 | "webidl-conversions": "^3.0.0" 766 | } 767 | }, 768 | "node_modules/ws": { 769 | "version": "8.2.3", 770 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", 771 | "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", 772 | "engines": { 773 | "node": ">=10.0.0" 774 | }, 775 | "peerDependencies": { 776 | "bufferutil": "^4.0.1", 777 | "utf-8-validate": "^5.0.2" 778 | }, 779 | "peerDependenciesMeta": { 780 | "bufferutil": { 781 | "optional": true 782 | }, 783 | "utf-8-validate": { 784 | "optional": true 785 | } 786 | } 787 | }, 788 | "node_modules/yallist": { 789 | "version": "4.0.0", 790 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 791 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 792 | } 793 | }, 794 | "dependencies": { 795 | "@discordjs/builders": { 796 | "version": "0.8.2", 797 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", 798 | "integrity": "sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==", 799 | "requires": { 800 | "@sindresorhus/is": "^4.2.0", 801 | "discord-api-types": "^0.24.0", 802 | "ow": "^0.27.0", 803 | "ts-mixer": "^6.0.0", 804 | "tslib": "^2.3.1" 805 | } 806 | }, 807 | "@discordjs/collection": { 808 | "version": "0.3.2", 809 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.3.2.tgz", 810 | "integrity": "sha512-dMjLl60b2DMqObbH1MQZKePgWhsNe49XkKBZ0W5Acl5uVV43SN414i2QfZwRI7dXAqIn8pEWD2+XXQFn9KWxqg==" 811 | }, 812 | "@discordjs/form-data": { 813 | "version": "3.0.1", 814 | "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", 815 | "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", 816 | "requires": { 817 | "asynckit": "^0.4.0", 818 | "combined-stream": "^1.0.8", 819 | "mime-types": "^2.1.12" 820 | } 821 | }, 822 | "@sapphire/async-queue": { 823 | "version": "1.1.9", 824 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.9.tgz", 825 | "integrity": "sha512-CbXaGwwlEMq+l1TRu01FJCvySJ1CEFKFclHT48nIfNeZXaAAmmwwy7scUKmYHPUa3GhoMp6Qr1B3eAJux6XgOQ==" 826 | }, 827 | "@sindresorhus/is": { 828 | "version": "4.2.0", 829 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", 830 | "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" 831 | }, 832 | "@types/node": { 833 | "version": "16.11.7", 834 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", 835 | "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" 836 | }, 837 | "@types/node-fetch": { 838 | "version": "2.5.12", 839 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", 840 | "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", 841 | "requires": { 842 | "@types/node": "*", 843 | "form-data": "^3.0.0" 844 | } 845 | }, 846 | "@types/ws": { 847 | "version": "8.2.0", 848 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", 849 | "integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==", 850 | "requires": { 851 | "@types/node": "*" 852 | } 853 | }, 854 | "abort-controller": { 855 | "version": "3.0.0", 856 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 857 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 858 | "requires": { 859 | "event-target-shim": "^5.0.0" 860 | } 861 | }, 862 | "agent-base": { 863 | "version": "6.0.2", 864 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 865 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 866 | "requires": { 867 | "debug": "4" 868 | } 869 | }, 870 | "ansi-styles": { 871 | "version": "4.3.0", 872 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 873 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 874 | "requires": { 875 | "color-convert": "^2.0.1" 876 | } 877 | }, 878 | "arrify": { 879 | "version": "2.0.1", 880 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", 881 | "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" 882 | }, 883 | "ascii-table": { 884 | "version": "0.0.9", 885 | "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", 886 | "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=" 887 | }, 888 | "asynckit": { 889 | "version": "0.4.0", 890 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 891 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 892 | }, 893 | "base64-js": { 894 | "version": "1.5.1", 895 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 896 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 897 | }, 898 | "bignumber.js": { 899 | "version": "9.0.1", 900 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", 901 | "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" 902 | }, 903 | "buffer-equal-constant-time": { 904 | "version": "1.0.1", 905 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 906 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 907 | }, 908 | "call-bind": { 909 | "version": "1.0.2", 910 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 911 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 912 | "requires": { 913 | "function-bind": "^1.1.1", 914 | "get-intrinsic": "^1.0.2" 915 | } 916 | }, 917 | "callsites": { 918 | "version": "3.1.0", 919 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 920 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" 921 | }, 922 | "chalk": { 923 | "version": "4.1.2", 924 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 925 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 926 | "requires": { 927 | "ansi-styles": "^4.1.0", 928 | "supports-color": "^7.1.0" 929 | } 930 | }, 931 | "color-convert": { 932 | "version": "2.0.1", 933 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 934 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 935 | "requires": { 936 | "color-name": "~1.1.4" 937 | } 938 | }, 939 | "color-name": { 940 | "version": "1.1.4", 941 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 942 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 943 | }, 944 | "combined-stream": { 945 | "version": "1.0.8", 946 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 947 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 948 | "requires": { 949 | "delayed-stream": "~1.0.0" 950 | } 951 | }, 952 | "debug": { 953 | "version": "4.3.2", 954 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 955 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 956 | "requires": { 957 | "ms": "2.1.2" 958 | } 959 | }, 960 | "delayed-stream": { 961 | "version": "1.0.0", 962 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 963 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 964 | }, 965 | "discord-api-types": { 966 | "version": "0.24.0", 967 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.24.0.tgz", 968 | "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==" 969 | }, 970 | "discord.js": { 971 | "version": "13.3.1", 972 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.3.1.tgz", 973 | "integrity": "sha512-zn4G8tL5+tMV00+0aSsVYNYcIfMSdT2g0nudKny+Ikd+XKv7m6bqI7n3Vji0GIRqXDr5ArPaw+iYFM2I1Iw3vg==", 974 | "requires": { 975 | "@discordjs/builders": "^0.8.1", 976 | "@discordjs/collection": "^0.3.2", 977 | "@discordjs/form-data": "^3.0.1", 978 | "@sapphire/async-queue": "^1.1.8", 979 | "@types/node-fetch": "^2.5.12", 980 | "@types/ws": "^8.2.0", 981 | "discord-api-types": "^0.24.0", 982 | "node-fetch": "^2.6.1", 983 | "ws": "^8.2.3" 984 | } 985 | }, 986 | "dot-prop": { 987 | "version": "6.0.1", 988 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", 989 | "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", 990 | "requires": { 991 | "is-obj": "^2.0.0" 992 | } 993 | }, 994 | "ecdsa-sig-formatter": { 995 | "version": "1.0.11", 996 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 997 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 998 | "requires": { 999 | "safe-buffer": "^5.0.1" 1000 | } 1001 | }, 1002 | "event-target-shim": { 1003 | "version": "5.0.1", 1004 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1005 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 1006 | }, 1007 | "extend": { 1008 | "version": "3.0.2", 1009 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1010 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 1011 | }, 1012 | "fast-text-encoding": { 1013 | "version": "1.0.3", 1014 | "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", 1015 | "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" 1016 | }, 1017 | "form-data": { 1018 | "version": "3.0.1", 1019 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 1020 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 1021 | "requires": { 1022 | "asynckit": "^0.4.0", 1023 | "combined-stream": "^1.0.8", 1024 | "mime-types": "^2.1.12" 1025 | } 1026 | }, 1027 | "fs": { 1028 | "version": "0.0.1-security", 1029 | "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", 1030 | "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" 1031 | }, 1032 | "function-bind": { 1033 | "version": "1.1.1", 1034 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1035 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1036 | }, 1037 | "gaxios": { 1038 | "version": "4.3.2", 1039 | "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz", 1040 | "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==", 1041 | "requires": { 1042 | "abort-controller": "^3.0.0", 1043 | "extend": "^3.0.2", 1044 | "https-proxy-agent": "^5.0.0", 1045 | "is-stream": "^2.0.0", 1046 | "node-fetch": "^2.6.1" 1047 | } 1048 | }, 1049 | "gcp-metadata": { 1050 | "version": "4.3.1", 1051 | "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", 1052 | "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", 1053 | "requires": { 1054 | "gaxios": "^4.0.0", 1055 | "json-bigint": "^1.0.0" 1056 | } 1057 | }, 1058 | "get-intrinsic": { 1059 | "version": "1.1.1", 1060 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1061 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1062 | "requires": { 1063 | "function-bind": "^1.1.1", 1064 | "has": "^1.0.3", 1065 | "has-symbols": "^1.0.1" 1066 | } 1067 | }, 1068 | "google-auth-library": { 1069 | "version": "7.10.2", 1070 | "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.2.tgz", 1071 | "integrity": "sha512-M37o9Kxa/TLvOLgF71SXvLeVEP5sbSTmKl1zlIgl72SFy5PtsU3pOdu8G8MIHHpQ3/NZabDI8rQkA9DvQVKkPA==", 1072 | "requires": { 1073 | "arrify": "^2.0.0", 1074 | "base64-js": "^1.3.0", 1075 | "ecdsa-sig-formatter": "^1.0.11", 1076 | "fast-text-encoding": "^1.0.0", 1077 | "gaxios": "^4.0.0", 1078 | "gcp-metadata": "^4.2.0", 1079 | "gtoken": "^5.0.4", 1080 | "jws": "^4.0.0", 1081 | "lru-cache": "^6.0.0" 1082 | } 1083 | }, 1084 | "google-p12-pem": { 1085 | "version": "3.1.2", 1086 | "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz", 1087 | "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==", 1088 | "requires": { 1089 | "node-forge": "^0.10.0" 1090 | } 1091 | }, 1092 | "googleapis": { 1093 | "version": "100.0.0", 1094 | "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-100.0.0.tgz", 1095 | "integrity": "sha512-RToFQGY54B756IDbjdyjb1vWFmn03bYpXHB2lIf0eq2UBYsIbYOLZ0kqSomfJnpclEukwEmMF7Jn6Wsev871ew==", 1096 | "requires": { 1097 | "google-auth-library": "^7.0.2", 1098 | "googleapis-common": "^5.0.2" 1099 | } 1100 | }, 1101 | "googleapis-common": { 1102 | "version": "5.0.5", 1103 | "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.0.5.tgz", 1104 | "integrity": "sha512-o2dgoW4x4fLIAN+IVAOccz3mEH8Lj1LP9c9BSSvkNJEn+U7UZh0WSr4fdH08x5VH7+sstIpd1lOYFZD0g7j4pw==", 1105 | "requires": { 1106 | "extend": "^3.0.2", 1107 | "gaxios": "^4.0.0", 1108 | "google-auth-library": "^7.0.2", 1109 | "qs": "^6.7.0", 1110 | "url-template": "^2.0.8", 1111 | "uuid": "^8.0.0" 1112 | } 1113 | }, 1114 | "gtoken": { 1115 | "version": "5.3.1", 1116 | "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", 1117 | "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==", 1118 | "requires": { 1119 | "gaxios": "^4.0.0", 1120 | "google-p12-pem": "^3.0.3", 1121 | "jws": "^4.0.0" 1122 | } 1123 | }, 1124 | "has": { 1125 | "version": "1.0.3", 1126 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1127 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1128 | "requires": { 1129 | "function-bind": "^1.1.1" 1130 | } 1131 | }, 1132 | "has-flag": { 1133 | "version": "4.0.0", 1134 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1135 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 1136 | }, 1137 | "has-symbols": { 1138 | "version": "1.0.2", 1139 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 1140 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" 1141 | }, 1142 | "https-proxy-agent": { 1143 | "version": "5.0.0", 1144 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 1145 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 1146 | "requires": { 1147 | "agent-base": "6", 1148 | "debug": "4" 1149 | } 1150 | }, 1151 | "is-obj": { 1152 | "version": "2.0.0", 1153 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 1154 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" 1155 | }, 1156 | "is-stream": { 1157 | "version": "2.0.1", 1158 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1159 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" 1160 | }, 1161 | "json-bigint": { 1162 | "version": "1.0.0", 1163 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", 1164 | "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", 1165 | "requires": { 1166 | "bignumber.js": "^9.0.0" 1167 | } 1168 | }, 1169 | "jwa": { 1170 | "version": "2.0.0", 1171 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", 1172 | "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", 1173 | "requires": { 1174 | "buffer-equal-constant-time": "1.0.1", 1175 | "ecdsa-sig-formatter": "1.0.11", 1176 | "safe-buffer": "^5.0.1" 1177 | } 1178 | }, 1179 | "jws": { 1180 | "version": "4.0.0", 1181 | "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", 1182 | "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", 1183 | "requires": { 1184 | "jwa": "^2.0.0", 1185 | "safe-buffer": "^5.0.1" 1186 | } 1187 | }, 1188 | "lodash.isequal": { 1189 | "version": "4.5.0", 1190 | "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 1191 | "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" 1192 | }, 1193 | "lru-cache": { 1194 | "version": "6.0.0", 1195 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1196 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1197 | "requires": { 1198 | "yallist": "^4.0.0" 1199 | } 1200 | }, 1201 | "mime-db": { 1202 | "version": "1.51.0", 1203 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", 1204 | "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" 1205 | }, 1206 | "mime-types": { 1207 | "version": "2.1.34", 1208 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", 1209 | "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", 1210 | "requires": { 1211 | "mime-db": "1.51.0" 1212 | } 1213 | }, 1214 | "ms": { 1215 | "version": "2.1.2", 1216 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1217 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1218 | }, 1219 | "node-fetch": { 1220 | "version": "2.6.6", 1221 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", 1222 | "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", 1223 | "requires": { 1224 | "whatwg-url": "^5.0.0" 1225 | } 1226 | }, 1227 | "node-forge": { 1228 | "version": "0.10.0", 1229 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", 1230 | "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" 1231 | }, 1232 | "object-inspect": { 1233 | "version": "1.11.0", 1234 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", 1235 | "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" 1236 | }, 1237 | "ow": { 1238 | "version": "0.27.0", 1239 | "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", 1240 | "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", 1241 | "requires": { 1242 | "@sindresorhus/is": "^4.0.1", 1243 | "callsites": "^3.1.0", 1244 | "dot-prop": "^6.0.1", 1245 | "lodash.isequal": "^4.5.0", 1246 | "type-fest": "^1.2.1", 1247 | "vali-date": "^1.0.0" 1248 | } 1249 | }, 1250 | "qs": { 1251 | "version": "6.10.1", 1252 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", 1253 | "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", 1254 | "requires": { 1255 | "side-channel": "^1.0.4" 1256 | } 1257 | }, 1258 | "safe-buffer": { 1259 | "version": "5.2.1", 1260 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1261 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1262 | }, 1263 | "side-channel": { 1264 | "version": "1.0.4", 1265 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1266 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1267 | "requires": { 1268 | "call-bind": "^1.0.0", 1269 | "get-intrinsic": "^1.0.2", 1270 | "object-inspect": "^1.9.0" 1271 | } 1272 | }, 1273 | "supports-color": { 1274 | "version": "7.2.0", 1275 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1276 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1277 | "requires": { 1278 | "has-flag": "^4.0.0" 1279 | } 1280 | }, 1281 | "tr46": { 1282 | "version": "0.0.3", 1283 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1284 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" 1285 | }, 1286 | "ts-mixer": { 1287 | "version": "6.0.0", 1288 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", 1289 | "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" 1290 | }, 1291 | "tslib": { 1292 | "version": "2.3.1", 1293 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", 1294 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" 1295 | }, 1296 | "type-fest": { 1297 | "version": "1.4.0", 1298 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", 1299 | "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" 1300 | }, 1301 | "url-template": { 1302 | "version": "2.0.8", 1303 | "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", 1304 | "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" 1305 | }, 1306 | "uuid": { 1307 | "version": "8.3.2", 1308 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1309 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" 1310 | }, 1311 | "vali-date": { 1312 | "version": "1.0.0", 1313 | "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", 1314 | "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" 1315 | }, 1316 | "webidl-conversions": { 1317 | "version": "3.0.1", 1318 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1319 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" 1320 | }, 1321 | "whatwg-url": { 1322 | "version": "5.0.0", 1323 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1324 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", 1325 | "requires": { 1326 | "tr46": "~0.0.3", 1327 | "webidl-conversions": "^3.0.0" 1328 | } 1329 | }, 1330 | "ws": { 1331 | "version": "8.2.3", 1332 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", 1333 | "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", 1334 | "requires": {} 1335 | }, 1336 | "yallist": { 1337 | "version": "4.0.0", 1338 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1339 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1340 | } 1341 | } 1342 | } 1343 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-sheets", 3 | "version": "1.0.0", 4 | "description": "A bot that uses google sheets to store users", 5 | "main": "src/index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Simpleboy353", 10 | "license": "GPL-3.0", 11 | "dependencies": { 12 | "ascii-table": "^0.0.9", 13 | "chalk": "^4.1.2", 14 | "discord.js": "^13.3.1", 15 | "fs": "^0.0.1-security", 16 | "googleapis": "^100.0.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 |
11 | SheetsBot is a discord bot that allows you to read, write and remove data from Google Sheets. 12 |
13 | 14 | ## Important: 15 | - No additional help will be provided for this repository. 16 | - Read the `readme.md` file for complete information about the bot. 17 | - It is recommended to watch the GoogleSheetsAPI tutorial for more information. (Link Below, Under Configuration) 18 | - If you have any questions, please contact me on [discord](https://discord.com/users/661501985517862972). 19 | 20 | ## Requirements 21 | - Discord.js v13 or higher (`npm install discord.js@latest`) 22 | - NodeJS v16.6 or higher 23 | - Google APIs Client Library for NodeJS (`npm install googleapis`) 24 | - `applications.commands` scope enabled for your bot in [developer portal](https://discord.com/developers) 25 | - Basic knowlegde of Discord.js or JavaScript or NodeJS 26 | 27 | ## Getting Started 28 | #### Creating a fork 29 | - [Click here to create a fork](https://github.com/Simpleboy353/SheetsBot) 30 | - Open your terminal and do `git clone https://github.com/Simpleboy353/SheetsBot.git` 31 | 32 | #### Installing dependencies 33 | - Open your terminal and do `npm install` 34 | 35 | #### Starting the bot 36 | ##### Do any one 37 | - `npm start` 38 | - `node index.js` 39 | - `node .` 40 | 41 | ## Configuration 42 | - Edit the `config.json` file 43 | ```json 44 | { 45 | "botToken": "ENTER_YOUR_BOT_TOKEN_HERE", 46 | "spreadsheetId": "ID_OF_THE_GOOGLE_SHEET", 47 | "ownerId": "ENTER_YOIUR_ID_HERE", 48 | "prefix": "ANY_PREFIX_OF_YOUR_CHOICE", 49 | "error_logs": "ENTER_THE_ERROR_LOGS_CHANNEL_ID_HERE" 50 | } 51 | ``` 52 | - `botToken` is the token of your bot 53 | - `spreadsheetId` is the ID of the Google Sheet you want to use 54 | - `ownerId` is the ID of the owner of the bot 55 | - `prefix` is the prefix of the bot 56 | - `error_logs` is the ID of the channel where you want to send the error logs 57 | - You will also need an additional credentials file to use this bot. 58 | - **Watch this video to see the full Google Sheets API Tutorial:** 59 | - [](http://www.youtube.com/watch?v=PFJNJQCU_lo "MongoDB Tutorial") 60 | 61 | ## Star the Repo if you liked it! 62 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /src/SlashCommands/Info/help.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js") 2 | 3 | module.exports = { 4 | name: "help", 5 | description: 'Shows the help page!', 6 | options: null, 7 | run: async(client, interaction, args)=>{ 8 | 9 | const embed = new MessageEmbed() 10 | .setTitle("Help Menu") 11 | .setDescription(client.slash.map(cmd => `\`${cmd.name} - ${cmd.description}\``).join("\n")) 12 | .setColor("GREEN"); 13 | 14 | return interaction.reply({ embeds: [embed] }); 15 | 16 | } 17 | } -------------------------------------------------------------------------------- /src/SlashCommands/Sheets/add.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "add", 3 | description: "Adds a user to the spreadsheet!", 4 | userPerms: ["ADMINISTRATOR"], 5 | options: [ 6 | { 7 | name: "user", 8 | description: "The user to add to the spreadsheet", 9 | type: "USER", 10 | required: true, 11 | }, 12 | { 13 | name: "reason", 14 | description: "The reason for adding the user", 15 | type: "STRING", 16 | required: true, 17 | } 18 | ], 19 | run: async(client, interaction, args) => { 20 | const user = await interaction.options.getUser("user"); 21 | const reason = await interaction.options.getString("reason"); 22 | 23 | const username = await user.username; 24 | 25 | const rows = await client.googleSheets.values.get({ 26 | auth: client.auth, 27 | spreadsheetId: client.sheetId, 28 | range: "Sheet1!A:A" 29 | }); 30 | 31 | const data = rows.data.values.find(row => row[0] === username); 32 | 33 | if (data) { 34 | return interaction.reply("User has been added to the list already!") 35 | } else if (!data) { 36 | await client.googleSheets.values.append({ 37 | auth: client.auth, 38 | spreadsheetId: client.sheetId, 39 | range: "Sheet1!A:B", 40 | valueInputOption: "USER_ENTERED", 41 | resource: { 42 | values: [ 43 | [username, reason] 44 | ] 45 | } 46 | }); 47 | 48 | return interaction.reply("The user has been added to the list!") 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /src/SlashCommands/Sheets/check.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | module.exports = { 4 | name: "check", 5 | description: "Checks if a user is in the list!", 6 | userPerms: ["ADMINISTRATOR"], 7 | options: [ 8 | { 9 | name: "user", 10 | description: "The user to check", 11 | type: "USER", 12 | required: true, 13 | } 14 | ], 15 | run: async(client, interaction, args) => { 16 | const user = await interaction.options.getUser("user"); 17 | const username = await user.username; 18 | 19 | const rows = await client.googleSheets.values.get({ 20 | auth: client.auth, 21 | spreadsheetId: client.sheetId, 22 | range: "Sheet1!A:B" 23 | }); 24 | 25 | const data = rows.data.values.find(row => row[0] === username); 26 | 27 | if (data) { 28 | 29 | if (rows.data.values.length > 0) { 30 | 31 | const embed = new MessageEmbed() 32 | .setColor("GREEN") 33 | 34 | for(let i = 0; i < rows.data.values.length; i++) { 35 | const row = rows.data.values[i]; 36 | if (row[0] === username) { 37 | embed.setDescription(`Username: ${row[0]}\nReason: ${row[1]}`); 38 | } 39 | } 40 | 41 | await interaction.reply({ embeds: [embed] }) 42 | } 43 | 44 | } else if (!data) { 45 | return interaction.reply("User is not in the list!") 46 | } 47 | } 48 | } -------------------------------------------------------------------------------- /src/SlashCommands/Sheets/list.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, Interaction } = require("discord.js"); 2 | 3 | module.exports = { 4 | name: "list", 5 | description: "Shows all the users added to the list!", 6 | userPerms: ["ADMINISTRATOR"], 7 | options: null, 8 | run: async(client, interaction, args) => { 9 | const embed = new MessageEmbed() 10 | .setColor("GREEN") 11 | .setDescription("List of Users") 12 | 13 | const rows = await client.googleSheets.values.get({ 14 | auth: client.auth, 15 | spreadsheetId: client.sheetId, 16 | range: "Sheet1!A:B" 17 | }) 18 | 19 | if(rows.data.values.length > 0) { 20 | for(let i = 0; i < rows.data.values.length; i++) { 21 | const row = rows.data.values[i]; 22 | embed.addField(`Username: ${row[0]}`, `Reason: ${row[1]}`); 23 | } 24 | } else { 25 | embed.setDescription("No users added to the list!"); 26 | } 27 | 28 | await interaction.reply({ embeds: [embed] }) 29 | } 30 | } -------------------------------------------------------------------------------- /src/SlashCommands/Sheets/remove.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "remove", 3 | description: "Removes a user from the sheet!", 4 | userPerms: ["ADMINISTRATOR"], 5 | options: [ 6 | { 7 | name: "user", 8 | description: "Removes a user form the sheet!", 9 | type: "USER", 10 | required: true 11 | } 12 | ], 13 | run: async(client, interaction, args) => { 14 | const user = await interaction.options.getUser("user"); 15 | const username = user.username; 16 | 17 | const rows = await client.googleSheets.values.get({ 18 | auth: client.auth, 19 | spreadsheetId: client.sheetId, 20 | range: "Sheet1!A:A" 21 | }); 22 | 23 | const data = rows.data.values.find(row => row[0] === username); 24 | 25 | if (!data) { 26 | return interaction.reply("User is not in the list!") 27 | } 28 | 29 | let toDeleteRow; 30 | 31 | for (let i = 0; i < rows.data.values.length; i++) { 32 | const row = rows.data.values[i]; 33 | if (row[0] === username) { 34 | toDeleteRow = i; 35 | } 36 | } 37 | 38 | await client.googleSheets.batchUpdate({ 39 | auth: client.auth, 40 | spreadsheetId: client.sheetId, 41 | resource: { 42 | "requests": [ 43 | { 44 | "deleteDimension": { 45 | "range": { 46 | "sheetId": 0, 47 | "dimension": "ROWS", 48 | "startIndex": toDeleteRow, 49 | "endIndex": toDeleteRow + 1, 50 | }, 51 | } 52 | } 53 | ] 54 | } 55 | }).catch(console.error) 56 | 57 | return interaction.reply("User has been removed from the list!") 58 | } 59 | } -------------------------------------------------------------------------------- /src/events/client/ready.js: -------------------------------------------------------------------------------- 1 | const chalk = require("chalk"); 2 | 3 | module.exports = (client) => { 4 | client.user.setPresence({ status: "online" }); 5 | 6 | let allMembers = new Set(); 7 | client.guilds.cache.forEach((guild) => { 8 | guild.members.cache.forEach((member) => { 9 | allMembers.add(member.user.id); 10 | }); 11 | }); 12 | 13 | let allChannels = new Set(); 14 | client.guilds.cache.forEach((guild) => { 15 | guild.channels.cache.forEach((channel) => { 16 | allChannels.add(channel.id); 17 | }); 18 | }); 19 | 20 | console.log( 21 | chalk.bgMagentaBright.black(` ${client.guilds.cache.size} servers `), 22 | chalk.bgMagentaBright.black(` ${client.channels.cache.size} channels `), 23 | chalk.bgMagentaBright.black(` ${allMembers.size} members `) 24 | ); 25 | }; -------------------------------------------------------------------------------- /src/events/guild/slashCommands.js: -------------------------------------------------------------------------------- 1 | module.exports = async(interaction, client) => { 2 | const { ownerId } = require('../../jsons/config.json') 3 | 4 | if (!interaction.isCommand()) return; 5 | 6 | const command = client.slash.get(interaction.commandName); 7 | if (!command) return interaction.reply({ content: 'an Erorr' }); 8 | 9 | if (command.ownerOnly) { 10 | if (!interaction.member.user.id == OwnerID) { 11 | return interaction.reply('Command under developement!') 12 | } 13 | } 14 | 15 | if (command.userPerms) { 16 | if (!client.guilds.cache.get(interaction.guild.id).members.cache.get(interaction.member.id).permissions.has(command.userPerms || [])) { 17 | if (command.noUserPermsMessage) { 18 | return interaction.reply(command.noUserPermsMessage) 19 | } else if (!command.noUserPermsMessage) { 20 | return interaction.reply(`You need the \`${command.userPerms}\` permission to use this command!`) 21 | } 22 | } 23 | } 24 | 25 | if (command.botPerms) { 26 | if (!client.guilds.cache.get(interaction.guild.id).members.cache.get(client.user.id).permissions.has(command.botPerms || [])) { 27 | if (command.noBotPermsMessage) { 28 | return interaction.reply(command.noBotPermsMessage) 29 | } else if (!command.noBotPermsMessage) { 30 | return interaction.reply(`I need the \`${command.userPerms}\` permission to execute this command!`) 31 | } 32 | } 33 | } 34 | 35 | const args = []; 36 | 37 | for (let option of interaction.options.data) { 38 | if (option.type === 'SUB_COMMAND') { 39 | if (option.name) args.push(option.name); 40 | option.options?.forEach(x => { 41 | if (x.value) args.push(x.value); 42 | }); 43 | } else if (option.value) args.push(option.value); 44 | } 45 | 46 | try { 47 | 48 | command.run(client, interaction, args) 49 | } catch (e) { 50 | interaction.reply({ content: e.message }); 51 | } 52 | } -------------------------------------------------------------------------------- /src/handlers/loadEvents.js: -------------------------------------------------------------------------------- 1 | const clientEvent = (event) => require(`../events/client/${event}`) 2 | const guildEvent = (event) => require(`../events/guild/${event}`) 3 | 4 | function loadEvents(client) { 5 | client.on("ready", () => clientEvent("ready")(client)) 6 | client.on("interactionCreate",(m) => guildEvent("slashCommands")(m, client)) 7 | } 8 | 9 | module.exports = { 10 | loadEvents 11 | } -------------------------------------------------------------------------------- /src/handlers/loadSlashCommands.js: -------------------------------------------------------------------------------- 1 | function loadSlashCommands(client) { 2 | const fs = require("fs"); 3 | const ascii = require("ascii-table"); 4 | 5 | let slash = [] 6 | 7 | const table = new ascii().setHeading(" Slash Commands", "Load Status"); 8 | 9 | const commandFolders = fs.readdirSync("./src/SlashCommands"); 10 | for (const folder of commandFolders) { 11 | const commandFiles = fs 12 | .readdirSync(`./src/SlashCommands/${folder}`) 13 | .filter((file) => file.endsWith(".js")); 14 | for (const file of commandFiles) { 15 | const command = require(`../SlashCommands/${folder}/${file}`); 16 | if (command.name) { 17 | client.slash.set(command.name, command); 18 | slash.push(command) 19 | table.addRow(file, "✔️"); 20 | } else { 21 | table.addRow( 22 | file, 23 | "❌ => Missing a help.name or help.name is not in string" 24 | ); 25 | continue; 26 | } 27 | } 28 | console.log(table.toString()); 29 | } 30 | client.on("ready", async() => { 31 | await client.application.commands.set(slash) 32 | }) 33 | } 34 | 35 | module.exports = { 36 | loadSlashCommands, 37 | }; -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const chalk = require('chalk'); 2 | const fs = require("fs"); 3 | const { google } = require('googleapis'); 4 | const { Client, Collection, Intents, MessageEmbed } = require("discord.js"); 5 | const { loadEvents } = require("../src/handlers/loadEvents"); 6 | const { loadSlashCommands } = require("../src/handlers/loadSlashCommands"); 7 | const { botToken, spreadsheetId } = require("../src/jsons/config.json"); 8 | 9 | // Declaring our Discord Client 10 | const client = new Client({ 11 | allowedMentions: { parse: ["users", "roles"] }, 12 | intents: [ 13 | Intents.FLAGS.GUILDS, 14 | Intents.FLAGS.GUILD_MESSAGES, 15 | Intents.FLAGS.GUILD_MEMBERS, 16 | Intents.FLAGS.GUILD_MESSAGE_REACTIONS, 17 | Intents.FLAGS.GUILD_WEBHOOKS, 18 | Intents.FLAGS.GUILD_VOICE_STATES, 19 | Intents.FLAGS.GUILD_INVITES, 20 | Intents.FLAGS.GUILD_BANS, 21 | Intents.FLAGS.GUILD_PRESENCES, 22 | ], 23 | }); 24 | 25 | // Google Sheets Authorisation Stuff 26 | const auth = new google.auth.GoogleAuth({ 27 | keyFile: "src/jsons/credentials.json", 28 | scopes: "https://www.googleapis.com/auth/spreadsheets" 29 | }) 30 | const sheetClient = auth.getClient(); 31 | const googleSheets = google.sheets({ version: "v4", auth: sheetClient }); 32 | 33 | // Stuff that will be very useful in our project 34 | client.sheetCommands = fs.readdirSync("./src/SlashCommands/Sheets/") 35 | client.slash = new Collection(); 36 | client.auth = auth; 37 | client.sheetId = spreadsheetId; 38 | client.googleSheets = googleSheets.spreadsheets; 39 | 40 | // Declaring Slash Command and Events 41 | loadEvents(client); 42 | loadSlashCommands(client); 43 | 44 | // Error Handling 45 | process.on("uncaughtException", (err) => { 46 | console.log("Uncaught Exception: " + err); 47 | 48 | const exceptionembed = new MessageEmbed() 49 | .setTitle("Uncaught Exception") 50 | .setDescription(`${err}`) 51 | .setColor("RED") 52 | //client.channels.cache.get(error_logs).send({ embeds: [exceptionembed] }) 53 | console.log(err); 54 | }); 55 | 56 | process.on("unhandledRejection", (reason, promise) => { 57 | console.log( 58 | "[FATAL] Possibly Unhandled Rejection at: Promise ", 59 | promise, 60 | " reason: ", 61 | reason.message 62 | ); 63 | 64 | const rejectionembed = new MessageEmbed() 65 | .setTitle("Unhandled Promise Rejection") 66 | .addField("Promise", `${promise}`) 67 | .addField("Reason", `${reason.message}`) 68 | .setColor("RED") 69 | //client.channels.cache.get(error_logs).send({ embeds: [rejectionembed] }) 70 | }); 71 | 72 | client.login(botToken).then(() => { 73 | console.log( 74 | chalk.bgBlueBright.black( 75 | ` Successfully logged in as: ${client.user.username}#${client.user.discriminator} ` 76 | ) 77 | ); 78 | }); -------------------------------------------------------------------------------- /src/jsons/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "botToken": "", 3 | "spreadsheetId": "", 4 | "ownerId": "", 5 | "prefix": "", 6 | "error_logs": "" 7 | } 8 | --------------------------------------------------------------------------------