From 6b53e17c490a753821cd8e06ab585c24a337cd53 Mon Sep 17 00:00:00 2001 From: atridadl Date: Sun, 3 Dec 2023 17:30:36 -0700 Subject: [PATCH] Changed the buntime! --- Dockerfile | 24 +- bun.lockb | Bin 0 -> 58726 bytes package.json | 5 +- pnpm-lock.yaml | 1082 ----------------- src/commands/ask.ts | 53 +- src/commands/borf.ts | 43 +- src/commands/hdpic.ts | 60 +- src/commands/hdtts.ts | 68 +- src/commands/hs.ts | 49 +- src/commands/pic.ts | 62 +- src/commands/ping.ts | 47 - src/commands/quack.ts | 42 - src/commands/support.ts | 35 - src/commands/title.ts | 48 +- src/commands/tts.ts | 67 +- src/index.ts | 14 +- src/lib/utils.ts | 16 +- .../messageCommands/messageCommandDenied.ts | 12 - .../messageCommands/messageCommandSuccess.ts | 15 - src/listeners/ready.ts | 16 +- 20 files changed, 210 insertions(+), 1548 deletions(-) create mode 100755 bun.lockb delete mode 100644 pnpm-lock.yaml delete mode 100644 src/commands/ping.ts delete mode 100644 src/commands/quack.ts delete mode 100644 src/commands/support.ts delete mode 100644 src/listeners/commands/messageCommands/messageCommandDenied.ts delete mode 100644 src/listeners/commands/messageCommands/messageCommandSuccess.ts diff --git a/Dockerfile b/Dockerfile index 364a334..bace206 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,10 @@ # syntax = docker/dockerfile:1 # Adjust NODE_VERSION as desired -ARG NODE_VERSION=18.14.2 -FROM node:${NODE_VERSION}-slim as base +ARG BUN_VERSION=1.0.9 +FROM oven/bun:${BUN_VERSION} as base -LABEL fly_launch_runtime="Node.js" +LABEL fly_launch_runtime="Bun" # Node.js app lives here WORKDIR /app @@ -12,11 +12,6 @@ WORKDIR /app # Set production environment ENV NODE_ENV="production" -# Install pnpm -ARG PNPM_VERSION=8.9.0 -RUN npm install -g pnpm@$PNPM_VERSION - - # Throw-away build stage to reduce size of final image FROM base as build @@ -25,19 +20,12 @@ RUN apt-get update -qq && \ apt-get install -y build-essential pkg-config python-is-python3 # Install node modules -COPY --link .npmrc package.json pnpm-lock.yaml ./ -RUN pnpm install --frozen-lockfile --prod=false +COPY --link .npmrc package.json bun.lockb ./ +RUN bun install --ci # Copy application code COPY --link . . -# Build application -RUN pnpm run build - -# Remove development dependencies -RUN pnpm prune --prod - - # Final stage for app image FROM base @@ -46,4 +34,4 @@ COPY --from=build /app /app # Start the server by default, this can be overwritten at runtime EXPOSE 3000 -CMD [ "pnpm", "run", "start" ] +CMD [ "bun", "start" ] diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..3d74b83db15776c55a964cc62b14daa8877b0fc1 GIT binary patch literal 58726 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.11.0'} - dependencies: - '@discordjs/formatters': 0.3.3 - '@discordjs/util': 1.0.2 - '@sapphire/shapeshift': 3.9.3 - discord-api-types: 0.37.61 - fast-deep-equal: 3.1.3 - ts-mixer: 6.0.3 - tslib: 2.6.2 - dev: false - - /@discordjs/collection@1.5.3: - resolution: {integrity: sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==} - engines: {node: '>=16.11.0'} - dev: false - - /@discordjs/collection@2.0.0: - resolution: {integrity: sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==} - engines: {node: '>=18'} - dev: false - - /@discordjs/formatters@0.3.3: - resolution: {integrity: sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==} - engines: {node: '>=16.11.0'} - dependencies: - discord-api-types: 0.37.61 - dev: false - - /@discordjs/rest@2.2.0: - resolution: {integrity: sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==} - engines: {node: '>=16.11.0'} - dependencies: - '@discordjs/collection': 2.0.0 - '@discordjs/util': 1.0.2 - '@sapphire/async-queue': 1.5.0 - '@sapphire/snowflake': 3.5.1 - '@vladfrangu/async_event_emitter': 2.2.4 - discord-api-types: 0.37.61 - magic-bytes.js: 1.5.0 - tslib: 2.6.2 - undici: 5.27.2 - dev: false - - /@discordjs/util@1.0.2: - resolution: {integrity: sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==} - engines: {node: '>=16.11.0'} - dev: false - - /@discordjs/ws@1.0.2: - resolution: {integrity: sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==} - engines: {node: '>=16.11.0'} - dependencies: - '@discordjs/collection': 2.0.0 - '@discordjs/rest': 2.2.0 - '@discordjs/util': 1.0.2 - '@sapphire/async-queue': 1.5.0 - '@types/ws': 8.5.10 - '@vladfrangu/async_event_emitter': 2.2.4 - discord-api-types: 0.37.61 - tslib: 2.6.2 - ws: 8.14.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@fastify/busboy@2.1.0: - resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} - engines: {node: '>=14'} - dev: false - - /@favware/colorette-spinner@1.0.1: - resolution: {integrity: sha512-PPYtcLzhSafdylp8NBOxMCYIcLqTUMNiQc7ciBoAIvxNG2egM+P7e2nNPui5+Svyk89Q+Tnbrp139ZRIIBw3IA==} - engines: {node: '>=v16'} - dependencies: - colorette: 2.0.20 - dev: true - - /@flydotio/dockerfile@0.4.11: - resolution: {integrity: sha512-L52UAfrOhmAn3T4TxpeRofQOSO+Kctg+uraB4nLzo4mvvh+4Z7HYxSi7Dnq0Kirz+xx6fDIc4OMNT1EdaORecA==} - engines: {node: '>=16.0.0'} - hasBin: true - dependencies: - chalk: 5.3.0 - diff: 5.1.0 - ejs: 3.1.9 - shell-quote: 1.8.1 - yargs: 17.7.2 - dev: true - - /@sapphire/async-queue@1.5.0: - resolution: {integrity: sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dev: false - - /@sapphire/cli@1.9.0: - resolution: {integrity: sha512-2WNMscS9c1+Y3W3Aem+BdgqgMnkbGrwmGaYr7kH+aGGG2Od12Drkq+umdNzF8DbiAiSaB6CK8sHe6HOqBvXfOA==} - engines: {node: '>=v18'} - hasBin: true - dependencies: - '@favware/colorette-spinner': 1.0.1 - '@sapphire/node-utilities': 1.0.0 - '@sapphire/result': 2.6.4 - colorette: 2.0.20 - commander: 11.1.0 - execa: 8.0.1 - find-up: 5.0.0 - js-yaml: 4.1.0 - prompts: 2.4.2 - tslib: 2.6.2 - dev: true - - /@sapphire/decorators@6.0.2: - resolution: {integrity: sha512-R0bsVvvT/iclElvdglpneIB6UGhzqT3DbMy8b0VHcjSSWArAfxFXiv7mVO/5VeiQduZFhWPgqtTWayKdRYY1NA==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dependencies: - tslib: 2.6.2 - dev: false - - /@sapphire/discord-utilities@3.2.0: - resolution: {integrity: sha512-gKgTkWIBgkG0c+V3ALXeoD7XeciAYQtHNewjltSMaxCLF/wsy6NFj6xxqdEeSJMF40tcfUJ7F44r2DR5r3K8Eg==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dependencies: - discord-api-types: 0.37.65 - dev: false - - /@sapphire/discord.js-utilities@7.1.2: - resolution: {integrity: sha512-Ly/mtykmX7lak4+fzVbDvch0xnlAwDIDGZGg9mGuZVHdA4sINWcVoCNulI+OqoZWdLCfUKph32KvXGESzriD7A==} - engines: {node: '>=16.6.0', npm: '>=7.0.0'} - dependencies: - '@sapphire/discord-utilities': 3.2.0 - '@sapphire/duration': 1.1.0 - '@sapphire/utilities': 3.13.0 - tslib: 2.6.2 - dev: false - - /@sapphire/duration@1.1.0: - resolution: {integrity: sha512-ATb2pWPLcSgG7bzvT6MglUcDexFSufr2FLXUmhipWGFtZbvDhkopGBIuHyzoGy7LZvL8UY5T6pRLNdFv5pl/Lg==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dev: false - - /@sapphire/framework@4.8.4: - resolution: {integrity: sha512-ErnsCcvgtC/8/KS2gvV88EFtN4uteFzLKDfEjYebdXU7AVr9AoOBJtymYu42GHVZJ3eaYKGadUBJn6015LxaLw==} - engines: {node: '>=v18', npm: '>=7'} - dependencies: - '@discordjs/builders': 1.7.0 - '@sapphire/discord-utilities': 3.2.0 - '@sapphire/discord.js-utilities': 7.1.2 - '@sapphire/lexure': 1.1.5 - '@sapphire/pieces': 3.10.0 - '@sapphire/ratelimits': 2.4.7 - '@sapphire/result': 2.6.4 - '@sapphire/stopwatch': 1.5.0 - '@sapphire/utilities': 3.13.0 - dev: false - - /@sapphire/lexure@1.1.5: - resolution: {integrity: sha512-afVTCLHezlyvdvvOcEeCzMA05l1yje9axtY7gWQpDcppOazskYPgGMVCdAbfHz5BsyABMZYT2MznY+phEgFc8Q==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dependencies: - '@sapphire/result': 2.6.4 - dev: false - - /@sapphire/node-utilities@1.0.0: - resolution: {integrity: sha512-xFC4UyzSKs6juyFtsUV4VNybg0KIpwaThED2TH3TGtNT5b0VFpILTXQtqXpPf+Rfmj+O/mLCm319xy4ohsQqxQ==} - engines: {node: '>=v16.0.0', npm: '>=7.0.0'} - dev: true - - /@sapphire/pieces@3.10.0: - resolution: {integrity: sha512-iBaux50dA+VYjtBqmaceWcskdmw7ua51ojEPkyaSJyg2t9ln/Wc9NqYoQheRCWltZeDTERCUBIYYMqDuCs1Okw==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dependencies: - '@discordjs/collection': 1.5.3 - '@sapphire/utilities': 3.13.0 - tslib: 2.6.2 - dev: false - - /@sapphire/plugin-logger@3.0.7: - resolution: {integrity: sha512-QNQRHMgvyxhBNdYBktIfAQvNdsvzYd6vVWCvnggrcN56mvXJyolZaPkDcUNh3PdtjcB7XTChpynbLlTby2vsyQ==} - engines: {node: '>=v18', npm: '>=7'} - dependencies: - '@sapphire/timestamp': 1.0.1 - colorette: 2.0.20 - dev: false - - /@sapphire/prettier-config@2.0.0: - resolution: {integrity: sha512-Vie8KR5zQ6sbEP4+biW/IR7k55saGfZkTSuRlgvxCBKb4SBJdRWcOBI80i+JxMVIDDZKgXlgYnXEST+FgZiWXA==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dependencies: - prettier: 3.1.0 - dev: true - - /@sapphire/ratelimits@2.4.7: - resolution: {integrity: sha512-IJQySiK+A8P4E+0oW2TGDy4RBjMsw3hccFL0y4kjQ2VZNzPDHJSYR4Pb1TzlG6V9YTVdCNWJODFXXyVn3tEQ/A==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dev: false - - /@sapphire/result@2.6.4: - resolution: {integrity: sha512-o6rAnNbtumhR4Iy9t1p3xtOG9WtfO2OyyyaBrGUNThmhqf1cwvl5CO3/E0Hd66qdkuSqpJqC9TnnGzTmSoDd6A==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - - /@sapphire/shapeshift@3.9.3: - resolution: {integrity: sha512-WzKJSwDYloSkHoBbE8rkRW8UNKJiSRJ/P8NqJ5iVq7U2Yr/kriIBx2hW+wj2Z5e5EnXL1hgYomgaFsdK6b+zqQ==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dependencies: - fast-deep-equal: 3.1.3 - lodash: 4.17.21 - dev: false - - /@sapphire/snowflake@3.5.1: - resolution: {integrity: sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dev: false - - /@sapphire/stopwatch@1.5.0: - resolution: {integrity: sha512-DtyKugdy3JTqm6JnEepTY64fGJAqlusDVrlrzifEgSCfGYCqpvB+SBldkWtDH+z+zLcp+PyaFLq7xpVfkhmvGg==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dependencies: - tslib: 2.6.2 - dev: false - - /@sapphire/timestamp@1.0.1: - resolution: {integrity: sha512-uLg+rBFuBiaQY/pFGDDzZSOH2cfv4ONIB7zQGNuRCTpYKBW/iIhRBIZjJZyn8NVkXQhVi+Q94DI4i6gDhYVs7w==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dev: false - - /@sapphire/ts-config@5.0.0: - resolution: {integrity: sha512-E4JfpCK/OxaH8lYEP0+xbRUeIBanEOkA5IUtvj+Uib2TG2p7H0Sb1mF1fpmf0ICyDaOu9/201Il/ymV3cr/isw==} - engines: {node: '>=v16.0.0', npm: '>=8.0.0'} - dependencies: - tslib: 2.6.2 - typescript: 5.3.2 - dev: true - - /@sapphire/utilities@3.13.0: - resolution: {integrity: sha512-BD5ycPjZX5dXxrAb90dJTY8ukpPVBXgU17gA5ghK2memS4hwAzFYpvK+R+6zh4d6HYIKVuqrVhGXjvZenAa/Aw==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dev: false - - /@skyra/env-utilities@1.2.1: - resolution: {integrity: sha512-blyw0zCtrdP5SEiPAw62UuCd69bXdIBTtyzCXamVOcN2wqXt8HWkYrz8IdmZ2cvgnYIXpz7hzAmrIi3fGG7zzQ==} - engines: {node: '>=16.9.0', npm: '>=8.0.0'} - dependencies: - dotenv: 16.3.1 - dotenv-expand: 10.0.0 - dev: false - - /@types/node-fetch@2.6.9: - resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} - dependencies: - '@types/node': 20.10.2 - form-data: 4.0.0 - dev: false - - /@types/node@18.19.1: - resolution: {integrity: sha512-mZJ9V11gG5Vp0Ox2oERpeFDl+JvCwK24PGy76vVY/UgBtjwJWc5rYBThFxmbnYOm9UPZNm6wEl/sxHt2SU7x9A==} - dependencies: - undici-types: 5.26.5 - dev: false - - /@types/node@20.10.2: - resolution: {integrity: sha512-37MXfxkb0vuIlRKHNxwCkb60PNBpR94u4efQuN4JgIAm66zfCDXGSAFCef9XUWFovX2R1ok6Z7MHhtdVXXkkIw==} - dependencies: - undici-types: 5.26.5 - - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - dependencies: - '@types/node': 20.10.2 - - /@types/ws@8.5.9: - resolution: {integrity: sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==} - dependencies: - '@types/node': 20.10.2 - dev: false - - /@vladfrangu/async_event_emitter@2.2.4: - resolution: {integrity: sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==} - engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dev: false - - /abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - dependencies: - event-target-shim: 5.0.1 - dev: false - - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} - dependencies: - humanize-ms: 1.2.1 - dev: false - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: true - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /base-64@0.1.0: - resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} - dev: false - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - - /charenc@0.0.2: - resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - dev: false - - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - - /commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /crypt@0.0.2: - resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} - dev: false - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false - - /diff@5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} - engines: {node: '>=0.3.1'} - dev: true - - /digest-fetch@1.3.0: - resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} - dependencies: - base-64: 0.1.0 - md5: 2.3.0 - dev: false - - /discord-api-types@0.37.61: - resolution: {integrity: sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==} - dev: false - - /discord-api-types@0.37.65: - resolution: {integrity: sha512-CQHW3Nu04LEHIj1Xps/sfGhTdrowilxnek2tirpLhwvrmgmLr1C6A+4JFLs+0kJMH2IX2QgDyA9GfNehqN+xPQ==} - dev: false - - /discord.js@14.14.1: - resolution: {integrity: sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w==} - engines: {node: '>=16.11.0'} - dependencies: - '@discordjs/builders': 1.7.0 - '@discordjs/collection': 1.5.3 - '@discordjs/formatters': 0.3.3 - '@discordjs/rest': 2.2.0 - '@discordjs/util': 1.0.2 - '@discordjs/ws': 1.0.2 - '@sapphire/snowflake': 3.5.1 - '@types/ws': 8.5.9 - discord-api-types: 0.37.61 - fast-deep-equal: 3.1.3 - lodash.snakecase: 4.1.1 - tslib: 2.6.2 - undici: 5.27.2 - ws: 8.14.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /dotenv-expand@10.0.0: - resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} - engines: {node: '>=12'} - dev: false - - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dev: false - - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.7 - dev: true - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /event-stream@3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} - dependencies: - duplexer: 0.1.2 - from: 0.1.7 - map-stream: 0.1.0 - pause-stream: 0.0.11 - split: 0.3.3 - stream-combiner: 0.0.4 - through: 2.3.8 - dev: true - - /event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - dev: false - - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: false - - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.6 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /form-data-encoder@1.7.2: - resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} - dev: false - - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /formdata-node@4.4.1: - resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} - engines: {node: '>= 12.20'} - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.3 - dev: false - - /from@0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - dev: true - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true - - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - dependencies: - ms: 2.1.3 - dev: false - - /is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: false - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true - dependencies: - async: 3.2.5 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - dev: true - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - dev: false - - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false - - /magic-bytes.js@1.5.0: - resolution: {integrity: sha512-wJkXvutRbNWcc37tt5j1HyOK1nosspdh3dj6LUYYAvF6JYNqs53IfRvK9oEpcwiDA1NdoIi64yAMfdivPeVAyw==} - dev: false - - /map-stream@0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} - dev: true - - /md5@2.3.0: - resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} - dependencies: - charenc: 0.0.2 - crypt: 0.0.2 - is-buffer: 1.1.6 - dev: false - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false - - /node-cleanup@2.1.2: - resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} - dev: true - - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - dev: false - - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: 4.0.0 - dev: true - - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - dependencies: - mimic-fn: 4.0.0 - dev: true - - /openai@4.20.1: - resolution: {integrity: sha512-Dd3q8EvINfganZFtg6V36HjrMaihqRgIcKiHua4Nq9aw/PxOP48dhbsk8x5klrxajt5Lpnc1KTOG5i1S6BKAJA==} - hasBin: true - dependencies: - '@types/node': 18.19.1 - '@types/node-fetch': 2.6.9 - abort-controller: 3.0.0 - agentkeepalive: 4.5.0 - digest-fetch: 1.3.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - web-streams-polyfill: 3.2.1 - transitivePeerDependencies: - - encoding - dev: false - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true - - /pause-stream@0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - dependencies: - through: 2.3.8 - dev: true - - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} - engines: {node: '>=14'} - hasBin: true - dev: true - - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: true - - /ps-tree@1.2.0: - resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true - dependencies: - event-stream: 3.3.4 - dev: true - - /replicate@0.22.0: - resolution: {integrity: sha512-jUfvYCcnnzG0l3NzgNLUBRfv7e5ZcZpBWzxGqx3v8bkvJmY0jK19JRtFtBgJFRBye61ggH1zC9cubGkburF82g==} - engines: {git: '>=2.11.0', node: '>=18.0.0', npm: '>=7.19.0', yarn: '>=1.7.0'} - dev: false - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true - - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true - - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true - - /split@0.3.3: - resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} - dependencies: - through: 2.3.8 - dev: true - - /stream-combiner@0.0.4: - resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} - dependencies: - duplexer: 0.1.2 - dev: true - - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false - - /ts-mixer@6.0.3: - resolution: {integrity: sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==} - dev: false - - /tsc-watch@6.0.4(typescript@5.3.2): - resolution: {integrity: sha512-cHvbvhjO86w2aGlaHgSCeQRl+Aqw6X6XN4sQMPZKF88GoP30O+oTuh5lRIJr5pgFWrRpF1AgXnJJ2DoFEIPHyg==} - engines: {node: '>=12.12.0'} - hasBin: true - peerDependencies: - typescript: '*' - dependencies: - cross-spawn: 7.0.3 - node-cleanup: 2.1.2 - ps-tree: 1.2.0 - string-argv: 0.3.2 - typescript: 5.3.2 - dev: true - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - - /typescript@5.3.2: - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - /undici@5.27.2: - resolution: {integrity: sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==} - engines: {node: '>=14.0'} - dependencies: - '@fastify/busboy': 2.1.0 - dev: false - - /web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} - engines: {node: '>= 8'} - dev: false - - /web-streams-polyfill@4.0.0-beta.3: - resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} - engines: {node: '>= 14'} - dev: false - - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - - /ws@8.14.2: - resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true - - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - dependencies: - cliui: 8.0.1 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true diff --git a/src/commands/ask.ts b/src/commands/ask.ts index 1d43803..19fb2b7 100644 --- a/src/commands/ask.ts +++ b/src/commands/ask.ts @@ -1,19 +1,19 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Args, Command } from '@sapphire/framework'; -import { AttachmentBuilder, Message, blockQuote, codeBlock } from 'discord.js'; +import { Command, container } from '@sapphire/framework'; +import { AttachmentBuilder, blockQuote, codeBlock } from 'discord.js'; import OpenAI from 'openai'; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); -// @ts-ignore -@ApplyOptions({ - description: 'You can ACTUALLY ask Himbot something! So cool!', - options: ['prompt'] -}) -export class UserCommand extends Command { - // Register Chat Input and Context Menu command +export class AskCommand extends Command { + public constructor(context: Command.LoaderContext) { + super(context, { + description: 'You can ACTUALLY ask Himbot something! So cool!', + options: ['prompt'] + }); + } + public override registerApplicationCommands(registry: Command.Registry) { registry.registerChatInputCommand((builder) => builder @@ -25,21 +25,10 @@ export class UserCommand extends Command { ); } - // Message command - public async messageRun(message: Message, args: Args) { - return this.ask(message, args.getOption('prompt') || message.content.split('!ask ')[1]); - } - - // Chat Input (slash) command public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.ask(interaction, interaction.options.getString('prompt') || 'NOTHING'); - } + const prompt = interaction.options.getString('prompt'); - private async ask(interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction, prompt: string) { - const askMessage = - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ content: '🤔 Thinking... 🤔' }) - : await interactionOrMessage.reply({ content: '🤔 Thinking... 🤔', fetchReply: true }); + await interaction.reply({ content: '🤔 Thinking... 🤔', fetchReply: true }); const chatCompletion = await openai.chat.completions.create({ model: 'gpt-4-1106-preview', @@ -64,17 +53,7 @@ export class UserCommand extends Command { ); } - if (interactionOrMessage instanceof Message) { - return askMessage.edit({ - content: - content.length < 2000 - ? content - : `Discord only allows messages with 2000 characters or less. Please see your response in the attached file!`, - files: messageAttachment - }); - } - - return interactionOrMessage.editReply({ + return interaction.editReply({ content: content.length < 2000 ? content @@ -83,3 +62,9 @@ export class UserCommand extends Command { }); } } + +void container.stores.loadPiece({ + store: 'commands', + name: 'ask', + piece: AskCommand +}); diff --git a/src/commands/borf.ts b/src/commands/borf.ts index 948a865..c97705f 100644 --- a/src/commands/borf.ts +++ b/src/commands/borf.ts @@ -1,12 +1,12 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Command } from '@sapphire/framework'; -import { Message } from 'discord.js'; +import { Command, container } from '@sapphire/framework'; + +export class BorfCommand extends Command { + public constructor(context: Command.LoaderContext) { + super(context, { + description: 'Borf! Borf!' + }); + } -// @ts-ignore -@ApplyOptions({ - description: 'Borf! Borf!' -}) -export class UserCommand extends Command { // Register Chat Input and Context Menu command public override registerApplicationCommands(registry: Command.Registry) { // Register Chat Input command @@ -16,27 +16,20 @@ export class UserCommand extends Command { }); } - // Message command - public async messageRun(message: Message) { - return this.sendBorf(message); - } - // Chat Input (slash) command public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.sendBorf(interaction); - } - - private async sendBorf(interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction) { const dogResponse = await fetch('https://dog.ceo/api/breeds/image/random'); const dogData = (await dogResponse.json()) as { message: string; status: string }; - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ - content: dogData?.status === 'success' ? dogData.message : 'Error: I had troubles fetching perfect puppies for you... :(' - }) - : await interactionOrMessage.reply({ - content: dogData.status === 'success' ? dogData.message : 'Error: I had troubles fetching perfect puppies for you... :(', - fetchReply: true - }); + await interaction.reply({ + content: dogData.status === 'success' ? dogData.message : 'Error: I had troubles fetching perfect puppies for you... :(', + fetchReply: true + }); } } + +void container.stores.loadPiece({ + store: 'commands', + name: 'borf', + piece: BorfCommand +}); diff --git a/src/commands/hdpic.ts b/src/commands/hdpic.ts index 25ea176..7fa7e79 100644 --- a/src/commands/hdpic.ts +++ b/src/commands/hdpic.ts @@ -1,23 +1,23 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Args, BucketScope, Command } from '@sapphire/framework'; -import { AttachmentBuilder, Message } from 'discord.js'; +import { BucketScope, Command, container } from '@sapphire/framework'; +import { AttachmentBuilder } from 'discord.js'; import OpenAI from 'openai'; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); -// @ts-ignore -@ApplyOptions({ - description: 'Generate an image using OpenAI! Cooldown of 10 Minutes due to cost!', - options: ['prompt'], - cooldownDelay: 480_000, - cooldownLimit: 1, - // Yes... I did hardcode myself. - cooldownFilteredUsers: ['83679718401904640'], - cooldownScope: BucketScope.User -}) -export class UserCommand extends Command { +export class HDPicCommand extends Command { + public constructor(context: Command.LoaderContext) { + super(context, { + description: 'Generate an image using OpenAI! Cooldown of 10 Minutes due to cost!', + options: ['prompt'], + cooldownDelay: 480_000, + cooldownLimit: 1, + cooldownFilteredUsers: ['83679718401904640'], + cooldownScope: BucketScope.User + }); + } + // Register Chat Input and Context Menu command public override registerApplicationCommands(registry: Command.Registry) { registry.registerChatInputCommand((builder) => @@ -30,21 +30,11 @@ export class UserCommand extends Command { ); } - // Message command - public async messageRun(message: Message, args: Args) { - return this.pic(message, args.getOption('prompt') || 'NOTHING'); - } - // Chat Input (slash) command public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.pic(interaction, interaction.options.getString('prompt') || 'NOTHING'); - } + const prompt = interaction.options.getString('prompt') || ''; - private async pic(interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction, prompt: string) { - const askMessage = - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ content: '🤔 Thinking... 🤔' }) - : await interactionOrMessage.reply({ content: '🤔 Thinking... 🤔', fetchReply: true }); + await interaction.reply({ content: '🤔 Thinking... 🤔', fetchReply: true }); try { const response = await openai.images.generate({ @@ -70,22 +60,20 @@ export class UserCommand extends Command { const content = `Prompt: ${prompt}:`; - if (interactionOrMessage instanceof Message) { - return askMessage.edit({ content, files: imageAttachment }); - } - - return interactionOrMessage.editReply({ + return interaction.editReply({ content, files: imageAttachment }); } catch (error) { const content = "Sorry, I can't complete the prompt for: " + prompt + '\n' + error; - if (interactionOrMessage instanceof Message) { - return askMessage.edit({ content }); - } - - return interactionOrMessage.editReply({ content }); + return interaction.editReply({ content }); } } } + +void container.stores.loadPiece({ + store: 'commands', + name: 'hdpic', + piece: HDPicCommand +}); diff --git a/src/commands/hdtts.ts b/src/commands/hdtts.ts index 5833033..10cc4f7 100644 --- a/src/commands/hdtts.ts +++ b/src/commands/hdtts.ts @@ -1,23 +1,24 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Args, BucketScope, Command } from '@sapphire/framework'; -import { AttachmentBuilder, Message, MessageFlags } from 'discord.js'; +import { BucketScope, Command, container } from '@sapphire/framework'; +import { AttachmentBuilder, MessageFlags } from 'discord.js'; import OpenAI from 'openai'; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); -// @ts-ignore -@ApplyOptions({ - description: 'Generate "HD" TTS every 2 minutes!', - options: ['prompt'], - cooldownDelay: 200_000, - cooldownLimit: 1, - // Yes... I did hardcode myself. - cooldownFilteredUsers: ['83679718401904640'], - cooldownScope: BucketScope.User -}) -export class UserCommand extends Command { +export class HDTTSCommand extends Command { + public constructor(context: Command.LoaderContext) { + super(context, { + description: 'Generate "HD" TTS every 2 minutes!', + options: ['prompt'], + cooldownDelay: 200_000, + cooldownLimit: 1, + // Yes... I did hardcode myself. + cooldownFilteredUsers: ['83679718401904640'], + cooldownScope: BucketScope.User + }); + } + // Register Chat Input and Context Menu command public override registerApplicationCommands(registry: Command.Registry) { registry.registerChatInputCommand((builder) => @@ -28,22 +29,11 @@ export class UserCommand extends Command { ); } - // Message command - public async messageRun(message: Message, args: Args) { - return this.tts(message, args.getOption('prompt') || 'NOTHING'); - } - // Chat Input (slash) command public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.tts(interaction, interaction.options.getString('prompt') || 'NOTHING'); - } - - private async tts(interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction, prompt: string) { - const askMessage = - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ content: '🤔 Thinking... 🤔' }) - : await interactionOrMessage.reply({ content: '🤔 Thinking... 🤔', fetchReply: true }); + const prompt = interaction.options.getString('prompt') || 'NOTHING'; + await interaction.reply({ content: '🤔 Thinking... 🤔', fetchReply: true }); try { enum voice { alloy = 'alloy', @@ -73,15 +63,7 @@ export class UserCommand extends Command { const content = `Prompt: ${prompt}:`; - if (interactionOrMessage instanceof Message) { - return askMessage.edit({ - content, - files: mp3Attachment, - flags: '8192' - }); - } - - return interactionOrMessage.editReply({ + return interaction.editReply({ content, files: mp3Attachment, options: { @@ -91,15 +73,15 @@ export class UserCommand extends Command { } catch (error) { const content = "Sorry, I can't complete the prompt for: " + prompt + '\n' + error; - if (interactionOrMessage instanceof Message) { - return askMessage.edit({ - content - }); - } - - return interactionOrMessage.editReply({ + return interaction.editReply({ content }); } } } + +void container.stores.loadPiece({ + store: 'commands', + name: 'hdtts', + piece: HDTTSCommand +}); diff --git a/src/commands/hs.ts b/src/commands/hs.ts index 2c414c9..4c3cc8a 100644 --- a/src/commands/hs.ts +++ b/src/commands/hs.ts @@ -1,13 +1,13 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Args, Command } from '@sapphire/framework'; -import { Message } from 'discord.js'; +import { Command, container } from '@sapphire/framework'; + +export class HighSchoolCommand extends Command { + public constructor(context: Command.LoaderContext) { + super(context, { + description: 'This command was your nickname in highschool!', + options: ['nickname'] + }); + } -// @ts-ignore -@ApplyOptions({ - description: 'This command was your nickname in highschool!', - options: ['nickname'] -}) -export class UserCommand extends Command { // Register Chat Input and Context Menu command public override registerApplicationCommands(registry: Command.Registry) { registry.registerChatInputCommand((builder) => @@ -18,27 +18,18 @@ export class UserCommand extends Command { ); } - // Message command - public async messageRun(message: Message, args: Args) { - return this.sendPing(message, args.getOption('nickname') || message.content.split('!wryna ')[1]); - } - // Chat Input (slash) command public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.sendPing(interaction, interaction.options.getString('nickname') || 'NOTHING'); - } - - private async sendPing( - interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction, - nickname: string - ) { - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ - content: `${nickname} was ${interactionOrMessage.author.username}'s nickname in highschool!` - }) - : await interactionOrMessage.reply({ - content: `${nickname} was ${interactionOrMessage.user.username}'s nickname in highschool!`, - fetchReply: true - }); + const nickname = interaction.options.getString('nickname') || 'NOTHING'; + await interaction.reply({ + content: `${nickname} was ${interaction.user.username}'s nickname in highschool!`, + fetchReply: true + }); } } + +void container.stores.loadPiece({ + store: 'commands', + name: 'hs', + piece: HighSchoolCommand +}); diff --git a/src/commands/pic.ts b/src/commands/pic.ts index 46b22ed..8de66cc 100644 --- a/src/commands/pic.ts +++ b/src/commands/pic.ts @@ -1,24 +1,24 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Args, BucketScope, Command } from '@sapphire/framework'; -import { AttachmentBuilder, Message } from 'discord.js'; +import { BucketScope, Command, container } from '@sapphire/framework'; +import { AttachmentBuilder } from 'discord.js'; import Replicate from 'replicate'; const replicate = new Replicate({ auth: process.env.REPLICATE_API_TOKEN }); -// @ts-ignore -@ApplyOptions({ - description: 'Generate an image using Stability AI! Cooldown 1 Minute to prevent spam!', - options: ['prompt'], - // 10mins - cooldownDelay: 100_000, - cooldownLimit: 1, - // Yes... I did hardcode myself. - cooldownFilteredUsers: ['83679718401904640'], - cooldownScope: BucketScope.User -}) -export class UserCommand extends Command { +export class PicCommand extends Command { + public constructor(context: Command.LoaderContext) { + super(context, { + description: 'Generate an image using Stability AI! Cooldown 1 Minute to prevent spam!', + options: ['prompt'], + cooldownDelay: 100_000, + cooldownLimit: 1, + // Yes... I did hardcode myself. + cooldownFilteredUsers: ['83679718401904640'], + cooldownScope: BucketScope.User + }); + } + // Register Chat Input and Context Menu command public override registerApplicationCommands(registry: Command.Registry) { registry.registerChatInputCommand((builder) => @@ -31,21 +31,11 @@ export class UserCommand extends Command { ); } - // Message command - public async messageRun(message: Message, args: Args) { - return this.picHr(message, args.getOption('prompt') || 'Scold me for not passing any prompt in.'); - } - // Chat Input (slash) command public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.picHr(interaction, interaction.options.getString('prompt') || 'NOTHING'); - } + const prompt = interaction.options.getString('prompt') || 'NOTHING'; - private async picHr(interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction, prompt: string) { - const askMessage = - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ content: '🤔 Thinking... 🤔' }) - : await interactionOrMessage.reply({ content: '🤔 Thinking... 🤔', fetchReply: true }); + await interaction.reply({ content: '🤔 Thinking... 🤔', fetchReply: true }); let result = (await replicate.run('stability-ai/sdxl:39ed52f2a78e934b3ba6e2a89f5b1c712de7dfea535525255b1aa35c5565e08b', { input: { @@ -66,11 +56,7 @@ export class UserCommand extends Command { if (result.length <= 0) { const content = `Sorry, I can't complete the prompt for: ${prompt}`; - if (interactionOrMessage instanceof Message) { - return askMessage.edit({ content }); - } - - return interactionOrMessage.editReply({ + return interaction.editReply({ content: content }); } else { @@ -89,14 +75,16 @@ export class UserCommand extends Command { const content = `Prompt: ${prompt}`; - if (interactionOrMessage instanceof Message) { - return askMessage.edit({ content, files: imageAttachment }); - } - - return interactionOrMessage.editReply({ + return interaction.editReply({ content, files: imageAttachment }); } } } + +void container.stores.loadPiece({ + store: 'commands', + name: 'pic', + piece: PicCommand +}); diff --git a/src/commands/ping.ts b/src/commands/ping.ts deleted file mode 100644 index 04febbe..0000000 --- a/src/commands/ping.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Command } from '@sapphire/framework'; -import { Message } from 'discord.js'; - -// @ts-ignore -@ApplyOptions({ - description: 'Pong!' -}) -export class UserCommand extends Command { - // Register Chat Input and Context Menu command - public override registerApplicationCommands(registry: Command.Registry) { - // Register Chat Input command - registry.registerChatInputCommand({ - name: this.name, - description: this.description - }); - } - - // Message command - public async messageRun(message: Message) { - return this.sendPing(message); - } - - // Chat Input (slash) command - public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.sendPing(interaction); - } - - private async sendPing(interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction) { - const pingMessage = - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ content: 'Ping?' }) - : await interactionOrMessage.reply({ content: 'Ping?', fetchReply: true }); - - const content = `Pong! Bot Latency ${Math.round(this.container.client.ws.ping)}ms. API Latency ${ - pingMessage.createdTimestamp - interactionOrMessage.createdTimestamp - }ms.`; - - if (interactionOrMessage instanceof Message) { - return pingMessage.edit({ content }); - } - - return interactionOrMessage.editReply({ - content: content - }); - } -} diff --git a/src/commands/quack.ts b/src/commands/quack.ts deleted file mode 100644 index 8e04d98..0000000 --- a/src/commands/quack.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Command } from '@sapphire/framework'; -import { Message } from 'discord.js'; - -// @ts-ignore -@ApplyOptions({ - description: 'Quack!' -}) -export class UserCommand extends Command { - // Register Chat Input and Context Menu command - public override registerApplicationCommands(registry: Command.Registry) { - // Register Chat Input command - registry.registerChatInputCommand({ - name: this.name, - description: this.description - }); - } - - // Message command - public async messageRun(message: Message) { - return this.sendQuack(message); - } - - // Chat Input (slash) command - public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.sendQuack(interaction); - } - - private async sendQuack(interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction) { - const duckResponse = await fetch('https://random-d.uk/api/v2/quack'); - const duckData = (await duckResponse.json()) as { url: string }; - - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ - content: duckData.url - }) - : await interactionOrMessage.reply({ - content: duckData.url, - fetchReply: true - }); - } -} diff --git a/src/commands/support.ts b/src/commands/support.ts deleted file mode 100644 index f9ecc78..0000000 --- a/src/commands/support.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Command } from '@sapphire/framework'; -import { Message } from 'discord.js'; - -// @ts-ignore -@ApplyOptions({ - description: "Help support HimBot's AI features." -}) -export class UserCommand extends Command { - // Register Chat Input and Context Menu command - public override registerApplicationCommands(registry: Command.Registry) { - registry.registerChatInputCommand((builder) => builder.setName(this.name).setDescription(this.description)); - } - - // Message command - public async messageRun(message: Message) { - return this.sendSupport(message); - } - - // Chat Input (slash) command - public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.sendSupport(interaction); - } - - private async sendSupport(interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction) { - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ - content: 'Thanks! The link to donate is here: https://buy.stripe.com/eVa6p95ho0Kn33a8wx' - }) - : await interactionOrMessage.reply({ - content: 'Thanks! The link to donate is here: https://buy.stripe.com/eVa6p95ho0Kn33a8wx', - fetchReply: true - }); - } -} diff --git a/src/commands/title.ts b/src/commands/title.ts index 56716dc..c344dab 100644 --- a/src/commands/title.ts +++ b/src/commands/title.ts @@ -1,13 +1,13 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Args, Command } from '@sapphire/framework'; -import { Message } from 'discord.js'; +import { Command, container } from '@sapphire/framework'; + +export class TitleCommand extends Command { + public constructor(context: Command.LoaderContext) { + super(context, { + description: 'This command is the title of your sextape.', + options: ['title'] + }); + } -// @ts-ignore -@ApplyOptions({ - description: 'This command is the title of your sextape.', - options: ['title'] -}) -export class UserCommand extends Command { // Register Chat Input and Context Menu command public override registerApplicationCommands(registry: Command.Registry) { registry.registerChatInputCommand((builder) => @@ -18,27 +18,19 @@ export class UserCommand extends Command { ); } - // Message command - public async messageRun(message: Message, args: Args) { - return this.titleHandler(message, args.getOption('title') || message.content.split('!title ')[1]); - } - // Chat Input (slash) command public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.titleHandler(interaction, interaction.options.getString('title') || 'NOTHING'); - } + const title = interaction.options.getString('title') || 'NOTHING'; - private async titleHandler( - interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction, - title: string - ) { - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ - content: `${title}: Title of ${interactionOrMessage.author.username}'s sex tape!` - }) - : await interactionOrMessage.reply({ - content: `${title}: Title of ${interactionOrMessage.user.username}'s sex tape!`, - fetchReply: true - }); + await interaction.reply({ + content: `${title}: Title of ${interaction.user.username}'s sex tape!`, + fetchReply: true + }); } } + +void container.stores.loadPiece({ + store: 'commands', + name: 'title', + piece: TitleCommand +}); diff --git a/src/commands/tts.ts b/src/commands/tts.ts index afe55a9..8968fd2 100644 --- a/src/commands/tts.ts +++ b/src/commands/tts.ts @@ -1,23 +1,24 @@ -import { ApplyOptions } from '@sapphire/decorators'; -import { Args, BucketScope, Command } from '@sapphire/framework'; -import { AttachmentBuilder, Message, MessageFlags } from 'discord.js'; +import { BucketScope, Command, container } from '@sapphire/framework'; +import { AttachmentBuilder, MessageFlags } from 'discord.js'; import OpenAI from 'openai'; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); -// @ts-ignore -@ApplyOptions({ - description: 'Generate TTS every minute!', - options: ['prompt'], - cooldownDelay: 100_000, - cooldownLimit: 1, - // Yes... I did hardcode myself. - cooldownFilteredUsers: ['83679718401904640'], - cooldownScope: BucketScope.User -}) -export class UserCommand extends Command { +export class TTSCommand extends Command { + public constructor(context: Command.LoaderContext) { + super(context, { + description: 'Generate TTS every minute!', + options: ['prompt'], + cooldownDelay: 100_000, + cooldownLimit: 1, + // Yes... I did hardcode myself. + cooldownFilteredUsers: ['83679718401904640'], + cooldownScope: BucketScope.User + }); + } + // Register Chat Input and Context Menu command public override registerApplicationCommands(registry: Command.Registry) { registry.registerChatInputCommand((builder) => @@ -28,21 +29,11 @@ export class UserCommand extends Command { ); } - // Message command - public async messageRun(message: Message, args: Args) { - return this.tts(message, args.getOption('prompt') || 'NOTHING'); - } - // Chat Input (slash) command public async chatInputRun(interaction: Command.ChatInputCommandInteraction) { - return this.tts(interaction, interaction.options.getString('prompt') || 'NOTHING'); - } + const prompt = interaction.options.getString('prompt') || 'NOTHING'; - private async tts(interactionOrMessage: Message | Command.ChatInputCommandInteraction | Command.ContextMenuCommandInteraction, prompt: string) { - const askMessage = - interactionOrMessage instanceof Message - ? await interactionOrMessage.channel.send({ content: '🤔 Thinking... 🤔' }) - : await interactionOrMessage.reply({ content: '🤔 Thinking... 🤔', fetchReply: true }); + await interaction.reply({ content: '🤔 Thinking... 🤔', fetchReply: true }); try { enum voice { @@ -73,15 +64,7 @@ export class UserCommand extends Command { const content = `Prompt: ${prompt}:`; - if (interactionOrMessage instanceof Message) { - return askMessage.edit({ - content, - files: mp3Attachment, - flags: '8192' - }); - } - - return interactionOrMessage.editReply({ + return interaction.editReply({ content, files: mp3Attachment, options: { @@ -91,15 +74,15 @@ export class UserCommand extends Command { } catch (error) { const content = "Sorry, I can't complete the prompt for: " + prompt + '\n' + error; - if (interactionOrMessage instanceof Message) { - return askMessage.edit({ - content - }); - } - - return interactionOrMessage.editReply({ + return interaction.editReply({ content }); } } } + +void container.stores.loadPiece({ + store: 'commands', + name: 'tts', + piece: TTSCommand +}); diff --git a/src/index.ts b/src/index.ts index 0ebbc69..d7c38da 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,14 @@ import './lib/setup'; +import './listeners/ready'; +import './commands/ask'; +import './commands/borf'; +import './commands/hdpic'; +import './commands/hdtts'; +import './commands/hs'; +import './commands/pic'; +import './commands/title'; +import './commands/tts'; +import './listeners/commands/chatInputCommands/chatInputCommandSuccess'; import { LogLevel, SapphireClient, BucketScope } from '@sapphire/framework'; import { ActivityType, GatewayIntentBits } from 'discord.js'; @@ -18,7 +28,6 @@ const client = new SapphireClient({ level: LogLevel.Debug }, intents: [GatewayIntentBits.DirectMessages, GatewayIntentBits.GuildMessages, GatewayIntentBits.Guilds, GatewayIntentBits.MessageContent], - loadMessageCommandListeners: true, defaultCooldown: { // 10s delay: 10_000, @@ -27,7 +36,8 @@ const client = new SapphireClient({ // Yes... I did hardcode myself. filteredUsers: ['83679718401904640'], scope: BucketScope.User - } + }, + baseUserDirectory: null }); const main = async () => { diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 08e3dce..eeba90c 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,21 +1,11 @@ -import { - container, - type ChatInputCommandSuccessPayload, - type Command, - type ContextMenuCommandSuccessPayload, - type MessageCommandSuccessPayload -} from '@sapphire/framework'; +import { container, type ChatInputCommandSuccessPayload, type Command, type ContextMenuCommandSuccessPayload } from '@sapphire/framework'; import { cyan } from 'colorette'; import type { APIUser, Guild, User } from 'discord.js'; -export function logSuccessCommand(payload: ContextMenuCommandSuccessPayload | ChatInputCommandSuccessPayload | MessageCommandSuccessPayload): void { +export function logSuccessCommand(payload: ContextMenuCommandSuccessPayload | ChatInputCommandSuccessPayload): void { let successLoggerData: ReturnType; - if ('interaction' in payload) { - successLoggerData = getSuccessLoggerData(payload.interaction.guild, payload.interaction.user, payload.command); - } else { - successLoggerData = getSuccessLoggerData(payload.message.guild, payload.message.author, payload.command); - } + successLoggerData = getSuccessLoggerData(payload.interaction.guild, payload.interaction.user, payload.command); container.logger.debug(`${successLoggerData.shard} - ${successLoggerData.commandName} ${successLoggerData.author} ${successLoggerData.sentAt}`); } diff --git a/src/listeners/commands/messageCommands/messageCommandDenied.ts b/src/listeners/commands/messageCommands/messageCommandDenied.ts deleted file mode 100644 index e0ea3e3..0000000 --- a/src/listeners/commands/messageCommands/messageCommandDenied.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { Events, MessageCommandDeniedPayload } from '@sapphire/framework'; -import { Listener, type UserError } from '@sapphire/framework'; - -export class UserEvent extends Listener { - public async run({ context, message: content }: UserError, { message }: MessageCommandDeniedPayload) { - // `context: { silent: true }` should make UserError silent: - // Use cases for this are for example permissions error when running the `eval` command. - if (Reflect.get(Object(context), 'silent')) return; - - return message.reply({ content, allowedMentions: { users: [message.author.id], roles: [] } }); - } -} diff --git a/src/listeners/commands/messageCommands/messageCommandSuccess.ts b/src/listeners/commands/messageCommands/messageCommandSuccess.ts deleted file mode 100644 index bccb0cb..0000000 --- a/src/listeners/commands/messageCommands/messageCommandSuccess.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { MessageCommandSuccessPayload } from '@sapphire/framework'; -import { Listener, LogLevel } from '@sapphire/framework'; -import type { Logger } from '@sapphire/plugin-logger'; -import { logSuccessCommand } from '../../../lib/utils'; - -export class UserEvent extends Listener { - public run(payload: MessageCommandSuccessPayload) { - logSuccessCommand(payload); - } - - public onLoad() { - this.enabled = (this.container.logger as Logger).level <= LogLevel.Debug; - return super.onLoad(); - } -} diff --git a/src/listeners/ready.ts b/src/listeners/ready.ts index aadc73e..f7ab85a 100644 --- a/src/listeners/ready.ts +++ b/src/listeners/ready.ts @@ -1,5 +1,5 @@ import { ApplyOptions } from '@sapphire/decorators'; -import { Listener, Store } from '@sapphire/framework'; +import { Listener, Store, container } from '@sapphire/framework'; import { blue, gray, green, magenta, magentaBright, white, yellow } from 'colorette'; const dev = process.env.NODE_ENV !== 'production'; @@ -41,11 +41,17 @@ ${line03}${dev ? ` ${pad}${blc('<')}${llc('/')}${blc('>')} ${llc('DEVELOPMENT MO const stores = [...client.stores.values()]; const last = stores.pop()!; - for (const store of stores) logger.info(this.styleStore(store, false)); - logger.info(this.styleStore(last, true)); + for (const store of stores) logger.info(this.styleStore(store)); + logger.info(this.styleStore(last)); } - private styleStore(store: Store, last: boolean) { - return gray(`${last ? '└─' : '├─'} Loaded ${this.style(store.size.toString().padEnd(3, ' '))} ${store.name}.`); + private styleStore(store: Store) { + return gray(`${'└─'} Loaded ${this.style(store.size.toString().padEnd(3, ' '))} ${store.name}.`); } } + +void container.stores.loadPiece({ + piece: UserEvent, + name: 'ready', + store: 'listeners' +});