From 8b9f45dc22de29dc2ccb1cfab9a026db00457e25 Mon Sep 17 00:00:00 2001 From: reis Date: Fri, 23 Jun 2023 21:29:00 +0300 Subject: [PATCH] feat: refactor and new features (#7) * feat: refactor and new features + Refactored the codebase + OCR support in bots + Server sends training data every minute + Not using collectors for Discord feedback buttons anymore + Fixed grammar mistakes + Configs are now seperated + Tokens are no longer in configs - Like feedback doesn't work for Discord yet * feat: remove feedback button once voted * feat: role blacklist * feat: thread name check * feat: error handler for training * fix: bot crashing when a webhook msg is sent * refactor: remove debugging lines * feat: allow fixing mistake at votes in discord bot --- .gitignore | 5 +- .../src/commands/feedbackDislike.js | 20 + apps/bot-discord/src/commands/feedbackLike.js | 29 + .../bot-discord/src}/commands/trainMessage.js | 0 apps/bot-discord/src/config.example.json | 32 + apps/bot-discord/src/config.json | 32 + .../src/events}/interactionCreate.js | 14 +- apps/bot-discord/src/events/messageCreate.js | 19 + apps/bot-discord/src/events/threadCreate.js | 9 + .../src/helperEvents/aiResponse.js | 72 ++ .../src/helperEvents/ocrResponse.js | 31 + apps/bot-discord/src/index.js | 82 ++ apps/bot-discord/src/package-lock.json | 685 +++++++++++ apps/bot-discord/src/package.json | 14 + .../bot-discord/src}/registerCommands.js | 4 +- .../src/utils/trainAISelectMenu.js | 77 ++ .../bot-telegram/src}/commands/train.js | 0 apps/bot-telegram/src/config.example.json | 26 + apps/bot-telegram/src/config.json | 25 + .../bot-telegram/src/events}/callbackQuery.js | 2 +- apps/bot-telegram/src/events/message.js | 15 + .../src/helperEvents}/aiResponse.js | 1 + .../src/helperEvents/ocrResponse.js | 24 + apps/bot-telegram/src/index.js | 66 + .../bot-telegram/src}/package-lock.json | 1061 ++++++----------- .../bot-telegram/src}/package.json | 8 +- {server => apps/server/src}/PROTOCOL.md | 0 apps/server/src/events/index.js | 5 + .../ai.js => apps/server/src/events/runAI.js | 10 +- apps/server/src/events/runOCR.js | 61 + apps/server/src/events/trainAI.js | 17 + {server => apps/server/src}/index.js | 11 +- apps/server/src/package-lock.json | 228 ++++ {bots => apps/server/src}/package.json | 8 +- bots/config.example.json | 36 - bots/discord/events/discord/messageCreate.js | 13 - bots/discord/events/helper/aiResponse.js | 88 -- bots/discord/events/helper/ocrResponse.js | 7 - bots/discord/index.js | 85 -- bots/discord/package-lock.json | 13 - bots/discord/utils/trainAISelectMenu.js | 48 - bots/index.js | 13 - bots/reddit/commands/train.js | 37 - bots/reddit/events/helper/aiResponse.js | 38 - bots/reddit/index.js | 105 -- bots/reddit/package-lock.json | 13 - bots/reddit/package.json | 12 - bots/telegram/events/telegram/message.js | 11 - bots/telegram/index.js | 69 -- bots/telegram/package-lock.json | 13 - bots/telegram/package.json | 12 - {client => packages/client}/index.js | 0 {client => packages/client}/package-lock.json | 0 {client => packages/client}/package.json | 2 +- server/config.example.json | 8 - server/events/index.js | 5 - server/events/ocr.js | 22 - server/events/train.js | 18 - server/package-lock.json | 178 --- server/package.json | 14 - 60 files changed, 1962 insertions(+), 1591 deletions(-) create mode 100644 apps/bot-discord/src/commands/feedbackDislike.js create mode 100644 apps/bot-discord/src/commands/feedbackLike.js rename {bots/discord => apps/bot-discord/src}/commands/trainMessage.js (100%) create mode 100644 apps/bot-discord/src/config.example.json create mode 100644 apps/bot-discord/src/config.json rename {bots/discord/events/discord => apps/bot-discord/src/events}/interactionCreate.js (65%) create mode 100644 apps/bot-discord/src/events/messageCreate.js create mode 100644 apps/bot-discord/src/events/threadCreate.js create mode 100644 apps/bot-discord/src/helperEvents/aiResponse.js create mode 100644 apps/bot-discord/src/helperEvents/ocrResponse.js create mode 100644 apps/bot-discord/src/index.js create mode 100644 apps/bot-discord/src/package-lock.json create mode 100644 apps/bot-discord/src/package.json rename {bots/discord => apps/bot-discord/src}/registerCommands.js (92%) create mode 100644 apps/bot-discord/src/utils/trainAISelectMenu.js rename {bots/telegram => apps/bot-telegram/src}/commands/train.js (100%) create mode 100644 apps/bot-telegram/src/config.example.json create mode 100644 apps/bot-telegram/src/config.json rename {bots/telegram/events/telegram => apps/bot-telegram/src/events}/callbackQuery.js (90%) create mode 100644 apps/bot-telegram/src/events/message.js rename {bots/telegram/events/helper => apps/bot-telegram/src/helperEvents}/aiResponse.js (97%) create mode 100644 apps/bot-telegram/src/helperEvents/ocrResponse.js create mode 100644 apps/bot-telegram/src/index.js rename {bots => apps/bot-telegram/src}/package-lock.json (73%) rename {bots/discord => apps/bot-telegram/src}/package.json (51%) rename {server => apps/server/src}/PROTOCOL.md (100%) create mode 100644 apps/server/src/events/index.js rename server/events/ai.js => apps/server/src/events/runAI.js (50%) create mode 100644 apps/server/src/events/runOCR.js create mode 100644 apps/server/src/events/trainAI.js rename {server => apps/server/src}/index.js (62%) create mode 100644 apps/server/src/package-lock.json rename {bots => apps/server/src}/package.json (60%) delete mode 100644 bots/config.example.json delete mode 100644 bots/discord/events/discord/messageCreate.js delete mode 100644 bots/discord/events/helper/aiResponse.js delete mode 100644 bots/discord/events/helper/ocrResponse.js delete mode 100644 bots/discord/index.js delete mode 100644 bots/discord/package-lock.json delete mode 100644 bots/discord/utils/trainAISelectMenu.js delete mode 100644 bots/index.js delete mode 100644 bots/reddit/commands/train.js delete mode 100644 bots/reddit/events/helper/aiResponse.js delete mode 100644 bots/reddit/index.js delete mode 100644 bots/reddit/package-lock.json delete mode 100644 bots/reddit/package.json delete mode 100644 bots/telegram/events/telegram/message.js delete mode 100644 bots/telegram/index.js delete mode 100644 bots/telegram/package-lock.json delete mode 100644 bots/telegram/package.json rename {client => packages/client}/index.js (100%) rename {client => packages/client}/package-lock.json (100%) rename {client => packages/client}/package.json (87%) delete mode 100644 server/config.example.json delete mode 100644 server/events/index.js delete mode 100644 server/events/ocr.js delete mode 100644 server/events/train.js delete mode 100644 server/package-lock.json delete mode 100644 server/package.json diff --git a/.gitignore b/.gitignore index 0b9429e..4fa1d7b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ node_modules model test.js -config.json \ No newline at end of file +eng.traineddata +bots/* +server/**/** +test/* \ No newline at end of file diff --git a/apps/bot-discord/src/commands/feedbackDislike.js b/apps/bot-discord/src/commands/feedbackDislike.js new file mode 100644 index 0000000..53de94b --- /dev/null +++ b/apps/bot-discord/src/commands/feedbackDislike.js @@ -0,0 +1,20 @@ +import trainAISelectMenu from '../utils/trainAISelectMenu.js'; + +export default { + data: { + name: 'fb-dislike' + }, + async execute(helper, config, interaction) { + if ( + interaction.member.roles.highest.comparePositionTo( + config.discord.trainRole + ) < 0 + ) + return interaction.reply({ + content: 'You don\'t have the permission to do this.', + ephemeral: true + }); + + trainAISelectMenu(interaction, config, helper); + } +}; diff --git a/apps/bot-discord/src/commands/feedbackLike.js b/apps/bot-discord/src/commands/feedbackLike.js new file mode 100644 index 0000000..e00f3de --- /dev/null +++ b/apps/bot-discord/src/commands/feedbackLike.js @@ -0,0 +1,29 @@ +export default { + data: { + name: 'fb-like' + }, + async execute(helper, config, interaction) { + if ( + interaction.member.roles.highest.comparePositionTo( + config.discord.trainRole + ) < 0 + ) + return interaction.reply({ + content: 'You don\'t have the permission to do this.', + ephemeral: true + }); + // FIXME: somehow get the intent? + // maybe storing in a collection and fetching the msg id with its label? + /* + helper.sendTrainData(interactedMessage, i.values[0]); + + i.reply({ content: 'Sent training data to server.', ephemeral: true }); + + interaction.message.edit({ components: [] }); + */ + interaction.reply({ + content: 'Feature currently not available. Please use the dislike button.', + ephemeral: true + }) + } +}; diff --git a/bots/discord/commands/trainMessage.js b/apps/bot-discord/src/commands/trainMessage.js similarity index 100% rename from bots/discord/commands/trainMessage.js rename to apps/bot-discord/src/commands/trainMessage.js diff --git a/apps/bot-discord/src/config.example.json b/apps/bot-discord/src/config.example.json new file mode 100644 index 0000000..76cf576 --- /dev/null +++ b/apps/bot-discord/src/config.example.json @@ -0,0 +1,32 @@ +{ + "discord": { + "trainRole": "955220417969262612", + "botId": "1038762591805247518", + "ignoreRole": "1027874293192863765" + }, + "server": { + "port": 3000, + "host": "192.168.1.6" + }, + "responses": [ + { + "label": "revanced_download", + "threshold": 0.85, + "reply": { + "title": "How to download ReVanced?", + "description": "You don't.", + "color": 14908858 + } + } + ], + "ocrResponses": [ + { + "regex": "is not installed", + "reply": { + "title": "Why can't I download videos", + "description": "Because you didn't install the app.", + "color": 14908858 + } + } + ] +} \ No newline at end of file diff --git a/apps/bot-discord/src/config.json b/apps/bot-discord/src/config.json new file mode 100644 index 0000000..2521b32 --- /dev/null +++ b/apps/bot-discord/src/config.json @@ -0,0 +1,32 @@ +{ + "discord": { + "trainRole": "955220417969262612", + "botId": "1038762591805247518", + "ignoreRole": "1027874293192863765" + }, + "server": { + "port": 3000, + "host": "127.0.0.1" + }, + "responses": [ + { + "label": "revanced_download", + "threshold": 0.85, + "reply": { + "title": "How to download ReVanced?", + "description": "You don't.", + "color": 14908858 + } + } + ], + "ocrResponses": [ + { + "regex": "is not installed", + "reply": { + "title": "Why can't I download videos", + "description": "Because you didn't install the app.", + "color": 14908858 + } + } + ] +} \ No newline at end of file diff --git a/bots/discord/events/discord/interactionCreate.js b/apps/bot-discord/src/events/interactionCreate.js similarity index 65% rename from bots/discord/events/discord/interactionCreate.js rename to apps/bot-discord/src/events/interactionCreate.js index d483336..6cf9477 100644 --- a/bots/discord/events/discord/interactionCreate.js +++ b/apps/bot-discord/src/events/interactionCreate.js @@ -4,18 +4,10 @@ export default { name: Events.InteractionCreate, once: false, async execute(helper, config, interaction) { - if (!interaction.isMessageContextMenuCommand()) { - if (!interaction.isChatInputCommand()) return; - } + const command = interaction.client.commands.get(interaction.commandName || interaction.customId); - const command = interaction.client.commands.get(interaction.commandName); - - if (!command) { - console.error( - `No command matching ${interaction.commandName} was found.` - ); - return; - } + // It's the select menu interaction (hopefully), ignore. + if (!command) return; try { await command.execute(helper, config, interaction); diff --git a/apps/bot-discord/src/events/messageCreate.js b/apps/bot-discord/src/events/messageCreate.js new file mode 100644 index 0000000..3e94179 --- /dev/null +++ b/apps/bot-discord/src/events/messageCreate.js @@ -0,0 +1,19 @@ +import { Events } from 'discord.js'; + +export default { + name: Events.MessageCreate, + once: false, + execute(helper, config, msg) { + if (!msg.guild || msg.system || msg.webhookId) return; + if (msg.member.roles.cache.some(role => role.id === config.discord.ignoreRole)) return; + if (msg.attachments.first() && msg.attachments.first().contentType.startsWith('image')) { + helper.scanImage(msg.attachments.first().url, `${msg.channelId}/${msg.id}`); + } + + if (!msg.content || msg.author.bot) return; + helper.scanText( + msg.content.toLowerCase().replace(/<.*?>/g, ''), + `${msg.channelId}/${msg.id}` + ); + } +}; diff --git a/apps/bot-discord/src/events/threadCreate.js b/apps/bot-discord/src/events/threadCreate.js new file mode 100644 index 0000000..d242e65 --- /dev/null +++ b/apps/bot-discord/src/events/threadCreate.js @@ -0,0 +1,9 @@ +import { Events } from 'discord.js'; + +export default { + name: Events.ThreadCreate, + once: false, + async execute(helper, _, thread) { + helper.scanText(thread.name.toLowerCase(), thread.id); + } +}; diff --git a/apps/bot-discord/src/helperEvents/aiResponse.js b/apps/bot-discord/src/helperEvents/aiResponse.js new file mode 100644 index 0000000..198cab6 --- /dev/null +++ b/apps/bot-discord/src/helperEvents/aiResponse.js @@ -0,0 +1,72 @@ +import { + EmbedBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle +} from 'discord.js'; + +export default { + name: 'aiResponse', + once: false, + async execute(client, config, helper, aiRes) { + if (!aiRes.response) return; + if (!aiRes.response[0]) return; + + try { + const ids = aiRes.id.split('/'); + + const intent = aiRes.response.reduce((a, b) => + a.confidence > b.confidence ? a : b + ); + + const response = config.responses.find( + (res) => res.label === intent.name + ); + + if (response.threshold > intent.confidence) return; + if (!response.reply) return; + + const embed = response.reply; + embed.footer = { text: `Confidence: ${intent.confidence}` }; + + const feedbackRow = new ActionRowBuilder().addComponents( + new ButtonBuilder() + .setCustomId('fb-like') + .setEmoji('👍') + .setStyle(ButtonStyle.Primary), + new ButtonBuilder() + .setCustomId('fb-dislike') + .setEmoji('👎') + .setStyle(ButtonStyle.Primary) + ); + + let channel = client.channels.cache.get(ids[0]); + + if (!channel) { + await client.channels.fetch(ids[0]); + channel = client.channels.cache.get(ids[0]); + } + + if (!ids[1]) { + channel.send({ + embeds: [embed], + components: [feedbackRow] + }); + } else { + let message = channel.messages.cache.get(ids[1]); + + if (!message) { + await channel.messages.fetch(ids[1]); + message = channel.messages.cache.get(ids[1]); + } + + message.reply({ + embeds: [embed], + components: [feedbackRow] + }); + } + } catch (e) { + console.log(e); + } + } +}; diff --git a/apps/bot-discord/src/helperEvents/ocrResponse.js b/apps/bot-discord/src/helperEvents/ocrResponse.js new file mode 100644 index 0000000..2d05814 --- /dev/null +++ b/apps/bot-discord/src/helperEvents/ocrResponse.js @@ -0,0 +1,31 @@ +export default { + name: 'ocrResponse', + once: false, + async execute(client, config, helper, ocrRes) { + try { + const ids = ocrRes.id.split('/'); + let channel = client.channels.cache.get(ids[0]); + + if (!channel) { + await client.channels.fetch(ids[0]); + channel = client.channels.cache.get(ids[0]); + } + + let message = channel.messages.cache.get(ids[1]); + + if (!message) { + await channel.messages.fetch(ids[1]); + message = channel.messages.cache.get(ids[1]); + } + + for (const ocrReply of config.ocrResponses) { + if (ocrRes.ocrText.match(ocrReply.regex)) { + message.reply({ embeds: [ocrReply.reply] }); + break; + } + } + } catch (e) { + console.log(e); + } + } +}; diff --git a/apps/bot-discord/src/index.js b/apps/bot-discord/src/index.js new file mode 100644 index 0000000..27f34f4 --- /dev/null +++ b/apps/bot-discord/src/index.js @@ -0,0 +1,82 @@ +import { Client, GatewayIntentBits, Collection } from 'discord.js'; +import { readFileSync, readdirSync } from 'node:fs'; +// Fix __dirname not being defined in ES modules. (https://stackoverflow.com/a/64383997) +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +import HelperClient from '@revanced-helper/helper-client'; +import config from './config.json' assert { type: 'json' }; +const helper = new HelperClient(config); + +helper.connect(); + +const client = new Client({ + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.MessageContent + ] +}); + +client.commands = new Collection(); +client.trainingVotes = new Collection(); + +const commandsPath = join(__dirname, 'commands'); +const commandFiles = readdirSync(commandsPath).filter((file) => + file.endsWith('.js') +); + +for (const file of commandFiles) { + const filePath = join(commandsPath, file); + const command = (await import(`file://${filePath}`)).default; + if ('data' in command && 'execute' in command) { + client.commands.set(command.data.name, command); + } else { + console.log( + `[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.` + ); + } +} + +const discordEventsPath = join(__dirname, 'events'); +const discordEventFiles = readdirSync(discordEventsPath).filter((file) => + file.endsWith('.js') +); + +for (const file of discordEventFiles) { + const filePath = join(discordEventsPath, file); + const event = (await import(`file://${filePath}`)).default; + if (event.once) { + client.once(event.name, (...args) => + event.execute(helper, config, ...args) + ); + } else { + client.on(event.name, (...args) => + event.execute(helper, config, ...args) + ); + } +} + +// The ReVanced Helper events. + +const helperEventsPath = join(__dirname, 'helperEvents'); +const helperEventFiles = readdirSync(helperEventsPath).filter((file) => + file.endsWith('.js') +); + +for (const file of helperEventFiles) { + const filePath = join(helperEventsPath, file); + const event = (await import(`file://${filePath}`)).default; + if (event.once) { + helper.once(event.name, (...args) => + event.execute(client, config, helper, ...args) + ); + } else { + helper.on(event.name, (...args) => + event.execute(client, config, helper, ...args) + ); + } +} + +client.login(process.env.DISCORD_TOKEN); diff --git a/apps/bot-discord/src/package-lock.json b/apps/bot-discord/src/package-lock.json new file mode 100644 index 0000000..3a124d5 --- /dev/null +++ b/apps/bot-discord/src/package-lock.json @@ -0,0 +1,685 @@ +{ + "name": "bot-discord", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "bot-discord", + "version": "1.0.0", + "license": "GPL-3.0-or-later", + "dependencies": { + "@revanced-helper/helper-client": "file:../../../packages/client", + "discord.js": "^14.11.0" + } + }, + "../../../packages/client": { + "version": "1.0.0", + "license": "GPL-3.0-or-later", + "dependencies": { + "bson": "^4.7.0" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.3.tgz", + "integrity": "sha512-CTCh8NqED3iecTNuiz49mwSsrc2iQb4d0MjMdmS/8pb69Y4IlzJ/DIy/p5GFlgOrFbNO2WzMHkWKQSiJ3VNXaw==", + "dependencies": { + "@discordjs/formatters": "^0.3.1", + "@discordjs/util": "^0.3.1", + "@sapphire/shapeshift": "^3.8.2", + "discord-api-types": "^0.37.41", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/collection": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.1.tgz", + "integrity": "sha512-aWEc9DCf3TMDe9iaJoOnO2+JVAjeRNuRxPZQA6GVvBf+Z3gqUuWYBy2NWh4+5CLYq5uoc3MOvUQ5H5m8CJBqOA==", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz", + "integrity": "sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA==", + "dependencies": { + "discord-api-types": "^0.37.41" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/rest": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.1.tgz", + "integrity": "sha512-Ofa9UqT0U45G/eX86cURQnX7gzOJLG2oC28VhIk/G6IliYgQF7jFByBJEykPSHE4MxPhqCleYvmsrtfKh1nYmQ==", + "dependencies": { + "@discordjs/collection": "^1.5.1", + "@discordjs/util": "^0.3.0", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.4.2", + "discord-api-types": "^0.37.41", + "file-type": "^18.3.0", + "tslib": "^2.5.0", + "undici": "^5.22.0" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/util": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.3.1.tgz", + "integrity": "sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA==", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/ws": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-0.8.3.tgz", + "integrity": "sha512-hcYtppanjHecbdNyCKQNH2I4RP9UrphDgmRgLYrATEQF1oo4sYSve7ZmGsBEXSzH72MO2tBPdWSThunbxUVk0g==", + "dependencies": { + "@discordjs/collection": "^1.5.1", + "@discordjs/rest": "^1.7.1", + "@discordjs/util": "^0.3.1", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.4", + "@vladfrangu/async_event_emitter": "^2.2.1", + "discord-api-types": "^0.37.41", + "tslib": "^2.5.0", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@revanced-helper/helper-client": { + "resolved": "../../../packages/client", + "link": true + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", + "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "node_modules/@types/node": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", + "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" + }, + "node_modules/@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/discord-api-types": { + "version": "0.37.43", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.43.tgz", + "integrity": "sha512-bBhDWU3TF9KADxR/mHp1K4Bvu/LRtFQdGyBjADu4e66F3ZnD4kp12W/SJCttIaCcMXzPV3sfty6eDGRNRph51Q==" + }, + "node_modules/discord.js": { + "version": "14.11.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.11.0.tgz", + "integrity": "sha512-CkueWYFQ28U38YPR8HgsBR/QT35oPpMbEsTNM30Fs8loBIhnA4s70AwQEoy6JvLcpWWJO7GY0y2BUzZmuBMepQ==", + "dependencies": { + "@discordjs/builders": "^1.6.3", + "@discordjs/collection": "^1.5.1", + "@discordjs/formatters": "^0.3.1", + "@discordjs/rest": "^1.7.1", + "@discordjs/util": "^0.3.1", + "@discordjs/ws": "^0.8.3", + "@sapphire/snowflake": "^3.4.2", + "@types/ws": "^8.5.4", + "discord-api-types": "^0.37.41", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.5.0", + "undici": "^5.22.0", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/file-type": { + "version": "18.5.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.5.0.tgz", + "integrity": "sha512-yvpl5U868+V6PqXHMmsESpg6unQ5GfnPssl4dxdJudBrr9qy7Fddt7EVX1VLlddFfe8Gj9N7goCZH22FXuSQXQ==", + "dependencies": { + "readable-web-to-node-stream": "^3.0.2", + "strtok3": "^7.0.0", + "token-types": "^5.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, + "node_modules/peek-readable": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", + "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strtok3": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", + "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/token-types": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", + "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/undici": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "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": { + "@discordjs/builders": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.3.tgz", + "integrity": "sha512-CTCh8NqED3iecTNuiz49mwSsrc2iQb4d0MjMdmS/8pb69Y4IlzJ/DIy/p5GFlgOrFbNO2WzMHkWKQSiJ3VNXaw==", + "requires": { + "@discordjs/formatters": "^0.3.1", + "@discordjs/util": "^0.3.1", + "@sapphire/shapeshift": "^3.8.2", + "discord-api-types": "^0.37.41", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.5.0" + } + }, + "@discordjs/collection": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.1.tgz", + "integrity": "sha512-aWEc9DCf3TMDe9iaJoOnO2+JVAjeRNuRxPZQA6GVvBf+Z3gqUuWYBy2NWh4+5CLYq5uoc3MOvUQ5H5m8CJBqOA==" + }, + "@discordjs/formatters": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz", + "integrity": "sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA==", + "requires": { + "discord-api-types": "^0.37.41" + } + }, + "@discordjs/rest": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.1.tgz", + "integrity": "sha512-Ofa9UqT0U45G/eX86cURQnX7gzOJLG2oC28VhIk/G6IliYgQF7jFByBJEykPSHE4MxPhqCleYvmsrtfKh1nYmQ==", + "requires": { + "@discordjs/collection": "^1.5.1", + "@discordjs/util": "^0.3.0", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.4.2", + "discord-api-types": "^0.37.41", + "file-type": "^18.3.0", + "tslib": "^2.5.0", + "undici": "^5.22.0" + } + }, + "@discordjs/util": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.3.1.tgz", + "integrity": "sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA==" + }, + "@discordjs/ws": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-0.8.3.tgz", + "integrity": "sha512-hcYtppanjHecbdNyCKQNH2I4RP9UrphDgmRgLYrATEQF1oo4sYSve7ZmGsBEXSzH72MO2tBPdWSThunbxUVk0g==", + "requires": { + "@discordjs/collection": "^1.5.1", + "@discordjs/rest": "^1.7.1", + "@discordjs/util": "^0.3.1", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.4", + "@vladfrangu/async_event_emitter": "^2.2.1", + "discord-api-types": "^0.37.41", + "tslib": "^2.5.0", + "ws": "^8.13.0" + } + }, + "@revanced-helper/helper-client": { + "version": "file:../../../packages/client", + "requires": { + "bson": "^4.7.0" + } + }, + "@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" + }, + "@sapphire/shapeshift": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", + "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", + "requires": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + } + }, + "@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==" + }, + "@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "@types/node": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", + "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" + }, + "@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "requires": { + "@types/node": "*" + } + }, + "@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==" + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "requires": { + "streamsearch": "^1.1.0" + } + }, + "discord-api-types": { + "version": "0.37.43", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.43.tgz", + "integrity": "sha512-bBhDWU3TF9KADxR/mHp1K4Bvu/LRtFQdGyBjADu4e66F3ZnD4kp12W/SJCttIaCcMXzPV3sfty6eDGRNRph51Q==" + }, + "discord.js": { + "version": "14.11.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.11.0.tgz", + "integrity": "sha512-CkueWYFQ28U38YPR8HgsBR/QT35oPpMbEsTNM30Fs8loBIhnA4s70AwQEoy6JvLcpWWJO7GY0y2BUzZmuBMepQ==", + "requires": { + "@discordjs/builders": "^1.6.3", + "@discordjs/collection": "^1.5.1", + "@discordjs/formatters": "^0.3.1", + "@discordjs/rest": "^1.7.1", + "@discordjs/util": "^0.3.1", + "@discordjs/ws": "^0.8.3", + "@sapphire/snowflake": "^3.4.2", + "@types/ws": "^8.5.4", + "discord-api-types": "^0.37.41", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.5.0", + "undici": "^5.22.0", + "ws": "^8.13.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "file-type": { + "version": "18.5.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.5.0.tgz", + "integrity": "sha512-yvpl5U868+V6PqXHMmsESpg6unQ5GfnPssl4dxdJudBrr9qy7Fddt7EVX1VLlddFfe8Gj9N7goCZH22FXuSQXQ==", + "requires": { + "readable-web-to-node-stream": "^3.0.2", + "strtok3": "^7.0.0", + "token-types": "^5.0.1" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, + "peek-readable": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", + "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==" + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "requires": { + "readable-stream": "^3.6.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strtok3": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", + "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", + "requires": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.0.0" + } + }, + "token-types": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", + "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", + "requires": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + } + }, + "ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" + }, + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "undici": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "requires": { + "busboy": "^1.6.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "requires": {} + } + } +} diff --git a/apps/bot-discord/src/package.json b/apps/bot-discord/src/package.json new file mode 100644 index 0000000..30363ff --- /dev/null +++ b/apps/bot-discord/src/package.json @@ -0,0 +1,14 @@ +{ + "name": "bot-discord", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "keywords": [], + "author": "Reis Can", + "license": "GPL-3.0-or-later", + "dependencies": { + "@revanced-helper/helper-client": "file:../../../packages/client", + "discord.js": "^14.11.0" + } +} diff --git a/bots/discord/registerCommands.js b/apps/bot-discord/src/registerCommands.js similarity index 92% rename from bots/discord/registerCommands.js rename to apps/bot-discord/src/registerCommands.js index 4392de8..6c2978c 100644 --- a/bots/discord/registerCommands.js +++ b/apps/bot-discord/src/registerCommands.js @@ -16,7 +16,7 @@ for (const file of commandFiles) { } // Construct and prepare an instance of the REST module -const rest = new REST({ version: '10' }).setToken(config.discord.token); +const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN); try { console.log( @@ -24,7 +24,7 @@ try { ); // The put method is used to fully refresh all commands in the guild with the current set - const data = await rest.put(Routes.applicationCommands(config.discord.id), { + const data = await rest.put(Routes.applicationCommands(config.discord.botId), { body: commands }); diff --git a/apps/bot-discord/src/utils/trainAISelectMenu.js b/apps/bot-discord/src/utils/trainAISelectMenu.js new file mode 100644 index 0000000..bc1c0f9 --- /dev/null +++ b/apps/bot-discord/src/utils/trainAISelectMenu.js @@ -0,0 +1,77 @@ +import { + ActionRowBuilder, + StringSelectMenuBuilder, + ComponentType +} from 'discord.js'; + +export default async function trainAISelectMenu( + interaction, + config, + helper +) { + const options = []; + + for (const { label } of config.responses) { + options.push({ + label: label, + description: `The ${label} label.`, + value: label.toLowerCase() + }); + } + + const row = new ActionRowBuilder().addComponents( + new StringSelectMenuBuilder() + .setCustomId('select') + .setPlaceholder('Nothing selected') + .addOptions(options) + ); + + let interactedMessage; + + if (!interaction.isMessageContextMenuCommand()) { + try { + const channel = await interaction.client.channels.fetch(interaction.message.reference.channelId); + const message = await channel.messages.fetch(interaction.message.reference.messageId); + interactedMessage = message.content.toLowerCase(); + } catch (e) { + interaction.reply({ + content: 'The message that you wanted to train the bot with was deleted.', + ephemeral: true + }) + } + + } else { + interactedMessage = interaction.targetMessage.content.toLowerCase() + } + + const reply = await interaction.reply({ + content: 'Please select the corresponding label to train the bot.', + components: [row], + ephemeral: true + }); + + const collector = reply.createMessageComponentCollector({ + componentType: ComponentType.StringSelect, + time: 15000 + }); + + const voteId = interaction.targetMessage ? interaction.targetMessage.id : + interaction.message.reference.messageId; + collector.on('collect', (i) => { + i.reply({ content: 'Sent training data to server.', ephemeral: true }); + + const existingVote = interaction.client.trainingVotes.get(voteId); + if (existingVote) clearTimeout(existingVote); + interaction.client.trainingVotes.set(voteId, + setTimeout(() => { + helper.sendTrainData(interactedMessage, i.values[0]); + + if (!interaction.isMessageContextMenuCommand()) { + interaction.message.edit({ components: [] }); + } + + interaction.client.trainingVotes.delete(voteId); + }, 10_000) + ); + }); +} diff --git a/bots/telegram/commands/train.js b/apps/bot-telegram/src/commands/train.js similarity index 100% rename from bots/telegram/commands/train.js rename to apps/bot-telegram/src/commands/train.js diff --git a/apps/bot-telegram/src/config.example.json b/apps/bot-telegram/src/config.example.json new file mode 100644 index 0000000..5b4139f --- /dev/null +++ b/apps/bot-telegram/src/config.example.json @@ -0,0 +1,26 @@ +{ + "server": { + "port": 3000, + "host": "192.168.1.6" + }, + "responses": [ + { + "label": "revanced_download", + "threshold": 0.85, + "reply": { + "title": "How to download ReVanced?", + "desc": "You don't." + } + } + ], + + "ocrResponses": [ + { + "regex": "is not installed", + "reply": { + "title": "Why can't I download videos", + "desc": "Because you didn't install the app." + } + } + ] + } \ No newline at end of file diff --git a/apps/bot-telegram/src/config.json b/apps/bot-telegram/src/config.json new file mode 100644 index 0000000..3b35ee3 --- /dev/null +++ b/apps/bot-telegram/src/config.json @@ -0,0 +1,25 @@ +{ + "server": { + "port": 3000, + "host": "127.0.0.1" + }, + "responses": [ + { + "label": "revanced_download", + "threshold": 0.85, + "reply": { + "title": "How to download ReVanced?", + "desc": "You don't." + } + } + ], + "ocrResponses": [ + { + "regex": "is not installed", + "reply": { + "title": "Why can't I download videos", + "desc": "Because you didn't install the app." + } + } + ] +} \ No newline at end of file diff --git a/bots/telegram/events/telegram/callbackQuery.js b/apps/bot-telegram/src/events/callbackQuery.js similarity index 90% rename from bots/telegram/events/telegram/callbackQuery.js rename to apps/bot-telegram/src/events/callbackQuery.js index 85d2154..8368286 100644 --- a/bots/telegram/events/telegram/callbackQuery.js +++ b/apps/bot-telegram/src/events/callbackQuery.js @@ -16,7 +16,7 @@ export default { cb.data.replace('label_', '').toUpperCase() ); - bot.sendMessage(cb.message.chat.id, 'Sent train data to server.', { + bot.sendMessage(cb.message.chat.id, 'Sent training data to server.', { message_thread_id: cb.message.message_thread_id, reply_to_message_id: cb.message.message_id }); diff --git a/apps/bot-telegram/src/events/message.js b/apps/bot-telegram/src/events/message.js new file mode 100644 index 0000000..53ceb03 --- /dev/null +++ b/apps/bot-telegram/src/events/message.js @@ -0,0 +1,15 @@ +export default { + name: 'message', + once: false, + async execute(bot, helper, msg) { + if (msg.photo) { + const fileLink = await bot.getFileLink(msg.photo.at(-1).file_id); + helper.scanImage(fileLink, `${msg.chat.id}/${msg.message_thread_id}/${msg.message_id}`) + } + if (!msg.text) return; + helper.scanText( + msg.text.toLowerCase(), + `${msg.chat.id}/${msg.message_thread_id}/${msg.message_id}` + ); + } +}; diff --git a/bots/telegram/events/helper/aiResponse.js b/apps/bot-telegram/src/helperEvents/aiResponse.js similarity index 97% rename from bots/telegram/events/helper/aiResponse.js rename to apps/bot-telegram/src/helperEvents/aiResponse.js index 7b37276..0373e56 100644 --- a/bots/telegram/events/helper/aiResponse.js +++ b/apps/bot-telegram/src/helperEvents/aiResponse.js @@ -9,6 +9,7 @@ export default { a.confidence > b.confidence ? a : b ); const response = config.responses.find((res) => res.label === intent.name); + if (!response) return; if (response.threshold > intent.confidence) return; if (!response.reply) return; diff --git a/apps/bot-telegram/src/helperEvents/ocrResponse.js b/apps/bot-telegram/src/helperEvents/ocrResponse.js new file mode 100644 index 0000000..91c3b65 --- /dev/null +++ b/apps/bot-telegram/src/helperEvents/ocrResponse.js @@ -0,0 +1,24 @@ +export default { + name: 'ocrResponse', + once: false, + async execute(bot, config, ocrRes) { + const ids = ocrRes.id.split('/'); + + for (const ocrReply of config.ocrResponses) { + if (ocrRes.ocrText.match(ocrReply.regex)) { + // Because for some reason the markdown parser in TG is a pain in the ass, + // there won't be markdown support for now. + bot.sendMessage( + ids[0], + `## ${ocrReply.reply.title}\n\n${ocrReply.reply.desc}\n\nThis bot is currently being tested in production. Ignore it, if it's wrong.`, + { + message_thread_id: ids[1], + reply_to_message_id: ids[2] + } + ); + break; + } + } + return; + } +}; diff --git a/apps/bot-telegram/src/index.js b/apps/bot-telegram/src/index.js new file mode 100644 index 0000000..cfc9a99 --- /dev/null +++ b/apps/bot-telegram/src/index.js @@ -0,0 +1,66 @@ +import TelegramBot from 'node-telegram-bot-api'; +import { readFileSync, readdirSync } from 'node:fs'; +// Fix __dirname not being defined in ES modules. (https://stackoverflow.com/a/64383997) +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +import HelperClient from '@revanced-helper/helper-client'; +import config from './config.json' assert { type: 'json' }; + +const helper = new HelperClient(config); +helper.connect(); + +const bot = new TelegramBot(process.env.TELEGRAM_TOKEN, { polling: true }); + +const commandsPath = join(__dirname, 'commands'); +const commandFiles = readdirSync(commandsPath).filter((file) => + file.endsWith('.js') +); + +for (const file of commandFiles) { + const filePath = join(commandsPath, file); + const command = (await import(`file://${filePath}`)).default; + if ('command' in command && 'execute' in command) { + bot.onText(command.command, (...args) => + command.execute(bot, config, ...args) + ); + } else { + console.log( + `[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.` + ); + } +} + +const tgEventsPath = join(__dirname, 'events'); +const tgEventFiles = readdirSync(tgEventsPath).filter((file) => + file.endsWith('.js') +); + +for (const file of tgEventFiles) { + const filePath = join(tgEventsPath, file); + const event = (await import(`file://${filePath}`)).default; + if (event.once) { + bot.once(event.name, (...args) => event.execute(bot, helper, ...args)); + } else { + bot.on(event.name, (...args) => event.execute(bot, helper, ...args)); + } +} + +// The ReVanced Helper events. + +const helperEventsPath = join(__dirname, 'helperEvents'); +const helperEventFiles = readdirSync(helperEventsPath).filter((file) => + file.endsWith('.js') +); + +for (const file of helperEventFiles) { + const filePath = join(helperEventsPath, file); + const event = (await import(`file://${filePath}`)).default; + if (event.once) { + helper.once(event.name, (...args) => event.execute(bot, config, ...args)); + } else { + helper.on(event.name, (...args) => event.execute(bot, config, ...args)); + } +} diff --git a/bots/package-lock.json b/apps/bot-telegram/src/package-lock.json similarity index 73% rename from bots/package-lock.json rename to apps/bot-telegram/src/package-lock.json index b33c29c..822c834 100644 --- a/bots/package-lock.json +++ b/apps/bot-telegram/src/package-lock.json @@ -1,117 +1,29 @@ { - "name": "bots", + "name": "bot-telegram", "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "bots", + "name": "bot-telegram", "version": "1.0.0", "license": "GPL-3.0-or-later", "dependencies": { - "discord.js": "^14.7.1", - "node-telegram-bot-api": "^0.60.0", - "snoostorm": "^1.5.2" + "@revanced-helper/helper-client": "file:../../../packages/client", + "node-telegram-bot-api": "^0.61.0" } }, - "node_modules/@discordjs/builders": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", - "integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", + "../../../packages/client": { + "name": "@revanced-helper/helper-client", + "version": "1.0.0", + "license": "GPL-3.0-or-later", "dependencies": { - "@discordjs/util": "^0.1.0", - "@sapphire/shapeshift": "^3.7.1", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.2", - "tslib": "^2.4.1" - }, - "engines": { - "node": ">=16.9.0" + "bson": "^4.7.0" } }, - "node_modules/@discordjs/collection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", - "integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==", - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@discordjs/rest": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", - "integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", - "dependencies": { - "@discordjs/collection": "^1.3.0", - "@discordjs/util": "^0.1.0", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.2.2", - "discord-api-types": "^0.37.23", - "file-type": "^18.0.0", - "tslib": "^2.4.1", - "undici": "^5.13.0" - }, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@discordjs/util": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", - "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==", - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", - "integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/snowflake": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.3.0.tgz", - "integrity": "sha512-Hec5N6zEkZuZFLybVKyLFLlcSgYmR6C1/+9NkIhxPwOf6tgX52ndJCSz8ADejmbrNE0VuNCNkpzhRZzenEC9vA==", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, - "node_modules/@types/node": { - "version": "18.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==" - }, - "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dependencies": { - "@types/node": "*" - } + "node_modules/@revanced-helper/helper-client": { + "resolved": "../../../packages/client", + "link": true }, "node_modules/ajv": { "version": "6.12.6", @@ -128,6 +40,18 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findindex": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.2.1.tgz", @@ -155,16 +79,22 @@ "node": ">=0.8" } }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -174,9 +104,9 @@ } }, "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", @@ -200,17 +130,6 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -264,9 +183,9 @@ } }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -286,33 +205,6 @@ "node": ">=0.4.0" } }, - "node_modules/discord-api-types": { - "version": "0.37.24", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.24.tgz", - "integrity": "sha512-1+Fb4huJCihdbkJLcq2p7nBmtlmAryNwjefT8wwJnL8c7bc7WA87Oaa5mbLe96QvZyfwnwRCDX40H0HhcVV50g==" - }, - "node_modules/discord.js": { - "version": "14.7.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", - "integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", - "dependencies": { - "@discordjs/builders": "^1.4.0", - "@discordjs/collection": "^1.3.0", - "@discordjs/rest": "^1.4.0", - "@discordjs/util": "^0.1.0", - "@sapphire/snowflake": "^3.2.2", - "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.4.1", - "undici": "^5.13.0", - "ws": "^8.11.0" - }, - "engines": { - "node": ">=16.9.0" - } - }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -331,35 +223,44 @@ } }, "node_modules/es-abstract": { - "version": "1.20.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz", - "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", - "unbox-primitive": "^1.0.2" + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" @@ -368,6 +269,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -421,19 +335,19 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/file-type": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", - "integrity": "sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==", - "dependencies": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0", - "token-types": "^5.0.1" - }, + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" + "node": ">=0.10.0" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" } }, "node_modules/forever-agent": { @@ -488,12 +402,13 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -523,6 +438,20 @@ "assert-plus": "^1.0.0" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -555,11 +484,6 @@ "node": ">=6" } }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -590,6 +514,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -629,36 +564,17 @@ "npm": ">=1.3.7" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -666,6 +582,19 @@ "node": ">= 0.4" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -796,6 +725,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -861,11 +808,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -902,9 +844,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/node-telegram-bot-api": { - "version": "0.60.0", - "resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.60.0.tgz", - "integrity": "sha512-SBI2PjfCAfMVuieQb95GBvaWiprRdk5SKfzX6B6G2ciG7J4SjOVwaMvaYhm9dJDTqvRSzl5pbioGbqRO/vx1Zg==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.61.0.tgz", + "integrity": "sha512-BZXd8Bh2C5+uBEQuuI3FD7TFJF3alV+6oFQt8CNLx3ldX/hsd+NYyllTX+Y+5X0tG+xtcRQQjbfLgz/4sRvmBQ==", "dependencies": { "array.prototype.findindex": "^2.0.2", "bl": "^1.2.3", @@ -920,14 +862,6 @@ "node": ">=0.12" } }, - "node_modules/node-telegram-bot-api/node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -937,9 +871,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -977,18 +911,6 @@ "wrappy": "1" } }, - "node_modules/peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -999,14 +921,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/promise-chains": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/promise-chains/-/promise-chains-0.3.12.tgz", - "integrity": "sha512-LgK0acA/djbxbJhN+ooR3+VChzgDr4wTYhhBlxJCUQCO2zsD37/SuHBxeWcB+/vlwag2NEr+kFz03/VBHs+zPw==", - "dependencies": { - "harmony-reflect": "^1.4.3" - } - }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -1022,9 +936,9 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { "node": ">=6" } @@ -1038,9 +952,9 @@ } }, "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -1056,42 +970,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -1213,45 +1099,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/snoostorm": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/snoostorm/-/snoostorm-1.5.2.tgz", - "integrity": "sha512-GU2s2Lj+iR24yfGlQpIiOBH2HRuuQplhfj+fiBMwL0nzHIBeKJL2qVe3EjvZKlSSDwmpR2y+ltHob7aSOWxkfA==", - "dependencies": { - "snoowrap": "^1.20.1" - } - }, - "node_modules/snoowrap": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/snoowrap/-/snoowrap-1.23.0.tgz", - "integrity": "sha512-8FIGWr20Gc+d/C3NRrNPp5VQFNb+eGaQyvIkM5KUL71pYpRM231fkRdLNydMrdtLNRDrTZeZApHHCb8Uk/QuTQ==", - "dependencies": { - "bluebird": "^3.5.5", - "lodash": "^4.17.15", - "promise-chains": "^0.3.11", - "request": "^2.88.2", - "request-promise": "^4.2.6", - "ws": "^3.3.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/snoowrap/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/snoowrap/node_modules/ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, "node_modules/sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", @@ -1284,14 +1131,6 @@ "node": ">=0.10.0" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -1305,6 +1144,22 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -1331,38 +1186,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -1375,16 +1198,6 @@ "node": ">=0.8" } }, - "node_modules/ts-mixer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", - "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -1401,10 +1214,18 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/unbox-primitive": { "version": "1.0.2", @@ -1420,17 +1241,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/undici": { - "version": "5.19.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.19.1.tgz", - "integrity": "sha512-YiZ61LPIgY73E7syxCDxxa3LV2yl3sN8spnIuTct60boiiRaE1J8mNWHO8Im2Zi/sFrPusjLlmRPrsyraSqX6A==", - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=12.18" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -1486,106 +1296,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "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": { - "@discordjs/builders": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", - "integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", + "@revanced-helper/helper-client": { + "version": "file:../../../packages/client", "requires": { - "@discordjs/util": "^0.1.0", - "@sapphire/shapeshift": "^3.7.1", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.2", - "tslib": "^2.4.1" - } - }, - "@discordjs/collection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", - "integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==" - }, - "@discordjs/rest": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", - "integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", - "requires": { - "@discordjs/collection": "^1.3.0", - "@discordjs/util": "^0.1.0", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.2.2", - "discord-api-types": "^0.37.23", - "file-type": "^18.0.0", - "tslib": "^2.4.1", - "undici": "^5.13.0" - } - }, - "@discordjs/util": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", - "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==" - }, - "@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" - }, - "@sapphire/shapeshift": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", - "integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", - "requires": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - } - }, - "@sapphire/snowflake": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.3.0.tgz", - "integrity": "sha512-Hec5N6zEkZuZFLybVKyLFLlcSgYmR6C1/+9NkIhxPwOf6tgX52ndJCSz8ADejmbrNE0VuNCNkpzhRZzenEC9vA==" - }, - "@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, - "@types/node": { - "version": "18.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==" - }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "requires": { - "@types/node": "*" + "bson": "^4.7.0" } }, "ajv": { @@ -1599,6 +1339,15 @@ "uri-js": "^4.2.2" } }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array.prototype.findindex": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.2.1.tgz", @@ -1623,25 +1372,25 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" }, "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -1665,14 +1414,6 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "requires": { - "streamsearch": "^1.1.0" - } - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1717,9 +1458,9 @@ } }, "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -1730,30 +1471,6 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, - "discord-api-types": { - "version": "0.37.24", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.24.tgz", - "integrity": "sha512-1+Fb4huJCihdbkJLcq2p7nBmtlmAryNwjefT8wwJnL8c7bc7WA87Oaa5mbLe96QvZyfwnwRCDX40H0HhcVV50g==" - }, - "discord.js": { - "version": "14.7.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", - "integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", - "requires": { - "@discordjs/builders": "^1.4.0", - "@discordjs/collection": "^1.3.0", - "@discordjs/rest": "^1.4.0", - "@discordjs/util": "^0.1.0", - "@sapphire/snowflake": "^3.2.2", - "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.4.1", - "undici": "^5.13.0", - "ws": "^8.11.0" - } - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -1772,35 +1489,54 @@ } }, "es-abstract": { - "version": "1.20.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz", - "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "requires": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", - "unbox-primitive": "^1.0.2" + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" } }, "es-shim-unscopables": { @@ -1847,13 +1583,16 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "file-type": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", - "integrity": "sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "requires": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0", - "token-types": "^5.0.1" + "is-callable": "^1.1.3" } }, "forever-agent": { @@ -1893,12 +1632,13 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, @@ -1919,6 +1659,14 @@ "assert-plus": "^1.0.0" } }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "requires": { + "define-properties": "^1.1.3" + } + }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -1941,11 +1689,6 @@ "har-schema": "^2.0.0" } }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -1967,6 +1710,11 @@ "get-intrinsic": "^1.1.1" } }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -1990,26 +1738,31 @@ "sshpk": "^1.7.0" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "requires": { - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -2086,6 +1839,18 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2145,11 +1910,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" - }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -2174,9 +1934,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node-telegram-bot-api": { - "version": "0.60.0", - "resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.60.0.tgz", - "integrity": "sha512-SBI2PjfCAfMVuieQb95GBvaWiprRdk5SKfzX6B6G2ciG7J4SjOVwaMvaYhm9dJDTqvRSzl5pbioGbqRO/vx1Zg==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.61.0.tgz", + "integrity": "sha512-BZXd8Bh2C5+uBEQuuI3FD7TFJF3alV+6oFQt8CNLx3ldX/hsd+NYyllTX+Y+5X0tG+xtcRQQjbfLgz/4sRvmBQ==", "requires": { "array.prototype.findindex": "^2.0.2", "bl": "^1.2.3", @@ -2187,13 +1947,6 @@ "pump": "^2.0.0", "request": "^2.83.0", "request-promise": "^4.2.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==" - } } }, "oauth-sign": { @@ -2202,9 +1955,9 @@ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "object-keys": { "version": "1.1.1", @@ -2230,11 +1983,6 @@ "wrappy": "1" } }, - "peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==" - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -2245,14 +1993,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "promise-chains": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/promise-chains/-/promise-chains-0.3.12.tgz", - "integrity": "sha512-LgK0acA/djbxbJhN+ooR3+VChzgDr4wTYhhBlxJCUQCO2zsD37/SuHBxeWcB+/vlwag2NEr+kFz03/VBHs+zPw==", - "requires": { - "harmony-reflect": "^1.4.3" - } - }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -2268,9 +2008,9 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, "qs": { "version": "6.5.3", @@ -2278,9 +2018,9 @@ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -2298,34 +2038,14 @@ } } }, - "readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "requires": { - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" } }, "request": { @@ -2404,44 +2124,6 @@ "object-inspect": "^1.9.0" } }, - "snoostorm": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/snoostorm/-/snoostorm-1.5.2.tgz", - "integrity": "sha512-GU2s2Lj+iR24yfGlQpIiOBH2HRuuQplhfj+fiBMwL0nzHIBeKJL2qVe3EjvZKlSSDwmpR2y+ltHob7aSOWxkfA==", - "requires": { - "snoowrap": "^1.20.1" - } - }, - "snoowrap": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/snoowrap/-/snoowrap-1.23.0.tgz", - "integrity": "sha512-8FIGWr20Gc+d/C3NRrNPp5VQFNb+eGaQyvIkM5KUL71pYpRM231fkRdLNydMrdtLNRDrTZeZApHHCb8Uk/QuTQ==", - "requires": { - "bluebird": "^3.5.5", - "lodash": "^4.17.15", - "promise-chains": "^0.3.11", - "request": "^2.88.2", - "request-promise": "^4.2.6", - "ws": "^3.3.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, "sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", @@ -2463,11 +2145,6 @@ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==" }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -2483,6 +2160,16 @@ } } }, + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -2503,24 +2190,6 @@ "es-abstract": "^1.20.4" } }, - "strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", - "requires": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" - } - }, - "token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", - "requires": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - } - }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -2530,16 +2199,6 @@ "punycode": "^2.1.1" } }, - "ts-mixer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", - "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -2553,10 +2212,15 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } }, "unbox-primitive": { "version": "1.0.2", @@ -2569,14 +2233,6 @@ "which-boxed-primitive": "^1.0.2" } }, - "undici": { - "version": "5.19.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.19.1.tgz", - "integrity": "sha512-YiZ61LPIgY73E7syxCDxxa3LV2yl3sN8spnIuTct60boiiRaE1J8mNWHO8Im2Zi/sFrPusjLlmRPrsyraSqX6A==", - "requires": { - "busboy": "^1.6.0" - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2624,16 +2280,23 @@ "is-symbol": "^1.0.3" } }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "requires": {} } } } diff --git a/bots/discord/package.json b/apps/bot-telegram/src/package.json similarity index 51% rename from bots/discord/package.json rename to apps/bot-telegram/src/package.json index fdd2c76..6cc77c6 100644 --- a/bots/discord/package.json +++ b/apps/bot-telegram/src/package.json @@ -1,5 +1,5 @@ { - "name": "discord-bot", + "name": "bot-telegram", "version": "1.0.0", "description": "", "main": "index.js", @@ -9,5 +9,9 @@ }, "keywords": [], "author": "Reis Can", - "license": "GPL-3.0-or-later" + "license": "GPL-3.0-or-later", + "dependencies": { + "@revanced-helper/helper-client": "file:../../../packages/client", + "node-telegram-bot-api": "^0.61.0" + } } diff --git a/server/PROTOCOL.md b/apps/server/src/PROTOCOL.md similarity index 100% rename from server/PROTOCOL.md rename to apps/server/src/PROTOCOL.md diff --git a/apps/server/src/events/index.js b/apps/server/src/events/index.js new file mode 100644 index 0000000..4cc4c44 --- /dev/null +++ b/apps/server/src/events/index.js @@ -0,0 +1,5 @@ +import runAI from './runAI.js'; +import runOCR from './runOCR.js'; +import trainAI from './trainAI.js'; + +export { runAI, runOCR, trainAI }; \ No newline at end of file diff --git a/server/events/ai.js b/apps/server/src/events/runAI.js similarity index 50% rename from server/events/ai.js rename to apps/server/src/events/runAI.js index 224e826..c22a0b5 100644 --- a/server/events/ai.js +++ b/apps/server/src/events/runAI.js @@ -1,11 +1,11 @@ import { serialize } from 'bson'; -export default async function runAI(client, data, config) { - const witAIReq = await fetch( - `https://api.wit.ai/message?v20230319&q=${encodeURI(data.text)}`, +export default async function runAI(client, data) { + const witAIReq = await fetch( + `https://api.wit.ai/message?v=20230215&q=${encodeURI(data.text)}`, { headers: { - authorization: `Bearer ${config.authToken}` + authorization: `Bearer ${process.env.WIT_AI_TOKEN}` } } ); @@ -21,4 +21,4 @@ export default async function runAI(client, data, config) { ); return; -} +} \ No newline at end of file diff --git a/apps/server/src/events/runOCR.js b/apps/server/src/events/runOCR.js new file mode 100644 index 0000000..0f22ad8 --- /dev/null +++ b/apps/server/src/events/runOCR.js @@ -0,0 +1,61 @@ +import { createWorker } from 'tesseract.js'; +import { serialize } from 'bson'; +import EventEmitter from 'node:events'; + +const worker = await createWorker(); +await worker.loadLanguage('eng'); +await worker.initialize('eng'); + +async function recognize({ client, data }) { + const { data: { text } } = await worker.recognize(data.url); + + client.write( + serialize({ + op: 6, + id: data.id, + ocrText: text + }) + ); +} + +class Queue extends EventEmitter { + constructor() { + super(); + this.isRunning = false; + this.items = [] + } + + push(item) { + this.items.push(item); + this.emit('item', item) + } + + shift() { + return this.items.shift(); + } + +} + +const queue = new Queue(); + +queue.on('item', async ({ client, data }) => { + if (!queue.isRunning) { + queue.isRunning = true; + await recognize(queue.items.shift()); + queue.isRunning = false; + queue.emit('finished'); + } +}); + +queue.on('finished', async () => { + if (queue.items.length !== 0) { + queue.isRunning = true; + await recognize(queue.items.shift()); + queue.isRunning = false; + queue.emit('finished'); + } +}); + +export default async function runOCR(client, data) { + queue.push({ client, data }); +} diff --git a/apps/server/src/events/trainAI.js b/apps/server/src/events/trainAI.js new file mode 100644 index 0000000..a3904ad --- /dev/null +++ b/apps/server/src/events/trainAI.js @@ -0,0 +1,17 @@ +export default async function trainAI(data) { + fetch('https://api.wit.ai/utterances', { + headers: { + authorization: `Bearer ${process.env.WIT_AI_TOKEN}` + }, + body: JSON.stringify([ + { + text: data.text, + intent: data.label, + entities: [], + traits: [] + } + ]), + method: 'POST' + }); + return; +} diff --git a/server/index.js b/apps/server/src/index.js similarity index 62% rename from server/index.js rename to apps/server/src/index.js index 07520c3..1a4ec11 100644 --- a/server/index.js +++ b/apps/server/src/index.js @@ -1,6 +1,3 @@ -import { readFileSync } from 'node:fs'; -const config = JSON.parse(readFileSync('./config.json', 'utf-8')); - import { createServer } from 'node:net'; import { deserialize } from 'bson'; import { runAI, runOCR, trainAI } from './events/index.js'; @@ -13,21 +10,21 @@ const server = createServer(async (client) => { switch (eventData.op) { case 1: { - runAI(client, eventData, config.witAI); + runAI(client, eventData); break; } case 3: { - trainAI(eventData, config.witAI); + trainAI(eventData); break; } case 5: { - runOCR(client, eventData); + await runOCR(client, eventData); break; } } }); }); -server.listen(config.server.port || 3000); +server.listen(process.env.PORT || 3000); diff --git a/apps/server/src/package-lock.json b/apps/server/src/package-lock.json new file mode 100644 index 0000000..4b3dab6 --- /dev/null +++ b/apps/server/src/package-lock.json @@ -0,0 +1,228 @@ +{ + "name": "server", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "server", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "bson": "^5.3.0", + "tesseract.js": "^4.1.0" + } + }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" + }, + "node_modules/bson": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz", + "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==", + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/idb-keyval": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", + "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==" + }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/tesseract.js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tesseract.js/-/tesseract.js-4.1.0.tgz", + "integrity": "sha512-sCfWJtei6Ykc7uLiWs5H4IKDAhwsMauEVDwUiSkEpzMo4kH+7n8QDBPPNRtGJoZ4NJBf1WSlcbU+Puf64GjOfw==", + "hasInstallScript": true, + "dependencies": { + "bmp-js": "^0.1.0", + "idb-keyval": "^6.2.0", + "is-electron": "^2.2.2", + "is-url": "^1.2.4", + "node-fetch": "^2.6.9", + "opencollective-postinstall": "^2.0.3", + "regenerator-runtime": "^0.13.3", + "tesseract.js-core": "^4.0.4", + "wasm-feature-detect": "^1.2.11", + "zlibjs": "^0.3.1" + } + }, + "node_modules/tesseract.js-core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tesseract.js-core/-/tesseract.js-core-4.0.4.tgz", + "integrity": "sha512-MJ+vtktjAaT0681uPl6TDUPhbRbpD/S9emko5rtorgHRZpQo7R3BG7h+3pVHgn1KjfNf1bvnx4B7KxEK8YKqpg==" + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/wasm-feature-detect": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.5.1.tgz", + "integrity": "sha512-GHr23qmuehNXHY4902/hJ6EV5sUANIJC3R/yMfQ7hWDg3nfhlcJfnIL96R2ohpIwa62araN6aN4bLzzzq5GXkg==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/zlibjs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.3.1.tgz", + "integrity": "sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==", + "engines": { + "node": "*" + } + } + }, + "dependencies": { + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" + }, + "bson": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz", + "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==" + }, + "idb-keyval": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", + "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==" + }, + "is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" + }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "tesseract.js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tesseract.js/-/tesseract.js-4.1.0.tgz", + "integrity": "sha512-sCfWJtei6Ykc7uLiWs5H4IKDAhwsMauEVDwUiSkEpzMo4kH+7n8QDBPPNRtGJoZ4NJBf1WSlcbU+Puf64GjOfw==", + "requires": { + "bmp-js": "^0.1.0", + "idb-keyval": "^6.2.0", + "is-electron": "^2.2.2", + "is-url": "^1.2.4", + "node-fetch": "^2.6.9", + "opencollective-postinstall": "^2.0.3", + "regenerator-runtime": "^0.13.3", + "tesseract.js-core": "^4.0.4", + "wasm-feature-detect": "^1.2.11", + "zlibjs": "^0.3.1" + } + }, + "tesseract.js-core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tesseract.js-core/-/tesseract.js-core-4.0.4.tgz", + "integrity": "sha512-MJ+vtktjAaT0681uPl6TDUPhbRbpD/S9emko5rtorgHRZpQo7R3BG7h+3pVHgn1KjfNf1bvnx4B7KxEK8YKqpg==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "wasm-feature-detect": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.5.1.tgz", + "integrity": "sha512-GHr23qmuehNXHY4902/hJ6EV5sUANIJC3R/yMfQ7hWDg3nfhlcJfnIL96R2ohpIwa62araN6aN4bLzzzq5GXkg==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "zlibjs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.3.1.tgz", + "integrity": "sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==" + } + } +} diff --git a/bots/package.json b/apps/server/src/package.json similarity index 60% rename from bots/package.json rename to apps/server/src/package.json index f945b33..8468519 100644 --- a/bots/package.json +++ b/apps/server/src/package.json @@ -1,14 +1,14 @@ { - "name": "bots", + "name": "server", "version": "1.0.0", "description": "", "main": "index.js", "type": "module", + "keywords": [], "author": "Reis Can", "license": "GPL-3.0-or-later", "dependencies": { - "discord.js": "^14.7.1", - "node-telegram-bot-api": "^0.60.0", - "snoostorm": "^1.5.2" + "bson": "^5.3.0", + "tesseract.js": "^4.1.0" } } diff --git a/bots/config.example.json b/bots/config.example.json deleted file mode 100644 index bbcf314..0000000 --- a/bots/config.example.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "discord": { - "token": "YOUR-BOT-TOKEN-HERE", - "id": "1038762591805247518", - "trainRole": "965267139902705744", - "trainingRole": "952987191401926697" - }, - - "telegram": { - "token": "YOUR-BOT-TOKEN-HERE" - }, - - "reddit": { - "username": "ReVancedBot", - "password": "supers3cur3p4ssw0rd", - "userAgent": "ReVancedBot-Reddit", - "clientId": "CLIENT-ID", - "clientSecret": "CLIENT-SECRET" - }, - - "server": { - "port": 3000, - "host": "192.168.1.6" - }, - - "responses": [ - { - "label": "DOWNLOAD", - "threshold": 0.85, - "reply": { - "title": "download??", - "desc": "the download?" - } - } - ] -} diff --git a/bots/discord/events/discord/messageCreate.js b/bots/discord/events/discord/messageCreate.js deleted file mode 100644 index 56bd410..0000000 --- a/bots/discord/events/discord/messageCreate.js +++ /dev/null @@ -1,13 +0,0 @@ -import { Events } from 'discord.js'; - -export default { - name: Events.MessageCreate, - once: false, - execute(helper, _, msg) { - if (!msg.content || msg.author.bot) return; - helper.scanText( - msg.content.toLowerCase().replace(/<.*?>/g, ''), - `${msg.channelId}/${msg.id}` - ); - } -}; diff --git a/bots/discord/events/helper/aiResponse.js b/bots/discord/events/helper/aiResponse.js deleted file mode 100644 index 5c7a9ef..0000000 --- a/bots/discord/events/helper/aiResponse.js +++ /dev/null @@ -1,88 +0,0 @@ -import { - EmbedBuilder, - ActionRowBuilder, - ButtonBuilder, - ButtonStyle -} from 'discord.js'; -import trainAISelectMenu from '../../utils/trainAISelectMenu.js'; - -export default { - name: 'aiResponse', - once: false, - async execute(client, config, helper, aiRes) { - if (!aiRes.response) return; - if (!aiRes.response[0]) return; - - try { - const ids = aiRes.id.split('/'); - let channel = client.channels.cache.get(ids[0]); - - if (!channel) { - await client.channels.fetch(ids[0]); - channel = client.channels.cache.get(ids[0]); - } - - let message = channel.messages.cache.get(ids[1]); - - if (!message) { - await channel.messages.fetch(ids[1]); - message = channel.messages.cache.get(ids[1]); - } - - const intent = aiRes.response.reduce((a, b) => - a.confidence > b.confidence ? a : b - ); - - const response = config.responses.find( - (res) => res.label === intent.name - ); - - if (response.threshold > intent.confidence) return; - if (!response.reply) return; - - const embed = new EmbedBuilder() - .setTitle(response.reply.title) - .setDescription(response.reply.desc) - .setColor(14908858) - .setFooter({ text: `Confidence: ${intent.confidence}` }); - - const feedbackRow = new ActionRowBuilder().addComponents( - new ButtonBuilder() - .setCustomId('fb-like') - .setEmoji('👍') - .setStyle(ButtonStyle.Success), - new ButtonBuilder() - .setCustomId('fb-dislike') - .setEmoji('👎') - .setStyle(ButtonStyle.Danger) - ); - - const reply = await message.reply({ - embeds: [embed], - components: [feedbackRow] - }); - const filter = (i) => - i.member.roles.highest.comparePositionTo( - i.member.guild.roles.cache.get(config.discord.trainRole) - ) > 0; - - const collector = reply.createMessageComponentCollector({ - filter, - time: 15_000 - }); - collector.on('collect', (i) => { - if (i.customId == 'fb-like') { - // We train it using the label the AI gave. - helper.sendTrainData(message.content); - i.reply({ ephemeral: true, content: 'Sent train data to server.' }); - } else { - // We ask the trainer to train it using the select menu. - trainAISelectMenu(i, config, helper, message); - } - }); - return; - } catch (e) { - console.log(e); - } - } -}; diff --git a/bots/discord/events/helper/ocrResponse.js b/bots/discord/events/helper/ocrResponse.js deleted file mode 100644 index a9b9aff..0000000 --- a/bots/discord/events/helper/ocrResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - name: 'ocrResponse', - once: false, - execute() { - // TODO - } -}; diff --git a/bots/discord/index.js b/bots/discord/index.js deleted file mode 100644 index 886b744..0000000 --- a/bots/discord/index.js +++ /dev/null @@ -1,85 +0,0 @@ -import { Client, GatewayIntentBits, Collection } from 'discord.js'; -import { readFileSync, readdirSync } from 'node:fs'; -// Fix __dirname not being defined in ES modules. (https://stackoverflow.com/a/64383997) -import { fileURLToPath } from 'node:url'; -import { dirname, join } from 'node:path'; -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); -import HelperClient from '../../client/index.js'; - -export default async () => { - const config = JSON.parse(readFileSync('./config.json', 'utf-8')); - - const helper = new HelperClient(config); - - helper.connect(); - - const client = new Client({ - intents: [ - GatewayIntentBits.Guilds, - GatewayIntentBits.GuildMessages, - GatewayIntentBits.MessageContent - ] - }); - - client.commands = new Collection(); - - const commandsPath = join(__dirname, 'commands'); - const commandFiles = readdirSync(commandsPath).filter((file) => - file.endsWith('.js') - ); - - for (const file of commandFiles) { - const filePath = join(commandsPath, file); - const command = (await import(`file://${filePath}`)).default; - if ('data' in command && 'execute' in command) { - client.commands.set(command.data.name, command); - } else { - console.log( - `[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.` - ); - } - } - - const discordEventsPath = join(__dirname, 'events/discord'); - const discordEventFiles = readdirSync(discordEventsPath).filter((file) => - file.endsWith('.js') - ); - - for (const file of discordEventFiles) { - const filePath = join(discordEventsPath, file); - const event = (await import(`file://${filePath}`)).default; - if (event.once) { - client.once(event.name, (...args) => - event.execute(helper, config, ...args) - ); - } else { - client.on(event.name, (...args) => - event.execute(helper, config, ...args) - ); - } - } - - // The ReVanced Helper events. - - const helperEventsPath = join(__dirname, 'events/helper'); - const helperEventFiles = readdirSync(helperEventsPath).filter((file) => - file.endsWith('.js') - ); - - for (const file of helperEventFiles) { - const filePath = join(helperEventsPath, file); - const event = (await import(`file://${filePath}`)).default; - if (event.once) { - helper.once(event.name, (...args) => - event.execute(client, config, helper, ...args) - ); - } else { - helper.on(event.name, (...args) => - event.execute(client, config, helper, ...args) - ); - } - } - - client.login(config.discord.token); -}; diff --git a/bots/discord/package-lock.json b/bots/discord/package-lock.json deleted file mode 100644 index 4f1498c..0000000 --- a/bots/discord/package-lock.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "discord-bot", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "discord-bot", - "version": "1.0.0", - "license": "GPL-3.0-or-later" - } - } -} diff --git a/bots/discord/utils/trainAISelectMenu.js b/bots/discord/utils/trainAISelectMenu.js deleted file mode 100644 index 05a9502..0000000 --- a/bots/discord/utils/trainAISelectMenu.js +++ /dev/null @@ -1,48 +0,0 @@ -import { - ActionRowBuilder, - StringSelectMenuBuilder, - ComponentType -} from 'discord.js'; - -export default async function trainAISelectMenu( - interaction, - config, - helper, - message -) { - const options = []; - - for (const { label } of config.responses) { - options.push({ - label: label, - description: `The ${label} label.`, - value: label.toLowerCase() - }); - } - - const row = new ActionRowBuilder().addComponents( - new StringSelectMenuBuilder() - .setCustomId('select') - .setPlaceholder('Nothing selected') - .addOptions(options) - ); - const reply = await interaction.reply({ - content: 'Please select the corresponding label to train the bot.', - components: [row], - ephemeral: true - }); - - const collector = reply.createMessageComponentCollector({ - componentType: ComponentType.StringSelect, - time: 15000 - }); - - const interactedMessage = message - ? message.content - : interaction.targetMessage.content.toLowerCase(); - collector.on('collect', (i) => { - helper.sendTrainData(interactedMessage, i.values[0]); - - i.reply({ content: 'Sent train data to server.', ephemeral: true }); - }); -} diff --git a/bots/index.js b/bots/index.js deleted file mode 100644 index 65b1d94..0000000 --- a/bots/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import { readdirSync } from 'node:fs'; - -const botFolders = readdirSync('./', { withFileTypes: true }) - .filter((dirent) => dirent.isDirectory()) - .map((dirent) => dirent.name); - -const runBotOnly = process.argv[2] ? process.argv[2] : null; -for (const botFolder of botFolders) { - if (botFolder === 'node_modules') continue; - if (runBotOnly && runBotOnly !== botFolder) continue; - const botIndex = await import(`./${botFolder}/index.js`); - botIndex.default(); -} diff --git a/bots/reddit/commands/train.js b/bots/reddit/commands/train.js deleted file mode 100644 index b3498d8..0000000 --- a/bots/reddit/commands/train.js +++ /dev/null @@ -1,37 +0,0 @@ -export default { - command: 'train', - async execute(client, helper, item, args) { - console.log(args); - const isAdmin = await client - .getSubreddit('revancedapp') - .getModerators({ name: item.author.name }); - - if (!isAdmin[0]) - return client.getComment(item.id).reply('You\'re not an admin.'); - if (!args[0]) - return client.getComment(item.id).reply('You didn\'t specifiy the label!'); - const isComment = item.parent_id.split('_')[0] === 't1'; - if (isComment) { - const commentData = (await client.getComment(item.parent_id).fetch()) - .body; - helper.sendTrainData(commentData, args[0].toUpperCase()); - } else { - if (!args[1]) - return client - .getComment(item.id) - .reply( - 'You didn\'t specifiy whether if title or description should be sent!' - ); - const postData = await client.getSubmission(item.parent_id).fetch(); - - helper.sendTrainData( - args[1] === 'title' ? postData.title : postData.selftext, - args[0].toUpperCase() - ); - } - - return client - .getComment(item.id) - .reply('Sent the training data to the server.'); - } -}; diff --git a/bots/reddit/events/helper/aiResponse.js b/bots/reddit/events/helper/aiResponse.js deleted file mode 100644 index 3075e87..0000000 --- a/bots/reddit/events/helper/aiResponse.js +++ /dev/null @@ -1,38 +0,0 @@ -export default { - name: 'aiResponse', - once: false, - async execute(client, config, aiRes) { - if (!aiRes.response) return; - if (!aiRes.response[0]) return; - const ids = aiRes.id.split('/'); - - const intent = aiRes.response.reduce((a, b) => - a.confidence > b.confidence ? a : b - ); - const response = config.responses.find((res) => res.label === intent.name); - if (response.threshold > intent.confidence) return; - if (!response.reply) return; - - switch (ids[0]) { - case 'comment': { - client - .getComment(ids[1]) - .reply( - `## ${response.reply.title}\n\n${response.reply.desc}\n\n*Confidence: ${intent.confidence}*\n\nThis bot is currently being tested in production. Ignore it, if it's wrong.` - ); - break; - } - - case 'post': { - client - .getSubmission(ids[1]) - .reply( - `## ${response.reply.title}\n\n${response.reply.desc}\n\n*Confidence: ${intent.confidence}*\n\nThis bot is currently being tested in production. Ignore it, if it's wrong.` - ); - break; - } - } - - return; - } -}; diff --git a/bots/reddit/index.js b/bots/reddit/index.js deleted file mode 100644 index de58c6e..0000000 --- a/bots/reddit/index.js +++ /dev/null @@ -1,105 +0,0 @@ -import Snoowrap from 'snoowrap'; -import { SubmissionStream, CommentStream } from 'snoostorm'; -import { readFileSync, readdirSync } from 'node:fs'; -// Fix __dirname not being defined in ES modules. (https://stackoverflow.com/a/64383997) -import { fileURLToPath } from 'node:url'; -import { dirname, join } from 'node:path'; -import HelperClient from '../../client/index.js'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -export default async () => { - const config = JSON.parse(readFileSync('./config.json', 'utf-8')); - - const client = new Snoowrap(config.reddit); - const helper = new HelperClient(config); - - helper.connect(); - - client.commands = new Map(); - - const commandsPath = join(__dirname, 'commands'); - const commandFiles = readdirSync(commandsPath).filter((file) => - file.endsWith('.js') - ); - - for (const file of commandFiles) { - const filePath = join(commandsPath, file); - const command = (await import(`file://${filePath}`)).default; - if ('command' in command && 'execute' in command) { - client.commands.set(command.command, command); - } else { - console.log( - `[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.` - ); - } - } - - const checkedItems = []; - - const args = { - subreddit: 'revancedapp', - limit: 10, - pollTime: 5000 - }; - - const comments = new CommentStream(client, args); - - const posts = new SubmissionStream(client, args); - - comments.on('item', async (item) => { - await handleItem(item, false); - }); - - posts.on('item', async (item) => { - await handleItem(item, true); - }); - - async function handleItem(item, isPost) { - // The "skill issue (refresh)" incident. - if (item.author.name === config.reddit.username) return; - - if (checkedItems.includes(item.id)) return; - checkedItems.push(item.id); - if (isPost) { - // It's a post, we have to also send post body. - helper.scanText(item.title.toLowerCase(), `post/${item.id}`); - helper.scanText(item.selftext.toLowerCase(), `post/${item.id}`); - } else { - const body = item.body.toLowerCase(); - if (body.startsWith(`u/${config.reddit.username.toLowerCase()}`)) { - const args = body - .replace(`u/${config.reddit.username.toLowerCase()} `, '') - .split(' '); - const command = args[0]; - args.shift(); - - if (!client.commands.get(command)) return; - - await client.commands.get(command).execute(client, helper, item, args); - } else helper.scanText(item.body.toLowerCase(), `comment/${item.id}`); - } - } - - // The ReVanced Helper events. - - const helperEventsPath = join(__dirname, 'events/helper'); - const helperEventFiles = readdirSync(helperEventsPath).filter((file) => - file.endsWith('.js') - ); - - for (const file of helperEventFiles) { - const filePath = join(helperEventsPath, file); - const event = (await import(`file://${filePath}`)).default; - if (event.once) { - helper.once(event.name, (...args) => - event.execute(client, config, ...args) - ); - } else { - helper.on(event.name, (...args) => - event.execute(client, config, ...args) - ); - } - } -}; diff --git a/bots/reddit/package-lock.json b/bots/reddit/package-lock.json deleted file mode 100644 index d48b732..0000000 --- a/bots/reddit/package-lock.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "reddit-bot", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "reddit-bot", - "version": "1.0.0", - "license": "GPL-3.0-or-later" - } - } -} diff --git a/bots/reddit/package.json b/bots/reddit/package.json deleted file mode 100644 index 1930434..0000000 --- a/bots/reddit/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "reddit-bot", - "version": "1.0.0", - "description": "", - "main": "index.js", - "type": "module", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Reis Can", - "license": "GPL-3.0-or-later" -} diff --git a/bots/telegram/events/telegram/message.js b/bots/telegram/events/telegram/message.js deleted file mode 100644 index 4b20d60..0000000 --- a/bots/telegram/events/telegram/message.js +++ /dev/null @@ -1,11 +0,0 @@ -export default { - name: 'message', - once: false, - async execute(_, helper, msg) { - if (!msg.text) return; - helper.scanText( - msg.text.toLowerCase(), - `${msg.chat.id}/${msg.message_thread_id}/${msg.message_id}` - ); - } -}; diff --git a/bots/telegram/index.js b/bots/telegram/index.js deleted file mode 100644 index 1654475..0000000 --- a/bots/telegram/index.js +++ /dev/null @@ -1,69 +0,0 @@ -import TelegramBot from 'node-telegram-bot-api'; -import { readFileSync, readdirSync } from 'node:fs'; -// Fix __dirname not being defined in ES modules. (https://stackoverflow.com/a/64383997) -import { fileURLToPath } from 'node:url'; -import { dirname, join } from 'node:path'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); -import HelperClient from '../../client/index.js'; - -export default async () => { - const config = JSON.parse(readFileSync('./config.json', 'utf-8')); - - const helper = new HelperClient(config); - helper.connect(); - - const bot = new TelegramBot(config.telegram.token, { polling: true }); - - const commandsPath = join(__dirname, 'commands'); - const commandFiles = readdirSync(commandsPath).filter((file) => - file.endsWith('.js') - ); - - for (const file of commandFiles) { - const filePath = join(commandsPath, file); - const command = (await import(`file://${filePath}`)).default; - if ('command' in command && 'execute' in command) { - bot.onText(command.command, (...args) => - command.execute(bot, config, ...args) - ); - } else { - console.log( - `[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.` - ); - } - } - - const tgEventsPath = join(__dirname, 'events/telegram'); - const tgEventFiles = readdirSync(tgEventsPath).filter((file) => - file.endsWith('.js') - ); - - for (const file of tgEventFiles) { - const filePath = join(tgEventsPath, file); - const event = (await import(`file://${filePath}`)).default; - if (event.once) { - bot.once(event.name, (...args) => event.execute(bot, helper, ...args)); - } else { - bot.on(event.name, (...args) => event.execute(bot, helper, ...args)); - } - } - - // The ReVanced Helper events. - - const helperEventsPath = join(__dirname, 'events/helper'); - const helperEventFiles = readdirSync(helperEventsPath).filter((file) => - file.endsWith('.js') - ); - - for (const file of helperEventFiles) { - const filePath = join(helperEventsPath, file); - const event = (await import(`file://${filePath}`)).default; - if (event.once) { - helper.once(event.name, (...args) => event.execute(bot, config, ...args)); - } else { - helper.on(event.name, (...args) => event.execute(bot, config, ...args)); - } - } -}; diff --git a/bots/telegram/package-lock.json b/bots/telegram/package-lock.json deleted file mode 100644 index 2912f06..0000000 --- a/bots/telegram/package-lock.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "telegram-bot", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "telegram-bot", - "version": "1.0.0", - "license": "GPL-3.0-or-later" - } - } -} diff --git a/bots/telegram/package.json b/bots/telegram/package.json deleted file mode 100644 index 2e094f8..0000000 --- a/bots/telegram/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "telegram-bot", - "version": "1.0.0", - "description": "", - "main": "index.js", - "type": "module", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Reis Can", - "license": "GPL-3.0-or-later" -} diff --git a/client/index.js b/packages/client/index.js similarity index 100% rename from client/index.js rename to packages/client/index.js diff --git a/client/package-lock.json b/packages/client/package-lock.json similarity index 100% rename from client/package-lock.json rename to packages/client/package-lock.json diff --git a/client/package.json b/packages/client/package.json similarity index 87% rename from client/package.json rename to packages/client/package.json index 02c4be8..14f7268 100644 --- a/client/package.json +++ b/packages/client/package.json @@ -1,5 +1,5 @@ { - "name": "helper-client", + "name": "@revanced-helper/helper-client", "version": "1.0.0", "description": "The ReVanced Helper client.", "main": "index.js", diff --git a/server/config.example.json b/server/config.example.json deleted file mode 100644 index b3c5bdf..0000000 --- a/server/config.example.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "server": { - "port": 3000 - }, - "witAI": { - "authToken": "AUTH-TOKEN" - } -} diff --git a/server/events/index.js b/server/events/index.js deleted file mode 100644 index 8488178..0000000 --- a/server/events/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import runAI from './ai.js'; -import runOCR from './ocr.js'; -import trainAI from './train.js'; - -export { runAI, runOCR, trainAI }; diff --git a/server/events/ocr.js b/server/events/ocr.js deleted file mode 100644 index 78766b6..0000000 --- a/server/events/ocr.js +++ /dev/null @@ -1,22 +0,0 @@ -import { recognize } from 'node-tesseract-ocr'; -import { serialize } from 'bson'; - -const config = { - lang: 'eng', - oem: 3, - psm: 3 -}; - -export default async function runOCR(client, eventData) { - const ocrText = await recognize(eventData.url, config); - - client.write( - serialize({ - op: 6, - id: eventData.id, - ocrText - }) - ); - - return; -} diff --git a/server/events/train.js b/server/events/train.js deleted file mode 100644 index 4bed2f4..0000000 --- a/server/events/train.js +++ /dev/null @@ -1,18 +0,0 @@ -export default async function runAI(data, config) { - fetch('https://api.wit.ai/utterances', { - headers: { - authorization: `Bearer ${config.authToken}` - }, - body: JSON.stringify([ - { - text: data.text, - intent: data.label, - entities: [], - traits: [] - } - ]), - method: 'POST' - }); - - return; -} diff --git a/server/package-lock.json b/server/package-lock.json deleted file mode 100644 index d0fc590..0000000 --- a/server/package-lock.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "name": "server", - "version": "0.0.1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "server", - "version": "0.0.1", - "license": "GPL-3.0-or-later", - "dependencies": { - "bson": "^4.7.0", - "node-tesseract-ocr": "^2.2.1", - "transformers-nodejs": "github:reisxd/transformers-nodejs" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bson": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz", - "integrity": "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/node-tesseract-ocr": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-tesseract-ocr/-/node-tesseract-ocr-2.2.1.tgz", - "integrity": "sha512-Q9cD79JGpPNQBxbi1fV+OAsTxYKLpx22sagsxSyKbu1u+t6UarApf5m32uVc8a5QAP1Wk7fIPN0aJFGGEE9DyQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/onnxruntime-common": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.13.1.tgz", - "integrity": "sha512-HtfNeuZ8p47avtZR2mGldXA728keJj46w/6yy5DQTLA9zmpjXF/iJdS8f9yAtyWbSGw3s95DfBPWw2myhA1r0A==" - }, - "node_modules/onnxruntime-node": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.13.1.tgz", - "integrity": "sha512-HHwxs13dSCJX+iqr90p8WGlG54XTxNG6lKXhUC4xu4r95GFjLaA6JxNUjeuGQ6T6E06hCy61lZMdH5MTcBNLTA==", - "os": [ - "win32", - "darwin", - "linux" - ], - "dependencies": { - "onnxruntime-common": "~1.13.1" - } - }, - "node_modules/transformers-nodejs": { - "version": "1.0.0", - "resolved": "git+ssh://git@github.com/reisxd/transformers-nodejs.git#28e591496a7a231b0ad8dc62081365d4077638f9", - "license": "GPL-3.0-or-later", - "dependencies": { - "onnxruntime-node": "^1.13.1" - } - } - }, - "dependencies": { - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bson": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz", - "integrity": "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==", - "requires": { - "buffer": "^5.6.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "node-tesseract-ocr": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-tesseract-ocr/-/node-tesseract-ocr-2.2.1.tgz", - "integrity": "sha512-Q9cD79JGpPNQBxbi1fV+OAsTxYKLpx22sagsxSyKbu1u+t6UarApf5m32uVc8a5QAP1Wk7fIPN0aJFGGEE9DyQ==" - }, - "onnxruntime-common": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.13.1.tgz", - "integrity": "sha512-HtfNeuZ8p47avtZR2mGldXA728keJj46w/6yy5DQTLA9zmpjXF/iJdS8f9yAtyWbSGw3s95DfBPWw2myhA1r0A==" - }, - "onnxruntime-node": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.13.1.tgz", - "integrity": "sha512-HHwxs13dSCJX+iqr90p8WGlG54XTxNG6lKXhUC4xu4r95GFjLaA6JxNUjeuGQ6T6E06hCy61lZMdH5MTcBNLTA==", - "requires": { - "onnxruntime-common": "~1.13.1" - } - }, - "transformers-nodejs": { - "version": "git+ssh://git@github.com/reisxd/transformers-nodejs.git#28e591496a7a231b0ad8dc62081365d4077638f9", - "from": "transformers-nodejs@https://github.com/reisxd/transformers-nodejs", - "requires": { - "onnxruntime-node": "^1.13.1" - } - } - } -} diff --git a/server/package.json b/server/package.json deleted file mode 100644 index eff9968..0000000 --- a/server/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "server", - "version": "0.0.1", - "description": "The AI and OCR server for ReVanced Helper.", - "type": "module", - "main": "index.js", - "author": "Reis Can", - "license": "GPL-3.0-or-later", - "dependencies": { - "bson": "^4.7.0", - "node-tesseract-ocr": "^2.2.1", - "transformers-nodejs": "github:reisxd/transformers-nodejs" - } -}