From 8a53dcaa8498a12e2b186717d8f32a98428f715e Mon Sep 17 00:00:00 2001 From: bravo68web Date: Sun, 11 Aug 2024 12:08:59 +0000 Subject: [PATCH 1/2] feat: added Discord Bot as zer0bin client --- .github/workflows/ci-build.yaml | 11 +++--- README.md | 5 +-- apps/discord/README.md | 3 ++ apps/discord/api.ts | 30 +++++++++++++++++ apps/discord/bot.ts | 56 +++++++++++++++++++++++++++++++ apps/discord/command.ts | 29 ++++++++++++++++ apps/discord/config.example.json | 9 +++++ apps/discord/index.ts | 30 +++++++++++++++++ apps/discord/package.json | 23 +++++++++++++ apps/discord/tsconfig.json | 11 ++++++ apps/frontend/package.json | 2 +- assets/discord.png | Bin 0 -> 24553 bytes 12 files changed, 200 insertions(+), 9 deletions(-) create mode 100644 apps/discord/README.md create mode 100644 apps/discord/api.ts create mode 100644 apps/discord/bot.ts create mode 100644 apps/discord/command.ts create mode 100644 apps/discord/config.example.json create mode 100644 apps/discord/index.ts create mode 100644 apps/discord/package.json create mode 100644 apps/discord/tsconfig.json create mode 100644 assets/discord.png diff --git a/.github/workflows/ci-build.yaml b/.github/workflows/ci-build.yaml index 531439a..573fb36 100644 --- a/.github/workflows/ci-build.yaml +++ b/.github/workflows/ci-build.yaml @@ -26,12 +26,11 @@ jobs: - name: Installing Rust uses: actions-rust-lang/setup-rust-toolchain@v1 - # - name: Building with Cargo - # uses: actions-rs/cargo@v1 - # with: - # command: build - # args: --release --manifest-path Cargo.toml - # use-cross: true + - name: Set Example Config + run: | + cp apps/discord/config.example.json apps/discord/config.json + cp apps/frontend/config.example.json apps/frontend/config.json + cp packages/backend/config.example.json packages/backend/config.json - name: Build packages shell: bash diff --git a/README.md b/README.md index 5a15c5d..1f74951 100755 --- a/README.md +++ b/README.md @@ -46,12 +46,13 @@ - 📱 Mobile-friendly UI - 🧈 Super smooth scrolling - 🖼️ Badge generation for stats (seen below) +- 🤖 Discord Bot application # Technologies used ### Frontend: - + ### Backend: @@ -59,7 +60,7 @@ ### Misc: - + ###### (Sorta) made with [Skill Icons](https://skillicons.dev/) diff --git a/apps/discord/README.md b/apps/discord/README.md new file mode 100644 index 0000000..83b9775 --- /dev/null +++ b/apps/discord/README.md @@ -0,0 +1,3 @@ +## zer0bin Discord Bot + +![Discord](../../assets/discord.png) \ No newline at end of file diff --git a/apps/discord/api.ts b/apps/discord/api.ts new file mode 100644 index 0000000..1861f29 --- /dev/null +++ b/apps/discord/api.ts @@ -0,0 +1,30 @@ +import config from './config.json'; + +const API_URL = config.api_url; +const PUBLIC_URL = config.public_url; + +export const postPaste = async (content: string) => { + let paste_url; + let success = false; + const payload = { content, single_view: false } + + await fetch(`${API_URL}/p/n`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(payload), + }) + .then((response) => response.json()) + .then((data) => { + if (data["success"]) { + success = true; + paste_url = `${PUBLIC_URL}/${data["data"]["id"]}`; + } + }) + .catch((error) => { + console.error("Error:", error); + }); + + return { success, paste_url }; +} \ No newline at end of file diff --git a/apps/discord/bot.ts b/apps/discord/bot.ts new file mode 100644 index 0000000..3db3ea8 --- /dev/null +++ b/apps/discord/bot.ts @@ -0,0 +1,56 @@ +import { Client, GatewayIntentBits, ModalBuilder, ActionRowBuilder, Events, TextInputBuilder, TextInputStyle, ModalActionRowComponentBuilder } from 'discord.js'; +import { postPaste } from './api'; + +const client = new Client({ intents: [GatewayIntentBits.Guilds] }); + +const uploadModal = () => { + const modal = new ModalBuilder() + .setTitle('zer0bin paste') + .setCustomId('uploadModal') + + const rawTextInput = new TextInputBuilder() + .setCustomId('rawText') + .setLabel("Paste your text here") + .setStyle(TextInputStyle.Paragraph); + + const actionRow = new ActionRowBuilder() + .addComponents(rawTextInput); + + modal.addComponents(actionRow); + + return modal; +} + +export const app = async (token: string) =>{ + client.on('ready', () => { + if(!client.user){ + return; + } + console.log(`Logged in as ${client.user.tag}!`); + }); + + client.on(Events.InteractionCreate, async interaction => { + if (!interaction.isChatInputCommand()) return; + + if (interaction.commandName === 'snip') { + await interaction.showModal(uploadModal()); + } + }); + + client.on(Events.InteractionCreate, async interaction => { + if (!interaction.isModalSubmit()) return; + + if (interaction.customId === 'uploadModal') { + const rawText = interaction.fields.getTextInputValue('rawText'); + const { success, paste_url } = await postPaste(rawText); + if (!success) { + await interaction.reply({ content: 'There was an error processing your submission', ephemeral: true }); + return; + } + await interaction.reply({ content: `Your paste has been uploaded to ${paste_url}`, ephemeral: true }); + await interaction.user.send(`Your paste has been uploaded to ${paste_url}`); + } + }); + + client.login(token); +} \ No newline at end of file diff --git a/apps/discord/command.ts b/apps/discord/command.ts new file mode 100644 index 0000000..70e6d1b --- /dev/null +++ b/apps/discord/command.ts @@ -0,0 +1,29 @@ +import { REST, Routes } from 'discord.js'; + +export interface Command { + name: string; + description: string; +} + +export class CommandManager { + private commands : Command[] = []; + private rest_client : REST; + private client_id : string; + private guild_id : string; + + constructor(token: string, client_id: string, guild_id: string) { + this.rest_client = new REST({ version: '10' }).setToken(token); + this.client_id = client_id; + this.guild_id = guild_id; + } + + public addCommand = (command: Command) =>{ + this.commands.push(command); + } + + public registerCommands = async () => { + await this.rest_client.put(Routes.applicationGuildCommands(this.client_id, this.guild_id), { body: this.commands }); + console.log(`Registered ${this.commands.length} commands.`); + } +} + diff --git a/apps/discord/config.example.json b/apps/discord/config.example.json new file mode 100644 index 0000000..d7032d5 --- /dev/null +++ b/apps/discord/config.example.json @@ -0,0 +1,9 @@ +{ + "api_url": "https://yourdomain.tld/api", + "public_url": "https://yourdomain.tld", + "discord": { + "token": "your_token_here", + "guild_id": "your_guild_id_here", + "client_id": "your_client_id_here" + } +} diff --git a/apps/discord/index.ts b/apps/discord/index.ts new file mode 100644 index 0000000..70c238e --- /dev/null +++ b/apps/discord/index.ts @@ -0,0 +1,30 @@ +import config from './config.json'; + +import { CommandManager, Command } from "./command"; +import { app } from "./bot"; + +if( + !config.api_url && + !config.discord.token && + !config.discord.client_id && + !config.discord.guild_id && + !config.public_url +){ + console.error("Please set DISCORD_TOKEN and DISCORD_CLIENT_ID in config.json file"); + process.exit(1); +} + +const uploadCommand: Command = { + name: "snip", + description: "Upload a text snippet" +}; + +const commandManager = new CommandManager(config.discord.token, config.discord.client_id, config.discord.guild_id); + +commandManager.addCommand(uploadCommand); + +await commandManager.registerCommands(); + +await app( + config.discord.token +); \ No newline at end of file diff --git a/apps/discord/package.json b/apps/discord/package.json new file mode 100644 index 0000000..49a3e6d --- /dev/null +++ b/apps/discord/package.json @@ -0,0 +1,23 @@ +{ + "name": "discord", + "version": "1.3.0", + "main": "index.ts", + "type": "module", + "optionalDependencies": { + "bufferutil": "4.0.8", + "utf-8-validate": "6.0.4", + "zlib-sync": "0.1.9" + }, + "scripts": { + "build": "tsc", + "dev": "node --loader @esbuild-kit/esm-loader index.ts" + }, + "dependencies": { + "discord.js": "^14.15.3", + "dotenv": "^16.4.5" + }, + "devDependencies": { + "@bravo68web/tsconfig": "^1.2.4", + "@esbuild-kit/esm-loader": "^2.6.5" + } +} diff --git a/apps/discord/tsconfig.json b/apps/discord/tsconfig.json new file mode 100644 index 0000000..d40fce1 --- /dev/null +++ b/apps/discord/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@bravo68web/tsconfig/nobuild.json", + "compilerOptions": { + "outDir": "dist", + "noEmit": false, + }, + "exclude": [ + "node_modules", + "dist" + ] +} \ No newline at end of file diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 6d0f194..39b2f54 100755 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -1,7 +1,7 @@ { "name": "zer0bin", "source": "index.pug", - "version": "1.2.0", + "version": "1.3.0", "browserslist": "> 0.5%, last 2 versions, not dead", "license": "MIT", "scripts": { diff --git a/assets/discord.png b/assets/discord.png new file mode 100644 index 0000000000000000000000000000000000000000..e989d338da0e2d3766378e92b545c8f2f931d839 GIT binary patch literal 24553 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
  • 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 W+ Date: Sun, 11 Aug 2024 12:09:27 +0000 Subject: [PATCH 2/2] bump: release v1.3.0 --- package.json | 2 +- packages/backend/package.json | 2 +- pnpm-lock.yaml | 517 +++++++++++++++++++++++++++++++++- 3 files changed, 518 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 42a55df..7b86ff7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zer0bin", - "version": "1.0.0", + "version": "1.3.0", "description": "", "main": "index.js", "scripts": { diff --git a/packages/backend/package.json b/packages/backend/package.json index de5de60..c05d859 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "backend", - "version": "0.0.0", + "version": "1.3.0", "description": "A simple backend for zer0bin", "scripts": { "build": "cargo build --release", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 55d2a45..f118e9d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,32 @@ importers: apps/cli: {} + apps/discord: + dependencies: + discord.js: + specifier: ^14.15.3 + version: 14.15.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + optionalDependencies: + bufferutil: + specifier: 4.0.8 + version: 4.0.8 + utf-8-validate: + specifier: 6.0.4 + version: 6.0.4 + zlib-sync: + specifier: 0.1.9 + version: 0.1.9 + devDependencies: + '@bravo68web/tsconfig': + specifier: ^1.2.4 + version: 1.2.4(typescript@5.5.4) + '@esbuild-kit/esm-loader': + specifier: ^2.6.5 + version: 2.6.5 + apps/frontend: dependencies: '@ant-design/icons-svg': @@ -95,6 +121,186 @@ packages: to-fast-properties: 2.0.0 dev: true + /@bravo68web/tsconfig@1.2.4(typescript@5.5.4): + resolution: {integrity: sha512-cuoez8hUeO5Eqg1fcBsY/uhc5rpSo7OJhrh0BOcyB6Fpqm8IySuTvnAn3T1GUldL1Q19ajmvwMLp2bT91+5xLA==} + peerDependencies: + typescript: 5.x + dependencies: + typescript: 5.5.4 + dev: true + + /@discordjs/builders@1.8.2: + resolution: {integrity: sha512-6wvG3QaCjtMu0xnle4SoOIeFB4y6fKMN6WZfy3BMKJdQQtPLik8KGzDwBVL/+wTtcE/ZlFjgEk74GublyEVZ7g==} + engines: {node: '>=16.11.0'} + dependencies: + '@discordjs/formatters': 0.4.0 + '@discordjs/util': 1.1.0 + '@sapphire/shapeshift': 3.9.7 + discord-api-types: 0.37.83 + fast-deep-equal: 3.1.3 + ts-mixer: 6.0.4 + 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.1.0: + resolution: {integrity: sha512-mLcTACtXUuVgutoznkh6hS3UFqYirDYAg5Dc1m8xn6OvPjetnUlf/xjtqnnc47OwWdaoCQnHmHh9KofhD6uRqw==} + engines: {node: '>=18'} + dev: false + + /@discordjs/formatters@0.4.0: + resolution: {integrity: sha512-fJ06TLC1NiruF35470q3Nr1bi95BdvKFAF+T5bNfZJ4bNdqZ3VZ+Ttg6SThqTxm6qumSG3choxLBHMC69WXNXQ==} + engines: {node: '>=16.11.0'} + dependencies: + discord-api-types: 0.37.83 + dev: false + + /@discordjs/rest@2.3.0: + resolution: {integrity: sha512-C1kAJK8aSYRv3ZwMG8cvrrW4GN0g5eMdP8AuN8ODH5DyOCbHgJspze1my3xHOAgwLJdKUbWNVyAeJ9cEdduqIg==} + engines: {node: '>=16.11.0'} + dependencies: + '@discordjs/collection': 2.1.0 + '@discordjs/util': 1.1.0 + '@sapphire/async-queue': 1.5.3 + '@sapphire/snowflake': 3.5.3 + '@vladfrangu/async_event_emitter': 2.4.5 + discord-api-types: 0.37.83 + magic-bytes.js: 1.10.0 + tslib: 2.6.2 + undici: 6.13.0 + dev: false + + /@discordjs/util@1.1.0: + resolution: {integrity: sha512-IndcI5hzlNZ7GS96RV3Xw1R2kaDuXEp7tRIy/KlhidpN/BQ1qh1NZt3377dMLTa44xDUNKT7hnXkA/oUAzD/lg==} + engines: {node: '>=16.11.0'} + dev: false + + /@discordjs/ws@1.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4): + resolution: {integrity: sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA==} + engines: {node: '>=16.11.0'} + dependencies: + '@discordjs/collection': 2.1.0 + '@discordjs/rest': 2.3.0 + '@discordjs/util': 1.1.0 + '@sapphire/async-queue': 1.5.3 + '@types/ws': 8.5.12 + '@vladfrangu/async_event_emitter': 2.4.5 + discord-api-types: 0.37.83 + tslib: 2.6.2 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@esbuild-kit/core-utils@3.3.2: + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + dev: true + + /@esbuild-kit/esm-loader@2.6.5: + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.7.6 + dev: true + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.14.54: resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} engines: {node: '>=12'} @@ -104,17 +310,153 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@popperjs/core@2.11.8: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false + /@sapphire/async-queue@1.5.3: + resolution: {integrity: sha512-x7zadcfJGxFka1Q3f8gCts1F0xMwCKbZweM85xECGI0hBTeIZJGGCrHgLggihBoprlQ/hBmDR5LKfIPqnmHM3w==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + dev: false + + /@sapphire/shapeshift@3.9.7: + resolution: {integrity: sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==} + engines: {node: '>=v16'} + dependencies: + fast-deep-equal: 3.1.3 + lodash: 4.17.21 + dev: false + + /@sapphire/snowflake@3.5.3: + resolution: {integrity: sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + dev: false + /@types/core-js@2.5.8: resolution: {integrity: sha512-VgnAj6tIAhJhZdJ8/IpxdatM8G4OD3VWGlp6xIxUGENZlpbob9Ty4VVdC1FIEp0aK6DBscDDjyzy5FB60TuNqg==} dev: true /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - dev: true + + /@types/ws@8.5.12: + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + dependencies: + '@types/node': 17.0.45 + dev: false + + /@vladfrangu/async_event_emitter@2.4.5: + resolution: {integrity: sha512-J7T3gUr3Wz0l7Ni1f9upgBZ7+J22/Q1B7dl0X6fG+fTsD+H+31DIosMHj4Um1dWQwqbcQ3oQf+YS2foYkDc9cQ==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + dev: false /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} @@ -164,6 +506,18 @@ packages: fill-range: 7.0.1 dev: true + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.1 + dev: false + /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -248,10 +602,40 @@ packages: gopd: 1.0.1 dev: true + /discord-api-types@0.37.83: + resolution: {integrity: sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==} + dev: false + + /discord.js@14.15.3(bufferutil@4.0.8)(utf-8-validate@6.0.4): + resolution: {integrity: sha512-/UJDQO10VuU6wQPglA4kz2bw2ngeeSbogiIPx/TsnctfzV/tNf+q+i1HlgtX1OGpeOBpJH9erZQNO5oRM2uAtQ==} + engines: {node: '>=16.11.0'} + dependencies: + '@discordjs/builders': 1.8.2 + '@discordjs/collection': 1.5.3 + '@discordjs/formatters': 0.4.0 + '@discordjs/rest': 2.3.0 + '@discordjs/util': 1.1.0 + '@discordjs/ws': 1.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@sapphire/snowflake': 3.5.3 + discord-api-types: 0.37.83 + fast-deep-equal: 3.1.3 + lodash.snakecase: 4.1.1 + tslib: 2.6.2 + undici: 6.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /doctypes@1.1.0: resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} dev: true + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: false + /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -473,6 +857,40 @@ packages: esbuild-windows-arm64: 0.14.54 dev: true + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: false + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -512,6 +930,12 @@ packages: hasown: 2.0.2 dev: true + /get-tsconfig@4.7.6: + resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -645,6 +1069,18 @@ packages: promise: 7.3.1 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.10.0: + resolution: {integrity: sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==} + dev: false + /marked@4.3.0: resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} engines: {node: '>= 12'} @@ -655,6 +1091,12 @@ packages: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true + /nan@2.20.0: + resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} + requiresBuild: true + dev: false + optional: true + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -665,6 +1107,12 @@ packages: resolution: {integrity: sha512-pB5jzGQYN2Bxqh0iXPgJkTMGG7pmSB1eEG2xnpHxci6n7LovzViUzRXW/aqEnPHaH6orbA3bfniZe3xjG4EgEw==} dev: false + /node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + requiresBuild: true + dev: false + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -801,6 +1249,10 @@ packages: picomatch: 2.3.1 dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -852,6 +1304,18 @@ packages: engines: {node: '>=0.10.0'} dev: true + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -886,10 +1350,18 @@ packages: resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} dev: true + /ts-mixer@6.0.4: + resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} + dev: false + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: false + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + /turbo-darwin-64@1.13.2: resolution: {integrity: sha512-CCSuD8CfmtncpohCuIgq7eAzUas0IwSbHfI8/Q3vKObTdXyN8vAo01gwqXjDGpzG9bTEVedD0GmLbD23dR0MLA==} cpu: [x64] @@ -950,11 +1422,30 @@ packages: turbo-windows-arm64: 1.13.2 dev: true + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /undici@6.13.0: + resolution: {integrity: sha512-Q2rtqmZWrbP8nePMq7mOJIN98M0fYvSgV89vwl/BQRT4mDOeY2GXZngfGpcBBhtky3woM7G24wZV3Q304Bv6cw==} + engines: {node: '>=18.0'} + dev: false + /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} dev: true + /utf-8-validate@6.0.4: + resolution: {integrity: sha512-xu9GQDeFp+eZ6LnCywXN/zBancWvOpUMzgjLPSjy4BRHSmTelvn2E0DG0o1sTiw5hkCKBHo8rwSKncfRfv2EEQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.1 + dev: false + /vite-plugin-compression@0.5.1(vite@2.9.18): resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} peerDependencies: @@ -1014,3 +1505,27 @@ packages: assert-never: 1.2.1 babel-walk: 3.0.0-canary-5 dev: true + + /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4): + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + 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 + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 6.0.4 + dev: false + + /zlib-sync@0.1.9: + resolution: {integrity: sha512-DinB43xCjVwIBDpaIvQqHbmDsnYnSt6HJ/yiB2MZQGTqgPcwBSZqLkimXwK8BvdjQ/MaZysb5uEenImncqvCqQ==} + requiresBuild: true + dependencies: + nan: 2.20.0 + dev: false + optional: true