├── example.env ├── src ├── lib │ ├── utils │ │ ├── schema.ts │ │ ├── managers.ts │ │ ├── packages.ts │ │ ├── config.ts │ │ ├── collections.ts │ │ └── logger.ts │ ├── database │ │ └── Eco.ts │ ├── handler │ │ ├── events.ts │ │ └── command.ts │ ├── kingman.ts │ └── bot_packages │ │ ├── EcoManager.ts │ │ └── messageManager.ts ├── config.json ├── index.ts ├── events │ ├── db │ │ └── ready.ts │ └── start handler │ │ ├── messages.ts │ │ └── interaction.ts └── commands │ └── Eco │ ├── daily.ts │ ├── recives-logs.ts │ ├── transflare-logs.ts │ └── credits.ts ├── package.json ├── README.md └── yarn.lock /example.env: -------------------------------------------------------------------------------- 1 | token=BOT_TOKEN 2 | prefix=BOT_PRFIX 3 | mongo=DATABASE_CONNECTION 4 | id=BOT_ID -------------------------------------------------------------------------------- /src/lib/utils/schema.ts: -------------------------------------------------------------------------------- 1 | import { Eco_ } from "../database/Eco"; 2 | 3 | export let all_schema = { 4 | Eco_ 5 | } -------------------------------------------------------------------------------- /src/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "BOT_TOKEN", 3 | "prefix": "BOT_PRFIX", 4 | "mongo": "DATABASE_CONNECTION", 5 | "client_id": "BOT_ID" 6 | } -------------------------------------------------------------------------------- /src/lib/utils/managers.ts: -------------------------------------------------------------------------------- 1 | import { KINGMAN_ECO } from "../bot_packages/EcoManager"; 2 | import { MESSAGE_MANAGER } from "../bot_packages/messageManager"; 3 | 4 | export { 5 | MESSAGE_MANAGER as Message, 6 | KINGMAN_ECO as EcoSystem 7 | } -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { KMCODES } from "./lib/kingman"; 2 | 3 | const client = new KMCODES({ 4 | intents: ["Guilds", "GuildMessages", "GuildIntegrations", "MessageContent"] 5 | }); 6 | 7 | client.login(client.config.token).catch(e=> { 8 | client.logger.error(`Error to Connet to Discord Bot \n${e.message}`) 9 | }) -------------------------------------------------------------------------------- /src/lib/utils/packages.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import efs from "fs-extra"; 3 | import dotenv from "dotenv"; 4 | import * as mongo from "mongoose"; 5 | import chalk from "chalk"; 6 | import figlet from "figlet"; 7 | import ms from "ms"; 8 | import * as btn_pages from "djs-button-pages"; 9 | export { 10 | fs, 11 | efs, 12 | dotenv, 13 | mongo, 14 | chalk, 15 | figlet, 16 | ms, 17 | btn_pages 18 | } -------------------------------------------------------------------------------- /src/lib/utils/config.ts: -------------------------------------------------------------------------------- 1 | import { KMCODES } from "../kingman"; 2 | export let config = (client: KMCODES) => { 3 | client.package.dotenv.config(); 4 | let config_file = client.package.efs.readJSONSync("./src/config.json", { throws: false }); 5 | return { 6 | token: process.env.token ?? config_file.token, 7 | prefix: process.env.prefix ?? config_file.prefix, 8 | mongo_db: process.env.mongo ?? config_file.mongo, 9 | id: process.env.client_id ?? config_file.client_id 10 | } 11 | } -------------------------------------------------------------------------------- /src/lib/database/Eco.ts: -------------------------------------------------------------------------------- 1 | import { KMCODES } from "../kingman"; 2 | 3 | export let Eco_ = (client: KMCODES) => { 4 | return client.package.mongo.model("Users Credits", new client.package.mongo.Schema({ 5 | user_id: { 6 | type: String, 7 | required: true 8 | }, 9 | credit: { 10 | type: Number, 11 | default: 0 12 | }, 13 | last_daily: { 14 | type: Number, 15 | default: 0 16 | }, 17 | transfere: [{ 18 | to: String, 19 | amout: Number 20 | }], 21 | receive: [{ 22 | from: String, 23 | amout: Number 24 | }] 25 | })) 26 | } -------------------------------------------------------------------------------- /src/lib/utils/collections.ts: -------------------------------------------------------------------------------- 1 | import { Collection } from "discord.js"; 2 | import { CommandFilerType, general, message_command, modal, slachcmd, user_command, buttons_type, select_menu_type } from "./../handler/command" 3 | export let collection = () => { 4 | return { 5 | user_commands: new Collection(), 6 | slash_commands: new Collection(), 7 | message_commands: new Collection(), 8 | prefix_command: new Collection(), 9 | modals: new Collection(), 10 | buttons: new Collection(), 11 | events: new Collection>(), 12 | select_menu: new Collection() 13 | } 14 | } -------------------------------------------------------------------------------- /src/lib/handler/events.ts: -------------------------------------------------------------------------------- 1 | import { readdirSync } from "fs"; 2 | import { ClientEvents } from "discord.js"; 3 | import { KMCODES } from "../kingman"; 4 | interface EventsTyper { 5 | name: keyof ClientEvents, 6 | run: (client: KMCODES, ...args: any[]) => void 7 | } 8 | let load = (client : KMCODES): void =>{ 9 | client.package.fs.readdirSync("./src/events").forEach(folder=>{ 10 | client.package.fs.readdirSync(`./src/events/${folder}`).filter(f=> f.endsWith(".ts")).forEach(async(file)=>{ 11 | let event = (await import(`../../events/${folder}/${file}`)).events as EventsTyper; 12 | if(event.name){ 13 | client.on(event.name, async(...args)=> event.run(client, ...args)) 14 | } 15 | }) 16 | }) 17 | } 18 | export { load, EventsTyper } -------------------------------------------------------------------------------- /src/lib/utils/logger.ts: -------------------------------------------------------------------------------- 1 | import { KMCODES } from "../kingman"; 2 | 3 | export let console_logger = (client: KMCODES) => { 4 | return { 5 | error : (text?: string) => { 6 | console.log( 7 | client.package.chalk.red( 8 | `[ERROR] ${text??``}` 9 | ) 10 | ) 11 | }, 12 | done: (text?: string) => { 13 | console.log( 14 | client.package.chalk.green( 15 | `[DONE] ${text??``}` 16 | ) 17 | ) 18 | }, 19 | warn: (text?: string) => { 20 | console.log( 21 | client.package.chalk.yellow( 22 | `[WARN] ${text??``}` 23 | ) 24 | ) 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-eco", 3 | "version": "2.0.0", 4 | "description": " Discord economy System MongoDB and DJSV14", 5 | "main": "src/index.ts", 6 | "repository": "https://github.com/kmkingman/discord-eco", 7 | "author": "Muhammad Rafat Kurkar", 8 | "license": "MIT", 9 | "dependencies": { 10 | "@types/figlet": "^1.5.5", 11 | "@types/fs-extra": "^9.0.13", 12 | "@types/ms": "^0.7.31", 13 | "chalk": "^4.1.2", 14 | "discord-api-types": "^0.37.8", 15 | "discord.js": "^14.3.0", 16 | "djs-button-pages": "^2.1.3", 17 | "dotenv": "^16.0.2", 18 | "figlet": "^1.5.2", 19 | "fs-extra": "^10.1.0", 20 | "mongoose": "^6.6.1", 21 | "ms": "^2.1.3", 22 | "ts-node": "^10.9.1" 23 | }, 24 | "scripts": { 25 | "start": "ts-node src/index.ts" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/events/db/ready.ts: -------------------------------------------------------------------------------- 1 | import { EventsTyper } from "../../lib/handler/events"; 2 | export let events = { 3 | name: "ready", 4 | async run(client){ 5 | console.log( 6 | client.package.chalk.green( 7 | client.package.figlet.textSync(`KINGMAN`) 8 | ), 9 | client.package.chalk.green(`[DONE] Connected to ${client.user?.username}#${client.user?.discriminator}(${client.user?.id})`) 10 | ) 11 | client.package.mongo.connect(client.config.mongo_db) 12 | .then(()=> { 13 | console.log( 14 | client.package.chalk.green( 15 | client.package.figlet.textSync("KMCODES DB") 16 | ) 17 | ) 18 | }) 19 | .catch(()=> { 20 | console.log( 21 | client.package.chalk.red( 22 | client.package.figlet.textSync("NO DB") 23 | ), 24 | client.package.chalk.red(`[ERROR] Faild to connect to the Database`) 25 | ) 26 | }) 27 | } 28 | } as EventsTyper; -------------------------------------------------------------------------------- /src/commands/Eco/daily.ts: -------------------------------------------------------------------------------- 1 | import { CommandFilerType } from "../../lib/handler/command"; 2 | export let command = { 3 | slachcmd: { 4 | name: "daily", 5 | description: "clame your daily", 6 | category: "economy", 7 | examples: ["daily"], 8 | usage: ["daily"], 9 | async run(client, interaction) { 10 | let eco = new client.managers.EcoSystem(client); 11 | eco.Daily(interaction.user) 12 | .then((message)=> { 13 | interaction.reply(message) 14 | }) 15 | .catch((err: string)=> { 16 | interaction.reply(err); 17 | }) 18 | } 19 | }, 20 | general: { 21 | name: "daily", 22 | description: "clame your daily", 23 | category: "economy", 24 | examples: ["daily"], 25 | usage: ["daily"], 26 | async run(client, message) { 27 | let eco = new client.managers.EcoSystem(client); 28 | eco.Daily(message.author) 29 | .then((res_message)=> { 30 | message.reply(res_message) 31 | }) 32 | .catch((err: string)=> { 33 | message.reply(err); 34 | }); 35 | }, 36 | } 37 | } as CommandFilerType -------------------------------------------------------------------------------- /src/lib/kingman.ts: -------------------------------------------------------------------------------- 1 | import { Client, ClientOptions, Collection } from "discord.js"; 2 | import { collection } from "./utils/collections"; 3 | import { config } from "./utils/config"; 4 | import * as pkg from "./utils/packages"; 5 | import { load as load_handler } from "./handler/command"; 6 | import { load as load_events } from "./handler/events"; 7 | import * as managers from "./utils/managers"; 8 | import { console_logger } from "./utils/logger"; 9 | import { all_schema } from "./utils/schema" 10 | export class KMCODES extends Client { 11 | public package: typeof pkg; 12 | public collection: ReturnType; 13 | public config: ReturnType; 14 | public managers: typeof managers; 15 | public logger: ReturnType; 16 | public schemas: typeof all_schema; 17 | public eco: ReturnType 18 | constructor(ops: ClientOptions){ 19 | super(ops); 20 | this.package = pkg; 21 | this.managers = managers; 22 | this.collection = collection(); 23 | this.config = config(this); 24 | this.logger = console_logger(this); 25 | this.schemas = all_schema; 26 | this.eco = this.schemas.Eco_(this); 27 | (async()=>{ 28 | await this.load_handlers() 29 | })(); 30 | }; 31 | async load_handlers(){ 32 | await load_handler(this); 33 | await load_events(this) 34 | }; 35 | }; -------------------------------------------------------------------------------- /src/events/start handler/messages.ts: -------------------------------------------------------------------------------- 1 | import { Message } from "discord.js"; 2 | import { EventsTyper } from "../../lib/handler/events"; 3 | 4 | export let events = { 5 | name: "messageCreate", 6 | async run(client, kmsg: Message){ 7 | let manager = new client.managers.Message(kmsg); 8 | let pmention = new RegExp(`^<@!?${client.user?.id}>( |)$`); 9 | if (kmsg.content.match(pmention)) { 10 | return kmsg.reply(`**MY PREFIX IS: ${client.config.prefix}**`) 11 | }; 12 | if (kmsg.author.bot) return; 13 | if (!kmsg.guild) { 14 | return kmsg.reply("**ONLY WORK ON SERVERS NOT DM**") 15 | }; 16 | if (!kmsg.content.startsWith(client.config.prefix)) return; 17 | const args = kmsg.content 18 | .slice(client.config.prefix.length) 19 | .trim() 20 | .split(/ +/g), 21 | command = args.shift()?.toLowerCase(); 22 | if(!command) return; 23 | if (command?.length === 0) return; 24 | let command_file = client.collection.prefix_command.get(command); 25 | if(command_file){ 26 | if(!kmsg.member?.permissions.has(command_file.permissions?.me || [])){ 27 | return kmsg.reply({ embeds: [manager.generateError(`You need \`${command_file.permissions?.me}\` permissions`)]}) 28 | } 29 | if(!kmsg.guild.members.cache.get(client.user?.id ?? "")?.permissions.has(command_file.permissions?.bot || [])){ 30 | return kmsg.reply({ embeds: [manager.generateError(`I need \`${command_file.permissions?.bot}\` permissions`)]}) 31 | }; 32 | try { 33 | await command_file.run(client, kmsg, args, manager); 34 | } catch (error) { 35 | console.log(error) 36 | } 37 | } 38 | } 39 | } as EventsTyper; -------------------------------------------------------------------------------- /src/commands/Eco/recives-logs.ts: -------------------------------------------------------------------------------- 1 | import { ButtonStyle } from "discord.js"; 2 | import { CommandFilerType } from "../../lib/handler/command"; 3 | export let command = { 4 | slachcmd: { 5 | name: "receive", 6 | description: "to show receive history", 7 | category: "economy", 8 | examples: ["reseve"], 9 | usage: ["reseve"], 10 | async run(client, interaction, manager) { 11 | const { PreviousPageButton, NextPageButton, InteractionPagination } = client.package.btn_pages; 12 | let user = interaction.user; 13 | let eco = new client.managers.EcoSystem(client); 14 | let user_data = await eco.get_data(user); 15 | let embeds = eco.EmbedReceive(user_data.transfere, "received credits"); 16 | if(embeds.length === 0) embeds = [manager.generateDone("You Dont make any action", "received History")]; 17 | const pagination = new InteractionPagination() 18 | .setButtons([ 19 | new PreviousPageButton({ 20 | custom_id: "prev_page", label: "Previous", style: ButtonStyle.Success 21 | }), 22 | new NextPageButton().setStyle({ 23 | custom_id: "next_page", label: "Next", style: ButtonStyle.Success 24 | }), 25 | ]) 26 | .setEmbeds(embeds) 27 | .setTime(60000); 28 | await pagination.send(interaction) 29 | } 30 | }, 31 | general: { 32 | name: "receive", 33 | description: "to show receive history", 34 | category: "economy", 35 | examples: ["receive"], 36 | usage: ["receive"], 37 | async run(client, message, _args, manager) { 38 | const { PreviousPageButton, NextPageButton, ChannelPagination } = client.package.btn_pages; 39 | let eco = new client.managers.EcoSystem(client); 40 | let user_data = await eco.get_data(message.author); 41 | let embeds = eco.EmbedReceive(user_data.transfere, "Received credits"); 42 | if(embeds.length === 0) embeds = [manager.generateDone("You Dont make any action", "Received History")]; 43 | const pagination = new ChannelPagination() 44 | .setButtons([ 45 | new PreviousPageButton({ 46 | custom_id: "prev_page", label: "Previous", style: ButtonStyle.Success 47 | }), 48 | new NextPageButton().setStyle({ 49 | custom_id: "next_page", label: "Next", style: ButtonStyle.Success 50 | }), 51 | ]) 52 | .setEmbeds(embeds) 53 | .setTime(60000); 54 | 55 | await pagination.send(message.channel); 56 | }, 57 | }, 58 | } as CommandFilerType -------------------------------------------------------------------------------- /src/commands/Eco/transflare-logs.ts: -------------------------------------------------------------------------------- 1 | import { ButtonStyle } from "discord.js"; 2 | import { CommandFilerType } from "../../lib/handler/command"; 3 | export let command = { 4 | slachcmd: { 5 | name: "transfer", 6 | description: "to show sent history", 7 | category: "economy", 8 | examples: ["transfer"], 9 | usage: ["transfer"], 10 | async run(client, interaction, manager) { 11 | const { PreviousPageButton, NextPageButton, InteractionPagination } = client.package.btn_pages; 12 | let user = interaction.user; 13 | let eco = new client.managers.EcoSystem(client); 14 | let user_data = await eco.get_data(user); 15 | let embeds = eco.EmbedTransfer(user_data.transfere, "transfered credits"); 16 | if(embeds.length === 0) embeds = [manager.generateDone("You Dont make any action", "transfered History")]; 17 | const pagination = new InteractionPagination() 18 | .setButtons([ 19 | new PreviousPageButton({ 20 | custom_id: "prev_page", label: "Previous", style: ButtonStyle.Success 21 | }), 22 | new NextPageButton().setStyle({ 23 | custom_id: "next_page", label: "Next", style: ButtonStyle.Success 24 | }), 25 | ]) 26 | .setEmbeds(embeds) 27 | .setTime(60000); 28 | await pagination.send(interaction) 29 | } 30 | }, 31 | general: { 32 | name: "transfer", 33 | description: "to show sent history", 34 | category: "economy", 35 | examples: ["transfer"], 36 | usage: ["transfer"], 37 | async run(client, message, _args, manager) { 38 | const { PreviousPageButton, NextPageButton, ChannelPagination } = client.package.btn_pages; 39 | let eco = new client.managers.EcoSystem(client); 40 | let user_data = await eco.get_data(message.author); 41 | let embeds = eco.EmbedTransfer(user_data.transfere, "transfered credits"); 42 | if(embeds.length === 0) embeds = [manager.generateDone("You Dont make any action", "transfered History")]; 43 | const pagination = new ChannelPagination() 44 | .setButtons([ 45 | new PreviousPageButton({ 46 | custom_id: "prev_page", label: "Previous", style: ButtonStyle.Success 47 | }), 48 | new NextPageButton().setStyle({ 49 | custom_id: "next_page", label: "Next", style: ButtonStyle.Success 50 | }), 51 | ]) 52 | .setEmbeds(embeds) 53 | .setTime(60000); 54 | 55 | await pagination.send(message.channel); 56 | }, 57 | }, 58 | } as CommandFilerType; -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | KINGMAN DEV 2 | 3 | # Discord Eco 4 | 5 | [![](https://img.shields.io/discord/565048515357835264.svg?logo=discord&colorB=blue&label=KINGMAN_DEV)](https://discord.gg/KD2mdRReSA) 6 | [![](https://img.shields.io/badge/discord.js-v13.1.0-blue.svg?logo=npm)](https://github.com/discordjs) 7 | 8 | Discord Eco is a open source Discord bot coded in TypeScript with [Discord.js](https://discord.js.org) and [Mongoose](https://mongoosejs.com/docs/api.html) by [KINGMAN](https://github.com/KMKINGMAN). 9 | Feel free to add a star ⭐ to the repository to promote the project! 10 | 11 | ### Many commands 12 | 13 | Discord Eco has a lot of features 14 | 15 | - [x] Discord.js v14 `SlachCommand` | `UserCommand` | `PredixCommand` 16 | - [x] OOP 17 | - [x] easy to use 18 | - [x] MongoDB Database 19 | 20 | ## Installation 21 |
22 | Click Here 23 |
24 | 1 - make new discord bot and enable intents 25 | KINGMAN DEV 26 |
27 |
28 | 2 - install packages 29 | 30 | npm install 31 | 32 |
33 |
34 | 3- Setup the Bot Configuration in `src/config.json` or `.env` 35 | 36 | token=BOT_TOKEN 37 | prefix=BOT_PRFIX 38 | mongo=DATABASE_CONNECTION 39 | id=BOT_ID 40 | 41 |
42 |
43 | Run The Project 44 | 45 | npm start 46 | 47 |
48 |
49 | 50 | * if you use Repl.it You Need To Update NodeJs to v16 51 | 52 | ```shell 53 | npm init -y && npm i --save-dev node && npm config set prefix=$(pwd)/node_modules/node && export PATH=$(pwd)/node_modules/node/bin:$PATH 54 | ``` 55 | 56 | ## Links 57 | 58 | * [Repl.it](https://repl.it/github/KMKINGMAN/Discord-Eco) 59 | * [Telegram](https://t.me/kingman4hack) 60 | * [Github](https://github.com/KMKINGMAN/Discord-Eco) 61 | * [Instgram](https://instgram.com/km.kingman) 62 | 63 | ## Contributing 64 | 65 | Before **creating an issue**, please ensure that it hasn't already been reported/suggested 66 | And if you have a question, please ask it in the [Telegram Group](https://t.me/kingman4hack) instead of opening an issue. 67 | If you wish to contribute to the KINGMANDEV codebase or documentation, feel free to fork the repository and submit a pull request! 68 | 69 | ## License 70 | 71 | Discord Eco is licensed under the GPL 3.0 license. See the file `LICENSE` for more information. If you plan to use any part of this source code in your own bot, I would be grateful if you would include some form of credit somewhere. 72 | -------------------------------------------------------------------------------- /src/commands/Eco/credits.ts: -------------------------------------------------------------------------------- 1 | import { ApplicationCommandOptionType, User, GuildMember } from "discord.js"; 2 | import { CommandFilerType } from "../../lib/handler/command"; 3 | export let command = { 4 | slachcmd: { 5 | name: "credits", 6 | description: "to show your credits and transfer a credits", 7 | options: [ 8 | { 9 | name: "member", 10 | type: ApplicationCommandOptionType.User, 11 | description: "member that you wanna to show her credits" 12 | }, 13 | { 14 | name: "credits", 15 | type: ApplicationCommandOptionType.Number, 16 | description: "number of credits taht you wanna to send" 17 | } 18 | ], 19 | examples: ["credits", "credits @KINGMAN", "credits @KINGMAN 1000"], 20 | usage: ["credits", "credits [Member]", "credits [Member] [Amout]"], 21 | category: "economy", 22 | async run(client, interaction) { 23 | let eco = new client.managers.EcoSystem(client); 24 | let member = interaction.options.getUser("member", false); 25 | let credits = interaction.options.getNumber("credits", false) 26 | if(member == null){ 27 | let data = await eco.get_data(interaction.member as GuildMember); 28 | interaction.reply(`**💳 | <@${(interaction.member as GuildMember).id}>'s have a \`$${data.credit}\`**`); 29 | } 30 | if(member && credits === null){ 31 | let data = await eco.get_data(member); 32 | interaction.reply(`**💳 | <@${member.id}>'s have a \`$${data.credit}\`**`); 33 | } else if(member && credits){ 34 | eco.transfere((interaction.member as GuildMember), member, credits) 35 | .then((res)=> { 36 | interaction.reply(res); 37 | }) 38 | .catch((err: string)=> { 39 | interaction.reply(err); 40 | }) 41 | } 42 | 43 | } 44 | }, 45 | general: { 46 | name: "daily", 47 | description: "to show your credits and transfer a credits", 48 | examples: ["credits", "credits @KINGMAN", "credits @KINGMAN 1000"], 49 | usage: ["credits", "credits [Member]", "credits [Member] [Amout]"], 50 | category: "economy", 51 | async run(client, message, args, manager) { 52 | let eco = new client.managers.EcoSystem(client); 53 | let member = await manager.getUser(args[0]??""); 54 | if(!member){ 55 | let data = await eco.get_data(message.author); 56 | message.reply(`**💳 | <@${message.author.id}>'s have a \`$${data.credit}\`**`); 57 | }; 58 | if(member && !args[1]){ 59 | let data = await eco.get_data(member); 60 | message.reply(`**💳 | <@${member.id}>'s have a \`$${data.credit}\`**`); 61 | } 62 | if(isNaN(parseInt(args[1]))){ 63 | let data = await eco.get_data(member); 64 | message.reply(`**💳 | <@${member.id}>'s have a \`$${data.credit}\`**`); 65 | } else { 66 | eco.transfere(message.author, member, parseInt(args[1])) 67 | .then((res)=> { 68 | message.reply(res); 69 | }) 70 | .catch((err: string)=> { 71 | message.reply(err); 72 | }) 73 | } 74 | }, 75 | }, 76 | user_command: { 77 | id: "credits", 78 | async run(client, interaction) { 79 | let member = interaction.targetUser as User; 80 | if(member.bot) return interaction.reply({ content: "**You Cant Use This Command in Bots User**", ephemeral: true }); 81 | let eco = new client.managers.EcoSystem(client); 82 | let data = await eco.get_data(member); 83 | interaction.reply(`**💳 | <@${member.id}>'s have a \`$${data.credit}\`**`); 84 | }, 85 | } 86 | } as CommandFilerType -------------------------------------------------------------------------------- /src/events/start handler/interaction.ts: -------------------------------------------------------------------------------- 1 | import { EmbedBuilder } from "@discordjs/builders"; 2 | import { BaseInteraction } from "discord.js"; 3 | import { EventsTyper } from "../../lib/handler/events"; 4 | 5 | export let events = { 6 | name: "interactionCreate", 7 | async run(client, interaction: BaseInteraction){ 8 | if (interaction.isChatInputCommand()) { 9 | let manager = new client.managers.Message(interaction) 10 | const command = client.collection.slash_commands.get(interaction.commandName); 11 | if (!command) return; 12 | if(interaction.member){ 13 | if(!interaction.guild?.members.cache.get(interaction.member.user.id)?.permissions.has(command.permissions?.me || [])){ 14 | return interaction.reply({ embeds: [manager.generateError(`You need \`${command.permissions?.me}\` permissions`)]}) 15 | } 16 | } 17 | if(!interaction.guild?.members.cache.get(client.user?.id ?? "")?.permissions.has(command.permissions?.bot || [])){ 18 | return interaction.reply({ embeds: [manager.generateError(`I need \`${command.permissions?.bot}\` permissions`)]}) 19 | }; 20 | try { 21 | await command.run(client, interaction, manager) 22 | } catch (error) { 23 | console.error(error) 24 | } 25 | }; 26 | if (interaction.isUserContextMenuCommand()) { 27 | const command = client.collection.user_commands.get(interaction.commandName); 28 | if (!command) return; 29 | try { 30 | let manager = new client.managers.Message(interaction) 31 | command.run(client, interaction, manager); 32 | } catch (e) { 33 | console.error(e) 34 | }; 35 | }; 36 | if (interaction.isMessageContextMenuCommand()) { 37 | const command = client.collection.message_commands.get(interaction.commandName); 38 | if (!command) return; 39 | try { 40 | command.run(client, interaction); 41 | } catch (e) { 42 | console.error(e) 43 | }; 44 | }; 45 | if (interaction.isModalSubmit()) { 46 | const modal = client.collection.modals.get(interaction.customId); 47 | if (!modal) return interaction.reply({ 48 | embeds: [ 49 | new EmbedBuilder() 50 | .setDescription('Something went wrong... Probably the Modal ID is not defined in the modals handler.') 51 | ], 52 | ephemeral: true 53 | }); 54 | try { 55 | modal.run(client, interaction); 56 | } catch (e) { 57 | console.error(e) 58 | }; 59 | } 60 | if (interaction.isButton()) { 61 | const button = client.collection.buttons.get(interaction.customId); 62 | if (!button) return interaction.reply({ 63 | embeds: [ 64 | new EmbedBuilder() 65 | .setDescription('Something went wrong... Probably the button ID is not defined in the modals handler.') 66 | ], 67 | ephemeral: true 68 | }); 69 | try { 70 | button.run(client, interaction); 71 | } catch (e) { 72 | console.error(e) 73 | }; 74 | }; 75 | if(interaction.isSelectMenu()){ 76 | const menu = client.collection.select_menu.get(interaction.customId); 77 | if(!menu) return interaction.reply({ 78 | embeds: [ 79 | new EmbedBuilder() 80 | .setDescription('Something went wrong... Probably the selectmenu ID is not defined in the modals handler.') 81 | ] 82 | }); 83 | try { 84 | menu.run(client, interaction) 85 | } catch (error) { 86 | console.log(error) 87 | } 88 | } 89 | } 90 | } as EventsTyper -------------------------------------------------------------------------------- /src/lib/bot_packages/EcoManager.ts: -------------------------------------------------------------------------------- 1 | import { GuildMember, User, EmbedBuilder } from "discord.js"; 2 | import { KMCODES } from "../kingman"; 3 | 4 | export class KINGMAN_ECO { 5 | public client: KMCODES 6 | constructor(client: KMCODES){ 7 | this.client = client 8 | }; 9 | async Daily(user: GuildMember | User){ 10 | return new Promise(async(resolve, reject) => { 11 | let amount = Math.floor(Math.random() * 500) + 100 12 | let timeout = 86400000; 13 | let data = await this.client.eco.findOne({ 14 | user_id: user.id 15 | }); 16 | if(!data) data = await (await this.client.eco.create({ 17 | user_id: user.id 18 | })).save(); 19 | if (timeout - (Date.now() - data.last_daily) > 0){ 20 | let time = this.client.package.ms(timeout - (Date.now() - data.last_daily)); 21 | return reject(`**You have to wait a while \`${time}\` To receive the Daily**`) 22 | } else { 23 | data.credit = data.credit + amount; 24 | data.last_daily = Date.now(); 25 | await data.save(); 26 | return resolve("**💰 | You have received " + `$\`${amount}\` From Daily **`) 27 | } 28 | }) 29 | }; 30 | async transfere(user_transfer: GuildMember | User, user_recive: GuildMember | User, amount: number){ 31 | return new Promise(async(resolve, reject)=> { 32 | let user_profile_1 = await this.client.eco.findOne({ user_id: user_transfer.id }); 33 | if(!user_profile_1) user_profile_1 = await (await this.client.eco.create({ 34 | user_id: user_transfer.id 35 | })).save(); 36 | let user_profile_2 = await this.client.eco.findOne({ user_id: user_recive.id }); 37 | if(!user_profile_2) user_profile_2 = await (await this.client.eco.create({ 38 | user_id: user_recive.id 39 | })).save(); 40 | if(amount > user_profile_1.credit) return resolve(`**You don't have enogth money!**`); 41 | user_profile_1.credit = user_profile_1.credit - amount; 42 | user_profile_1.transfere.push({ 43 | amout: amount, 44 | to: user_recive.id 45 | }); 46 | await user_profile_1.save(); 47 | user_profile_2.credit = user_profile_2.credit + amount; 48 | user_profile_2.receive.push({ 49 | amout: amount, 50 | from: user_transfer.id 51 | }); 52 | await user_profile_2.save(); 53 | return resolve(`**${user_transfer}, You have been sent \`$${amount}\` to ${user_recive}**`) 54 | }) 55 | }; 56 | async get_data(user: GuildMember | User){ 57 | return new Promise<{user_id: string, credit: number, last_daily: number, transfere:{to?: string | undefined; amout?: number | undefined;}[], receive: {from?: string | undefined; amout?: number | undefined}[]}>(async(resolve, reject) => { 58 | let data = await this.client.eco.findOne({ user_id: user.id }); 59 | if(!data) data = await (await this.client.eco.create({ user_id: user.id })).save(); 60 | return resolve({ 61 | user_id: data.user_id, 62 | credit: data.credit, 63 | last_daily: data.last_daily, 64 | receive: data.receive, 65 | transfere: data.transfere 66 | }); 67 | }) 68 | } 69 | EmbedTransfer (arr: {to?: string | undefined; amout?: number | undefined;}[], title: string) { 70 | const embeds: EmbedBuilder[] = []; 71 | let k: number = 5; 72 | for(let i = 0; i < arr.length; i +=5){ 73 | const newarr = arr.slice(i, k); 74 | let j = i 75 | k += 5; 76 | const ebc = newarr 77 | .map(p => `**User: <@${p.to}>\nAmount: \`${p.amout}\`**`) 78 | .join('\n') 79 | const em = new EmbedBuilder() 80 | .setTitle(title) 81 | .setDescription(ebc) 82 | embeds.push(em) 83 | } 84 | return embeds 85 | }; 86 | EmbedReceive (arr: {from?: string | undefined; amout?: number | undefined}[], title: string) { 87 | const embeds: EmbedBuilder[] = []; 88 | let k: number = 5; 89 | for(let i = 0; i < arr.length; i +=5){ 90 | const newarr = arr.slice(i, k); 91 | let j = i 92 | k += 5; 93 | const ebc = newarr 94 | .map(p => `**User: <@${p.from}>\nAmount: \`${p.amout}\`**`) 95 | .join('\n') 96 | const em = new EmbedBuilder() 97 | .setTitle(title) 98 | .setDescription(ebc) 99 | embeds.push(em) 100 | } 101 | return embeds 102 | }; 103 | } -------------------------------------------------------------------------------- /src/lib/bot_packages/messageManager.ts: -------------------------------------------------------------------------------- 1 | import { EmbedBuilder } from "@discordjs/builders"; 2 | import { Channel, ChatInputCommandInteraction, UserContextMenuCommandInteraction,Guild, GuildMember, Message, Role, User } from "discord.js"; 3 | 4 | export class MESSAGE_MANAGER { 5 | public message: Message | ChatInputCommandInteraction | UserContextMenuCommandInteraction 6 | constructor(message: Message | ChatInputCommandInteraction | UserContextMenuCommandInteraction){ 7 | this.message = message 8 | }; 9 | generateDone(content: string, title?: string): EmbedBuilder { 10 | return new EmbedBuilder({ 11 | title: title??`**✔️ Succeed**`, 12 | author: { 13 | name: `${this.message.member?.user.username}` 14 | }, 15 | description: content, 16 | footer: { 17 | text: `${this.message.client.user?.username} Power By KMCodes` 18 | }, 19 | color: 15844367 20 | }) 21 | }; 22 | generateError(content: string, title?: string): EmbedBuilder { 23 | return new EmbedBuilder({ 24 | title: title??"**⚠️ Error**", 25 | description: content, 26 | footer: { 27 | text: `${this.message.client.user?.username} Power By KMCodes` 28 | }, 29 | color: 15548997 30 | }) 31 | }; 32 | async getUser(key: string){ 33 | return new Promise(async(resolve, reject) => { 34 | if(this.message instanceof Message) { 35 | let user = await this.message.mentions.members?.first() || 36 | await this.message.guild?.members.cache.get(key) || 37 | await this.message.guild?.members.cache.find(m => m.displayName.toLowerCase() == key.toLowerCase()); 38 | if(!user){ 39 | return reject({ message: "NO MEMBER FOUND" }) 40 | } 41 | return resolve(user.user) 42 | } else { 43 | let user = await this.message.guild?.members.cache.get(key) || 44 | await this.message.guild?.members.cache.find(m => m.displayName.toLowerCase() == key.toLowerCase()); 45 | if(!user){ 46 | return reject({ message: "NO MEMBER FOUND" }) 47 | } 48 | return resolve(user.user) 49 | } 50 | }) 51 | }; 52 | async getMember(key: string){ 53 | return new Promise(async(resolve, reject) => { 54 | if(this.message instanceof Message) { 55 | let user = await this.message.mentions.members?.first() || 56 | await this.message.guild?.members.cache.get(key) || 57 | await this.message.guild?.members.cache.find(m => m.displayName.toLowerCase() == key.toLowerCase()); 58 | if(!user){ 59 | return reject({ message: "NO MEMBER FOUND" }) 60 | } 61 | return resolve(user) 62 | } else { 63 | let user = await this.message.guild?.members.cache.get(key) || 64 | await this.message.guild?.members.cache.find(m => m.displayName.toLowerCase() == key.toLowerCase()); 65 | if(!user){ 66 | return reject({ message: "NO MEMBER FOUND" }) 67 | } 68 | return resolve(user) 69 | } 70 | }) 71 | }; 72 | async getChannel(key: string){ 73 | return new Promise(async(resolve, reject) => { 74 | if(this.message instanceof Message){ 75 | let channel = await this.message.mentions.channels.first() || 76 | await this.message.guild?.channels.cache.get(key) || 77 | await this.message.guild?.channels.cache.find((c) => c.name == key); 78 | if(!channel){ 79 | return reject({ message: "NO CHANNEL FOUND" }) 80 | } 81 | return resolve(channel) 82 | } else { 83 | let channel = await this.message.guild?.channels.cache.get(key) || 84 | await this.message.guild?.channels.cache.find((c) => c.name == key); 85 | if(!channel){ 86 | return reject({ message: "NO CHANNEL FOUND" }) 87 | } 88 | return resolve(channel) 89 | } 90 | }) 91 | }; 92 | async getRole(key: string){ 93 | return new Promise(async(resolve, reject) => { 94 | if(this.message instanceof Message){ 95 | let role = await this.message.mentions.roles.first() || 96 | await this.message.guild?.roles.cache.get(key) || 97 | await this.message.guild?.roles.cache.find(role=> role.name === key); 98 | if(!role){ 99 | return reject({ message: "NO ROLE FOUND" }) 100 | } 101 | if(role.managed || role.name === '@everyone'){ 102 | return reject({ message: "Managed Role" }) 103 | } 104 | return resolve(role) 105 | } else { 106 | let role = await this.message.guild?.roles.cache.get(key) || 107 | await this.message.guild?.roles.cache.find(role=> role.name === key); 108 | if(!role){ 109 | return reject({ message: "NO ROLE FOUND" }) 110 | }; 111 | if(role.managed || role.name === '@everyone'){ 112 | return reject({ message: "Managed Role" }) 113 | } 114 | return resolve(role) 115 | } 116 | }) 117 | } 118 | } -------------------------------------------------------------------------------- /src/lib/handler/command.ts: -------------------------------------------------------------------------------- 1 | import { Message, UserContextMenuCommandInteraction, PermissionFlags, ApplicationCommandOptionData, ChatInputCommandInteraction, ModalSubmitInteraction, REST, ApplicationCommandOptionBase, PermissionsBitField, MessageContextMenuCommandInteraction, Routes, ButtonInteraction, SelectMenuInteraction } from "discord.js" 2 | import { MESSAGE_MANAGER } from "../bot_packages/messageManager"; 3 | import { KMCODES } from "../kingman"; 4 | export type general = { 5 | name: string, 6 | permissions? :{ 7 | me?: keyof PermissionFlags, 8 | bot?: keyof PermissionFlags 9 | }, 10 | description?: string, 11 | examples?: Array, 12 | usage?: Array, 13 | category? : string, 14 | run: (client: KMCODES, message: Message, args: Array, manager: MESSAGE_MANAGER)=> Promise 15 | } 16 | export type slachcmd = { 17 | name: string, 18 | permissions? :{ 19 | me?: keyof PermissionFlags, 20 | bot?: keyof PermissionFlags 21 | }, 22 | description: string, 23 | examples?: Array, 24 | usage?: Array, 25 | category? : string, 26 | options? : Array, 27 | run: (client: KMCODES, interaction: ChatInputCommandInteraction, manager: MESSAGE_MANAGER)=> Promise 28 | } 29 | export type user_command = { 30 | id: string, 31 | run: (client: KMCODES, interaction: UserContextMenuCommandInteraction, manager: MESSAGE_MANAGER)=> Promise 32 | } 33 | export type modal = { 34 | id: string, 35 | run: (client: KMCODES, interaction: ModalSubmitInteraction)=> Promise 36 | }; 37 | export type message_command = { 38 | id: string, 39 | run: (client: KMCODES, interaction: MessageContextMenuCommandInteraction)=> Promise 40 | }; 41 | export type buttons_type = { 42 | id: string, 43 | run: (client: KMCODES, interaction: ButtonInteraction)=> Promise 44 | } 45 | export type select_menu_type = { 46 | id: string, 47 | run: (client: KMCODES, interaction: SelectMenuInteraction)=> Promise 48 | } 49 | export interface CommandFilerType { 50 | general?: general, 51 | slachcmd?: slachcmd, 52 | user_command?: user_command, 53 | modal?: modal, 54 | message_command? :message_command, 55 | buttons?: buttons_type[], 56 | select_menu?: select_menu_type 57 | } 58 | export const load = async(client: KMCODES) => { 59 | let interaction_commands: { name: string; description?: string; type: number; options?: ApplicationCommandOptionData[] | null; default_permission?: string | null; default_member_permissions?: string | null }[] | { name: string; type: any; }[] = []; 60 | await Promise.all( 61 | client.package.fs.readdirSync("./src/commands/") 62 | .map(async(dir)=> { 63 | let command_file = client.package.fs.readdirSync(`./src/commands/${dir}`).filter((f)=> f.endsWith(".ts")); 64 | await Promise.all( 65 | command_file.map(async(file)=> { 66 | let files = (await import(`../../commands/${dir}/${file}`)).command as CommandFilerType; 67 | if(files.general){ 68 | client.collection.prefix_command.set(files.general.name, files.general) 69 | } 70 | if(files.slachcmd){ 71 | client.collection.slash_commands.set(files.slachcmd.name, files.slachcmd); 72 | interaction_commands.push({ 73 | name: files.slachcmd.name, 74 | description: files.slachcmd.description, 75 | type: 1, 76 | options: files.slachcmd.options ? files.slachcmd.options : null, 77 | default_member_permissions: files.slachcmd.permissions?.me ? PermissionsBitField.resolve(files.slachcmd.permissions?.me).toString() : null 78 | }) 79 | } 80 | if(files.user_command){ 81 | client.collection.user_commands.set(files.user_command.id, files.user_command); 82 | interaction_commands.push({ 83 | name: files.user_command.id, 84 | type: 2, 85 | }); 86 | }; 87 | if(files.message_command){ 88 | client.collection.message_commands.set(files.message_command.id, files.message_command); 89 | interaction_commands.push({ 90 | name: files.message_command.id, 91 | type: 3, 92 | }); 93 | } 94 | if(files.modal){ 95 | client.collection.modals.set(files.modal.id, files.modal) 96 | }; 97 | if(files.buttons && files.buttons.length !== 0){ 98 | await Promise.all( 99 | files.buttons.map((button)=> { 100 | return client.collection.buttons.set(button.id, button) 101 | }) 102 | ) 103 | }; 104 | if(files.select_menu){ 105 | client.collection.select_menu.set(files.select_menu.id, files.select_menu) 106 | } 107 | }) 108 | ) 109 | }) 110 | ); 111 | const rest = new REST({ version: '10' }).setToken(client.config.token); 112 | try { 113 | await rest.put( 114 | Routes.applicationCommands(client.config.id), 115 | { body: interaction_commands } 116 | ); 117 | client.logger.done("All Commands Loaded and Registerd") 118 | } catch(e) { 119 | console.log(e) 120 | } 121 | }; -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@cspotcode/source-map-support@^0.8.0": 6 | "integrity" "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==" 7 | "resolved" "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" 8 | "version" "0.8.1" 9 | dependencies: 10 | "@jridgewell/trace-mapping" "0.3.9" 11 | 12 | "@discordjs/builders@^1.2.0": 13 | "integrity" "sha512-ARy4BUTMU+S0ZI6605NDqfWO+qZqV2d/xfY32z3hVSsd9IaAKJBZ1ILTZLy87oIjW8+gUpQmk9Kt0ZP9bmmd8Q==" 14 | "resolved" "https://registry.npmjs.org/@discordjs/builders/-/builders-1.2.0.tgz" 15 | "version" "1.2.0" 16 | dependencies: 17 | "@sapphire/shapeshift" "^3.5.1" 18 | "discord-api-types" "^0.37.3" 19 | "fast-deep-equal" "^3.1.3" 20 | "ts-mixer" "^6.0.1" 21 | "tslib" "^2.4.0" 22 | 23 | "@discordjs/collection@^1.0.1", "@discordjs/collection@^1.1.0": 24 | "integrity" "sha512-PQ2Bv6pnT7aGPCKWbvvNRww5tYCGpggIQVgpuF9TdDPeR6n6vQYxezXiLVOS9z2B62Dp4c+qepQ15SgJbLYtCQ==" 25 | "resolved" "https://registry.npmjs.org/@discordjs/collection/-/collection-1.1.0.tgz" 26 | "version" "1.1.0" 27 | 28 | "@discordjs/rest@^1.1.0": 29 | "integrity" "sha512-yCrthRTQeUyNThQEpCk7bvQJlwQmz6kU0tf3dcWBv2WX3Bncl41x7Wc+v5b5OsIxfNYq38PvVtWircu9jtYZug==" 30 | "resolved" "https://registry.npmjs.org/@discordjs/rest/-/rest-1.1.0.tgz" 31 | "version" "1.1.0" 32 | dependencies: 33 | "@discordjs/collection" "^1.0.1" 34 | "@sapphire/async-queue" "^1.5.0" 35 | "@sapphire/snowflake" "^3.2.2" 36 | "discord-api-types" "^0.37.3" 37 | "file-type" "^17.1.6" 38 | "tslib" "^2.4.0" 39 | "undici" "^5.9.1" 40 | 41 | "@jridgewell/resolve-uri@^3.0.3": 42 | "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" 43 | "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" 44 | "version" "3.1.0" 45 | 46 | "@jridgewell/sourcemap-codec@^1.4.10": 47 | "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" 48 | "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" 49 | "version" "1.4.14" 50 | 51 | "@jridgewell/trace-mapping@0.3.9": 52 | "integrity" "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==" 53 | "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" 54 | "version" "0.3.9" 55 | dependencies: 56 | "@jridgewell/resolve-uri" "^3.0.3" 57 | "@jridgewell/sourcemap-codec" "^1.4.10" 58 | 59 | "@sapphire/async-queue@^1.5.0": 60 | "integrity" "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" 61 | "resolved" "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz" 62 | "version" "1.5.0" 63 | 64 | "@sapphire/shapeshift@^3.5.1": 65 | "integrity" "sha512-tu2WLRdo5wotHRvsCkspg3qMiP6ETC3Q1dns1Q5V6zKUki+1itq6AbhMwohF9ZcLoYqg+Y8LkgRRtVxxTQVTBQ==" 66 | "resolved" "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.6.0.tgz" 67 | "version" "3.6.0" 68 | dependencies: 69 | "fast-deep-equal" "^3.1.3" 70 | "lodash.uniqwith" "^4.5.0" 71 | 72 | "@sapphire/snowflake@^3.2.2": 73 | "integrity" "sha512-ula2O0kpSZtX9rKXNeQMrHwNd7E4jPDJYUXmEGTFdMRfyfMw+FPyh04oKMjAiDuOi64bYgVkOV3MjK+loImFhQ==" 74 | "resolved" "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.2.2.tgz" 75 | "version" "3.2.2" 76 | 77 | "@tokenizer/token@^0.3.0": 78 | "integrity" "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" 79 | "resolved" "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" 80 | "version" "0.3.0" 81 | 82 | "@tsconfig/node10@^1.0.7": 83 | "integrity" "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" 84 | "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" 85 | "version" "1.0.9" 86 | 87 | "@tsconfig/node12@^1.0.7": 88 | "integrity" "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" 89 | "resolved" "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" 90 | "version" "1.0.11" 91 | 92 | "@tsconfig/node14@^1.0.0": 93 | "integrity" "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" 94 | "resolved" "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" 95 | "version" "1.0.3" 96 | 97 | "@tsconfig/node16@^1.0.2": 98 | "integrity" "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" 99 | "resolved" "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" 100 | "version" "1.0.3" 101 | 102 | "@types/figlet@^1.5.5": 103 | "integrity" "sha512-0sMBeFoqdGgdXoR/hgKYSWMpFufSpToosNsI2VgmkPqZJgeEXsXNu2hGr0FN401dBro2tNO5y2D6uw3UxVaxbg==" 104 | "resolved" "https://registry.npmjs.org/@types/figlet/-/figlet-1.5.5.tgz" 105 | "version" "1.5.5" 106 | 107 | "@types/fs-extra@^9.0.13": 108 | "integrity" "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==" 109 | "resolved" "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz" 110 | "version" "9.0.13" 111 | dependencies: 112 | "@types/node" "*" 113 | 114 | "@types/ms@^0.7.31": 115 | "integrity" "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" 116 | "resolved" "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" 117 | "version" "0.7.31" 118 | 119 | "@types/node@*": 120 | "integrity" "sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg==" 121 | "resolved" "https://registry.npmjs.org/@types/node/-/node-18.7.16.tgz" 122 | "version" "18.7.16" 123 | 124 | "@types/webidl-conversions@*": 125 | "integrity" "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" 126 | "resolved" "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz" 127 | "version" "7.0.0" 128 | 129 | "@types/whatwg-url@^8.2.1": 130 | "integrity" "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==" 131 | "resolved" "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz" 132 | "version" "8.2.2" 133 | dependencies: 134 | "@types/node" "*" 135 | "@types/webidl-conversions" "*" 136 | 137 | "@types/ws@^8.5.3": 138 | "integrity" "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==" 139 | "resolved" "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz" 140 | "version" "8.5.3" 141 | dependencies: 142 | "@types/node" "*" 143 | 144 | "acorn-walk@^8.1.1": 145 | "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" 146 | "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" 147 | "version" "8.2.0" 148 | 149 | "acorn@^8.4.1": 150 | "integrity" "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" 151 | "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" 152 | "version" "8.8.0" 153 | 154 | "ansi-styles@^4.1.0": 155 | "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" 156 | "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 157 | "version" "4.3.0" 158 | dependencies: 159 | "color-convert" "^2.0.1" 160 | 161 | "arg@^4.1.0": 162 | "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" 163 | "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" 164 | "version" "4.1.3" 165 | 166 | "base64-js@^1.3.1": 167 | "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 168 | "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" 169 | "version" "1.5.1" 170 | 171 | "bson@^4.6.5", "bson@^4.7.0": 172 | "integrity" "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==" 173 | "resolved" "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz" 174 | "version" "4.7.0" 175 | dependencies: 176 | "buffer" "^5.6.0" 177 | 178 | "buffer@^5.6.0": 179 | "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" 180 | "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" 181 | "version" "5.7.1" 182 | dependencies: 183 | "base64-js" "^1.3.1" 184 | "ieee754" "^1.1.13" 185 | 186 | "chalk@^4.1.2": 187 | "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" 188 | "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 189 | "version" "4.1.2" 190 | dependencies: 191 | "ansi-styles" "^4.1.0" 192 | "supports-color" "^7.1.0" 193 | 194 | "color-convert@^2.0.1": 195 | "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" 196 | "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 197 | "version" "2.0.1" 198 | dependencies: 199 | "color-name" "~1.1.4" 200 | 201 | "color-name@~1.1.4": 202 | "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 203 | "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 204 | "version" "1.1.4" 205 | 206 | "create-require@^1.1.0": 207 | "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" 208 | "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" 209 | "version" "1.1.1" 210 | 211 | "debug@4.x": 212 | "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" 213 | "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 214 | "version" "4.3.4" 215 | dependencies: 216 | "ms" "2.1.2" 217 | 218 | "denque@^2.1.0": 219 | "integrity" "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" 220 | "resolved" "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" 221 | "version" "2.1.0" 222 | 223 | "diff@^4.0.1": 224 | "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" 225 | "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" 226 | "version" "4.0.2" 227 | 228 | "discord-api-types@^0.37.3", "discord-api-types@^0.37.8": 229 | "integrity" "sha512-uhol9KQ2moExZItMpuDMkf0R7sqqNHqcJBFN7S5iSdXBVCMRO7sC0GoyuRrv6ZDBYxoFU6nDy4dv0nld/aysqA==" 230 | "resolved" "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.8.tgz" 231 | "version" "0.37.8" 232 | 233 | "discord.js@^14.3.0", "discord.js@14.x": 234 | "integrity" "sha512-CpIwoAAuELiHSgVKRMzsCADS6ZlJwAZ9RlvcJYdEgS00aW36dSvXyBgE+S3pigkc7G+jU6BEalMUWIJFveqrBQ==" 235 | "resolved" "https://registry.npmjs.org/discord.js/-/discord.js-14.3.0.tgz" 236 | "version" "14.3.0" 237 | dependencies: 238 | "@discordjs/builders" "^1.2.0" 239 | "@discordjs/collection" "^1.1.0" 240 | "@discordjs/rest" "^1.1.0" 241 | "@sapphire/snowflake" "^3.2.2" 242 | "@types/ws" "^8.5.3" 243 | "discord-api-types" "^0.37.3" 244 | "fast-deep-equal" "^3.1.3" 245 | "lodash.snakecase" "^4.1.1" 246 | "tslib" "^2.4.0" 247 | "undici" "^5.9.1" 248 | "ws" "^8.8.1" 249 | 250 | "djs-button-pages@^2.1.3": 251 | "integrity" "sha512-RNLMvHOQPXM6K5NQoSytbu1f1VIdVjC3XIDHuclZFgtWye+0lSZIVGYHmzprSkFPgnvUc138la4OLycpgdSJHw==" 252 | "resolved" "https://registry.npmjs.org/djs-button-pages/-/djs-button-pages-2.1.3.tgz" 253 | "version" "2.1.3" 254 | dependencies: 255 | "discord.js" "14.x" 256 | 257 | "dotenv@^16.0.2": 258 | "integrity" "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==" 259 | "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz" 260 | "version" "16.0.2" 261 | 262 | "fast-deep-equal@^3.1.3": 263 | "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 264 | "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 265 | "version" "3.1.3" 266 | 267 | "figlet@^1.5.2": 268 | "integrity" "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ==" 269 | "resolved" "https://registry.npmjs.org/figlet/-/figlet-1.5.2.tgz" 270 | "version" "1.5.2" 271 | 272 | "file-type@^17.1.6": 273 | "integrity" "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==" 274 | "resolved" "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz" 275 | "version" "17.1.6" 276 | dependencies: 277 | "readable-web-to-node-stream" "^3.0.2" 278 | "strtok3" "^7.0.0-alpha.9" 279 | "token-types" "^5.0.0-alpha.2" 280 | 281 | "fs-extra@^10.1.0": 282 | "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" 283 | "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" 284 | "version" "10.1.0" 285 | dependencies: 286 | "graceful-fs" "^4.2.0" 287 | "jsonfile" "^6.0.1" 288 | "universalify" "^2.0.0" 289 | 290 | "graceful-fs@^4.1.6", "graceful-fs@^4.2.0": 291 | "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" 292 | "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" 293 | "version" "4.2.10" 294 | 295 | "has-flag@^4.0.0": 296 | "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 297 | "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 298 | "version" "4.0.0" 299 | 300 | "ieee754@^1.1.13", "ieee754@^1.2.1": 301 | "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 302 | "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" 303 | "version" "1.2.1" 304 | 305 | "inherits@^2.0.3": 306 | "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 307 | "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 308 | "version" "2.0.4" 309 | 310 | "ip@^2.0.0": 311 | "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 312 | "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" 313 | "version" "2.0.0" 314 | 315 | "jsonfile@^6.0.1": 316 | "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" 317 | "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" 318 | "version" "6.1.0" 319 | dependencies: 320 | "universalify" "^2.0.0" 321 | optionalDependencies: 322 | "graceful-fs" "^4.1.6" 323 | 324 | "kareem@2.4.1": 325 | "integrity" "sha512-aJ9opVoXroQUPfovYP5kaj2lM7Jn02Gw13bL0lg9v0V7SaUc0qavPs0Eue7d2DcC3NjqI6QAUElXNsuZSeM+EA==" 326 | "resolved" "https://registry.npmjs.org/kareem/-/kareem-2.4.1.tgz" 327 | "version" "2.4.1" 328 | 329 | "lodash.snakecase@^4.1.1": 330 | "integrity" "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" 331 | "resolved" "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" 332 | "version" "4.1.1" 333 | 334 | "lodash.uniqwith@^4.5.0": 335 | "integrity" "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==" 336 | "resolved" "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz" 337 | "version" "4.5.0" 338 | 339 | "make-error@^1.1.1": 340 | "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 341 | "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" 342 | "version" "1.3.6" 343 | 344 | "memory-pager@^1.0.2": 345 | "integrity" "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" 346 | "resolved" "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz" 347 | "version" "1.5.0" 348 | 349 | "mongodb-connection-string-url@^2.5.3": 350 | "integrity" "sha512-f+/WsED+xF4B74l3k9V/XkTVj5/fxFH2o5ToKXd8Iyi5UhM+sO9u0Ape17Mvl/GkZaFtM0HQnzAG5OTmhKw+tQ==" 351 | "resolved" "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.3.tgz" 352 | "version" "2.5.3" 353 | dependencies: 354 | "@types/whatwg-url" "^8.2.1" 355 | "whatwg-url" "^11.0.0" 356 | 357 | "mongodb@4.9.1": 358 | "integrity" "sha512-ZhgI/qBf84fD7sI4waZBoLBNJYPQN5IOC++SBCiPiyhzpNKOxN/fi0tBHvH2dEC42HXtNEbFB0zmNz4+oVtorQ==" 359 | "resolved" "https://registry.npmjs.org/mongodb/-/mongodb-4.9.1.tgz" 360 | "version" "4.9.1" 361 | dependencies: 362 | "bson" "^4.7.0" 363 | "denque" "^2.1.0" 364 | "mongodb-connection-string-url" "^2.5.3" 365 | "socks" "^2.7.0" 366 | optionalDependencies: 367 | "saslprep" "^1.0.3" 368 | 369 | "mongoose@^6.6.1": 370 | "integrity" "sha512-hPDamnn6quL9TjIrOudqUS5sMilENmP/gfxoCIb+rDmlzawtM7+MVCAWrM9930fzD20N7qAema/zE9QIDuifhQ==" 371 | "resolved" "https://registry.npmjs.org/mongoose/-/mongoose-6.6.1.tgz" 372 | "version" "6.6.1" 373 | dependencies: 374 | "bson" "^4.6.5" 375 | "kareem" "2.4.1" 376 | "mongodb" "4.9.1" 377 | "mpath" "0.9.0" 378 | "mquery" "4.0.3" 379 | "ms" "2.1.3" 380 | "sift" "16.0.0" 381 | 382 | "mpath@0.9.0": 383 | "integrity" "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" 384 | "resolved" "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz" 385 | "version" "0.9.0" 386 | 387 | "mquery@4.0.3": 388 | "integrity" "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==" 389 | "resolved" "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz" 390 | "version" "4.0.3" 391 | dependencies: 392 | "debug" "4.x" 393 | 394 | "ms@^2.1.3", "ms@2.1.3": 395 | "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 396 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 397 | "version" "2.1.3" 398 | 399 | "ms@2.1.2": 400 | "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 401 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 402 | "version" "2.1.2" 403 | 404 | "peek-readable@^5.0.0": 405 | "integrity" "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==" 406 | "resolved" "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz" 407 | "version" "5.0.0" 408 | 409 | "punycode@^2.1.1": 410 | "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 411 | "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" 412 | "version" "2.1.1" 413 | 414 | "readable-stream@^3.6.0": 415 | "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" 416 | "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" 417 | "version" "3.6.0" 418 | dependencies: 419 | "inherits" "^2.0.3" 420 | "string_decoder" "^1.1.1" 421 | "util-deprecate" "^1.0.1" 422 | 423 | "readable-web-to-node-stream@^3.0.2": 424 | "integrity" "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==" 425 | "resolved" "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz" 426 | "version" "3.0.2" 427 | dependencies: 428 | "readable-stream" "^3.6.0" 429 | 430 | "safe-buffer@~5.2.0": 431 | "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 432 | "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 433 | "version" "5.2.1" 434 | 435 | "saslprep@^1.0.3": 436 | "integrity" "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==" 437 | "resolved" "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz" 438 | "version" "1.0.3" 439 | dependencies: 440 | "sparse-bitfield" "^3.0.3" 441 | 442 | "sift@16.0.0": 443 | "integrity" "sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ==" 444 | "resolved" "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz" 445 | "version" "16.0.0" 446 | 447 | "smart-buffer@^4.2.0": 448 | "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" 449 | "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" 450 | "version" "4.2.0" 451 | 452 | "socks@^2.7.0": 453 | "integrity" "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==" 454 | "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" 455 | "version" "2.7.0" 456 | dependencies: 457 | "ip" "^2.0.0" 458 | "smart-buffer" "^4.2.0" 459 | 460 | "sparse-bitfield@^3.0.3": 461 | "integrity" "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==" 462 | "resolved" "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" 463 | "version" "3.0.3" 464 | dependencies: 465 | "memory-pager" "^1.0.2" 466 | 467 | "string_decoder@^1.1.1": 468 | "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" 469 | "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" 470 | "version" "1.3.0" 471 | dependencies: 472 | "safe-buffer" "~5.2.0" 473 | 474 | "strtok3@^7.0.0-alpha.9": 475 | "integrity" "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==" 476 | "resolved" "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz" 477 | "version" "7.0.0" 478 | dependencies: 479 | "@tokenizer/token" "^0.3.0" 480 | "peek-readable" "^5.0.0" 481 | 482 | "supports-color@^7.1.0": 483 | "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" 484 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 485 | "version" "7.2.0" 486 | dependencies: 487 | "has-flag" "^4.0.0" 488 | 489 | "token-types@^5.0.0-alpha.2": 490 | "integrity" "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==" 491 | "resolved" "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz" 492 | "version" "5.0.1" 493 | dependencies: 494 | "@tokenizer/token" "^0.3.0" 495 | "ieee754" "^1.2.1" 496 | 497 | "tr46@^3.0.0": 498 | "integrity" "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==" 499 | "resolved" "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" 500 | "version" "3.0.0" 501 | dependencies: 502 | "punycode" "^2.1.1" 503 | 504 | "ts-mixer@^6.0.1": 505 | "integrity" "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" 506 | "resolved" "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz" 507 | "version" "6.0.1" 508 | 509 | "ts-node@^10.9.1": 510 | "integrity" "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==" 511 | "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" 512 | "version" "10.9.1" 513 | dependencies: 514 | "@cspotcode/source-map-support" "^0.8.0" 515 | "@tsconfig/node10" "^1.0.7" 516 | "@tsconfig/node12" "^1.0.7" 517 | "@tsconfig/node14" "^1.0.0" 518 | "@tsconfig/node16" "^1.0.2" 519 | "acorn" "^8.4.1" 520 | "acorn-walk" "^8.1.1" 521 | "arg" "^4.1.0" 522 | "create-require" "^1.1.0" 523 | "diff" "^4.0.1" 524 | "make-error" "^1.1.1" 525 | "v8-compile-cache-lib" "^3.0.1" 526 | "yn" "3.1.1" 527 | 528 | "tslib@^2.4.0": 529 | "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" 530 | "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" 531 | "version" "2.4.0" 532 | 533 | "typescript@>=2.7": 534 | "integrity" "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==" 535 | "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz" 536 | "version" "4.8.3" 537 | 538 | "undici@^5.9.1": 539 | "integrity" "sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==" 540 | "resolved" "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz" 541 | "version" "5.10.0" 542 | 543 | "universalify@^2.0.0": 544 | "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" 545 | "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" 546 | "version" "2.0.0" 547 | 548 | "util-deprecate@^1.0.1": 549 | "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 550 | "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 551 | "version" "1.0.2" 552 | 553 | "v8-compile-cache-lib@^3.0.1": 554 | "integrity" "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" 555 | "resolved" "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" 556 | "version" "3.0.1" 557 | 558 | "webidl-conversions@^7.0.0": 559 | "integrity" "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" 560 | "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" 561 | "version" "7.0.0" 562 | 563 | "whatwg-url@^11.0.0": 564 | "integrity" "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==" 565 | "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz" 566 | "version" "11.0.0" 567 | dependencies: 568 | "tr46" "^3.0.0" 569 | "webidl-conversions" "^7.0.0" 570 | 571 | "ws@^8.8.1": 572 | "integrity" "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==" 573 | "resolved" "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz" 574 | "version" "8.8.1" 575 | 576 | "yn@3.1.1": 577 | "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" 578 | "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" 579 | "version" "3.1.1" 580 | --------------------------------------------------------------------------------