authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2023-02-10 18:23:34-05:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-01-02 23:03:55-08:00
log1754cd373750ae05e47dd7504eec6a471705d4dd
treeee97c74e2fa56b617839f906c19fdff8900d0c15
parent3a819b9b4ac8315e60f9450ba051d881ea2f0d16
signaturelock-open Commit is signed but in an unrecognized format.

update to discord.js 14


6 files changed, 510 insertions(+), 319 deletions(-)

.gitignore+1
......@@ -1,3 +1,4 @@
11token
22.env
33node_modules
4index.js
index.js deleted-214
......@@ -1,214 +0,0 @@
1require('dotenv').config();
2
3const Discord = require('discord.js');
4const fs = require('fs');
5const Color = require('color');
6const Long = require('long');
7const Cache = require('node-cache');
8const client = new Discord.Client({
9 intents: [
10 'GUILDS',
11 'GUILD_MEMBERS',
12 'GUILD_MESSAGES',
13 ],
14});
15
16function updateClientStatus() {
17 client.user.setActivity(`/paint | ${client.guilds.cache.size} servers.`)
18}
19
20client.on('ready', async() => {
21 console.log(`Logged in as ${client.user.tag}!`);
22 updateClientStatus();
23
24 // client.application.commands.create({
25 // name: 'paint',
26 // description: 'Customize your username color',
27 // options: [
28 // { name: 'color', description: 'Color to change your name to (HEX or CSS)', type: 'STRING', required: true },
29 // ]
30 // });
31
32 // client.application.commands.create({
33 // name: 'clean-roles',
34 // description: 'Run the role cleanup utility manually'
35 // });
36});
37
38const schedules = {}
39
40const rateLimitCache = new Cache({
41 stdTTL: 2
42})
43const rateLimitCache2 = new Cache({
44 stdTTL: 230
45})
46
47async function cleanup(guild) {
48 clearTimeout(schedules[guild.id]);
49 delete schedules[guild.id];
50 let n = 0;
51 const rolesToCheck = guild.roles.cache.filter(role => role.name.startsWith('#'));
52 const allMembers = await guild.members.fetch();
53 const colorUses = {};
54 allMembers.forEach(x => {
55 x.roles.cache.forEach(role => {
56 if (role.name.startsWith('#')) {
57 colorUses[role.id] = true;
58 }
59 });
60 });
61 await Promise.all(rolesToCheck.map(async (role) => {
62 if (!colorUses[role.id]) {
63 n++;
64 await role.delete();
65 }
66 }));
67 return n;
68}
69
70async function scheduleClean(guild) {
71 if (schedules[guild.id]) {
72 return;
73 }
74 schedules[guild.id] = setTimeout(() => {
75 cleanup(guild)
76 }, 5 * 60 * 1000);
77}
78
79client.on('messageCreate', async (msg) => {
80 if (msg.author.bot) return;
81
82 if (msg.content.startsWith('!paint') || msg.content.startsWith('!color')) {
83 msg.channel.send('Name Paint has been updated to use slash commands. If they do not show up, have an admin reinvite the bot:\n<https://davecode.me/name-painter-invite>')
84 }
85});
86
87client.on('interactionCreate', async (i) => {
88 if (i.isCommand() && i.commandName === 'paint') {
89 const input = i.options.get('color').value;
90
91 let color;
92 try {
93 color = Color(input);
94 } catch (error) {
95 try {
96 color = Color('#' + input);
97 } catch (error) {
98 i.reply({
99 ephemeral: true,
100 content: `Could not get a color from \`\`${input.substring(0, 500).replace(/\n/g, ' ').replace(/`/g, '\u2063`\u2063')}\`\``,
101 })
102 return;
103 }
104 }
105
106 const hex = color.hex();
107
108 if (rateLimitCache.has(i.user.id)) {
109 i.reply({
110 ephemeral: true,
111 content: 'You have reached the rate limit. Please wait a few seconds before running the command again.',
112 });
113 return;
114 }
115
116 rateLimitCache.set(i.user.id , 'true');
117
118 let role = i.guild.roles.cache.find(role => role.name === hex);
119
120 if (!role) {
121 if (i.guild.roles.cache.length === 250) {
122 i.reply({
123 ephemeral: true,
124 content: `The role limit of **250 Roles** has been hit, I cannot assign you this name color.`
125 });
126 return;
127 } else {
128 try {
129 role = await i.guild.roles.create({
130 name: hex,
131 color: color.rgbNumber(),
132 permissions: [],
133 });
134 } catch (error) {
135 console.log(error)
136 i.reply({
137 ephemeral: true,
138 content: `Error creating a role for you, contact an admin to check my permissions.`
139 });
140 return;
141 }
142 }
143 }
144
145 try {
146 const rolesToRemove = i.member.roles.cache.filter(role => role.name.startsWith('#') && role.name !== hex);
147 rolesToRemove.map(async (role) => {
148 i.member.roles.remove(role);
149 });
150 await i.member.roles.add(role);
151 i.reply({
152 ephemeral: true,
153 content: `You\'ve been painted to **${hex}**`
154 });
155
156 scheduleClean(i.guild)
157 } catch (error) {
158 i.reply({
159 ephemeral: true,
160 content: `Error assigning your role, contact an admin to check my permissions.`
161 });
162 }
163 }
164});
165
166client.on('guildMemberRemove', (member) => {
167 scheduleClean(member.guild);
168});
169
170client.on('guildDelete', guild => {
171 updateClientStatus();
172});
173
174function getDefaultChannel(guild) {
175 // Check for a "general" channel, which is often default chat
176 const generalChannel = guild.channels.cache.find(channel => channel.name === "general" && channel.permissionsFor(guild.client.user).has("SEND_MESSAGES"));
177 if (generalChannel)
178 return generalChannel;
179 // Now we get into the heavy stuff: first channel in order where the bot can speak
180 // hold on to your hats!
181 return guild.channels.cache
182 .filter(c => c.type === "text" &&
183 c.permissionsFor(guild.client.user).has("SEND_MESSAGES"))
184 .sort((a, b) => a.position - b.position ||
185 Long.fromString(a.id).sub(Long.fromString(b.id)).toNumber())
186 .first();
187}
188
189client.on('guildCreate', guild => {
190 let defaultChannel = getDefaultChannel(guild);
191 defaultChannel && defaultChannel.send(`**I'm the Name Painter. I let users customize their name color.**
192Some things to note
193
194- The paint command is available to **all users** in the server.
195- You should not have existing roles that start with #
196- You *generally* should not assign the roles manually
197
198To use me, simply run
199> /paint <color>
200> Where <color> is any valid HEX or CSS color value.
201
202Created by dave caruso, <https://davecode.me>, support \`dave@davecode.me\``);
203
204 updateClientStatus();
205});
206
207client.login(process.env.TOKEN);
208
209if (process.env.HEALTHCHECKS_URL) {
210 var https = require('https');
211 setInterval(() => {
212 https.get(process.env.HEALTHCHECKS_URL).on('error', () => {});
213 }, 5 * 60 * 1000);
214}
\ No newline at end of file
index.ts created+197
......@@ -0,0 +1,197 @@
1import Color from "color";
2import * as Discord from "discord.js";
3import Long from "long";
4import NodeCache from "node-cache";
5
6import 'dotenv/config';
7
8const helpMessage = `**I'm the Name Painter. I let users customize their name color.**
9Some things to note
10
11- The paint command is available to **all users** in the server by default.
12- You should not have existing roles that start with \`#\` as this is how the bot identifies color roles.
13- Roles always are added at the bottom of the role list, meaning none of your other roles should have colors.
14
15To use me, simply run
16> /paint <color>
17> Where <color> is any valid HEX or CSS color value.
18
19Created by dave caruso, <https://paperdave.net>, support \`me@paperdave.net\``;
20
21const client = new Discord.Client({
22 intents: [
23 Discord.IntentsBitField.Flags.Guilds,
24 Discord.IntentsBitField.Flags.GuildMembers,
25 ],
26});
27
28function updateClientStatus() {
29 client.user?.setActivity(`/paint | ${client.guilds.cache.size} servers.`)
30}
31
32client.on('ready', async() => {
33 console.log(`Logged in as ${client.user?.tag}!`);
34 updateClientStatus();
35
36 // client.application.commands.create({
37 // name: 'paint',
38 // description: 'Customize your username color',
39 // options: [
40 // { name: 'color', description: 'Color to change your name to (HEX or CSS)', type: 'STRING', required: true },
41 // ]
42 // });
43});
44
45const rateLimitCache = new NodeCache({
46 stdTTL: 2,
47})
48
49async function cleanup(guild: Discord.Guild) {
50 const now = Date.now();
51 let n = 0;
52 const rolesToCheck = guild.roles.cache.filter(role => role.name.startsWith('#'));
53 const allMembers = await guild.members.fetch();
54 const colorUses: Record<string, boolean> = {};
55 allMembers.forEach(x => {
56 x.roles.cache.forEach(role => {
57 if (role.name.startsWith('#')) {
58 colorUses[role.id] = true;
59 }
60 });
61 });
62 await Promise.all(rolesToCheck.map(async (role) => {
63 if (!colorUses[role.id]) {
64 n++;
65 await role.delete();
66 }
67 }));
68 const time = Date.now() - now;
69 console.log(`[guild ${guild.id}] cleaned up ${n} roles in ${time}ms [${guild.roles.cache.size} roles left]`);
70 return n;
71}
72
73client.on('interactionCreate', async (i) => {
74 if (i.isCommand() && i.commandName === 'paint') {
75 const input = String(i.options.get('color')!.value);
76
77 let color;
78 try {
79 color = Color(input);
80 } catch (error) {
81 try {
82 color = Color('#' + input);
83 } catch (error) {
84 i.reply({
85 ephemeral: true,
86 content: `Could not get a color from \`\`${input.substring(0, 500).replace(/\n/g, ' ').replace(/`/g, '\u2063`\u2063')}\`\``,
87 })
88 return;
89 }
90 }
91
92 const hex = color.hex();
93
94 if (rateLimitCache.has(i.user.id)) {
95 i.reply({
96 ephemeral: true,
97 content: 'You have reached the rate limit. Please wait a few seconds before running the command again.',
98 });
99 return;
100 }
101
102 rateLimitCache.set(i.user.id , 'true');
103
104 let guild = i.guild ?? await client.guilds.fetch(i.guildId!);
105
106 let role = guild.roles.cache.find(role => role.name === hex);
107
108 if (!role) {
109 if (guild.roles.cache.size === 250) {
110 i.reply({
111 ephemeral: true,
112 content: `The role limit of **250 Roles** has been hit, I cannot assign you this name color.`
113 });
114 return;
115 } else {
116 try {
117 role = await guild.roles.create({
118 name: hex,
119 color: color.rgbNumber(),
120 permissions: [],
121 });
122 } catch (error) {
123 console.log(error)
124 i.reply({
125 ephemeral: true,
126 content: `Error creating a role for you, contact an admin to check my permissions.`
127 });
128 return;
129 }
130 }
131 }
132
133 try {
134 const member = i.member!;
135 const memberRoles = member.roles as Discord.GuildMemberRoleManager;
136 const rolesToRemove = memberRoles.cache.filter(role => role.name.startsWith('#') && role.name !== hex);
137 rolesToRemove.map(async (role) => {
138 memberRoles.remove(role);
139 });
140 await memberRoles.add(role);
141 i.reply({
142 ephemeral: true,
143 content: `You\'ve been painted to **${hex}**`
144 });
145 await cleanup(guild);
146 } catch (error) {
147 i.reply({
148 ephemeral: true,
149 content: `Error assigning your role, contact an admin to check my permissions.`
150 });
151 }
152 }
153});
154
155client.on('guildMemberRemove', (member) => {
156 cleanup(member.guild);
157});
158
159client.on('guildDelete', guild => {
160 updateClientStatus();
161});
162
163async function getDefaultChannel(guild: Discord.Guild) {
164 const channels = await guild.channels.fetch();
165 const array = [...channels.values()].filter(Boolean).sort((a, b) => (a as any).rawPosition - (b as any).rawPosition) as Discord.TextChannel[];
166
167 console.log(array.map(x => x.name))
168
169 // Check for a "general" channel, which is often default chat
170 const generalChannel = array.find(channel => channel.name === "general" && channel.permissionsFor(guild.client.user)?.has("SendMessages"));
171 if (generalChannel)
172 return generalChannel;
173
174 // Now we get into the heavy stuff: first channel in order where everyone (and the bot) can speak
175 // hold on to your hats!
176 const sendableChannels = array
177 .filter(c => c.type === Discord.ChannelType.GuildText && c.permissionsFor(guild.client.user)?.has("SendMessages"))
178 .filter(c => c.permissionsFor(guild.id)?.has("ViewChannel") && c.permissionsFor(guild.id)?.has("SendMessages"))
179
180 return sendableChannels[0];
181}
182
183client.on('guildCreate', async(guild) => {
184 let defaultChannel = await getDefaultChannel(guild) as Discord.TextChannel;
185 defaultChannel && defaultChannel.send(helpMessage);
186
187 updateClientStatus();
188});
189
190client.login(process.env.TOKEN);
191
192// if (process.env.HEALTHCHECKS_URL) {
193// var https = require('https');
194// setInterval(() => {
195// https.get(process.env.HEALTHCHECKS_URL).on('error', () => {});
196// }, 5 * 60 * 1000);
197// }
package.json+9-6
......@@ -1,18 +1,21 @@
11{
22 "name": "name-paint",
3 "version": "3.0.0",
3 "version": "3.1.0",
4 "private": true,
45 "description": "Discord Bot to let people paint their name anything.",
56 "main": "index.js",
67 "scripts": {
7 "start": "node index.js"
8 "start": "node index.js",
9 "build": "tsc"
810 },
9 "author": "",
10 "license": "ISC",
11 "type": "module",
12 "author": "Dave Caruso",
1113 "dependencies": {
1214 "color": "^3.1.2",
13 "discord.js": "^13.0.0-dev.4d53d0f.1626566655",
15 "discord.js": "^14.7.1",
1416 "dotenv": "^10.0.0",
1517 "long": "^4.0.0",
16 "node-cache": "^5.1.2"
18 "node-cache": "^5.1.2",
19 "typescript": "^4.9.5"
1720 }
1821}
tsconfig.json created+103
......@@ -0,0 +1,103 @@
1{
2 "compilerOptions": {
3 /* Visit https://aka.ms/tsconfig to read more about this file */
4
5 /* Projects */
6 // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
7 // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8 // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
9 // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
10 // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11 // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12
13 /* Language and Environment */
14 "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
15 // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16 // "jsx": "preserve", /* Specify what JSX code is generated. */
17 // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
18 // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
19 // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
20 // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
21 // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
22 // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
23 // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
24 // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
25 // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
26
27 /* Modules */
28 "module": "ESNext", /* Specify what module code is generated. */
29 // "rootDir": "./", /* Specify the root folder within your source files. */
30 "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
31 // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
32 // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
33 // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
34 // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
35 // "types": [], /* Specify type package names to be included without being referenced in a source file. */
36 // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
37 // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
38 // "resolveJsonModule": true, /* Enable importing .json files. */
39 // "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
40
41 /* JavaScript Support */
42 // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
43 // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
44 // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
45
46 /* Emit */
47 // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
48 // "declarationMap": true, /* Create sourcemaps for d.ts files. */
49 // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
50 // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
51 // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
52 // "outDir": "./", /* Specify an output folder for all emitted files. */
53 // "removeComments": true, /* Disable emitting comments. */
54 // "noEmit": true, /* Disable emitting files from a compilation. */
55 // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
56 // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
57 // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
58 // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
59 // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
60 // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
61 // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
62 // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
63 // "newLine": "crlf", /* Set the newline character for emitting files. */
64 // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
65 // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
66 // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
67 // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
68 // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
69 // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
70
71 /* Interop Constraints */
72 // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
73 // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
74 "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
75 // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
76 "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
77
78 /* Type Checking */
79 "strict": true, /* Enable all strict type-checking options. */
80 // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
81 // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
82 // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
83 // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
84 // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
85 // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
86 // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
87 // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
88 // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
89 // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
90 // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
91 // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
92 // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
93 // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
94 // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
95 // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
96 // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
97 // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
98
99 /* Completeness */
100 // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
101 "skipLibCheck": true /* Skip type checking all .d.ts files. */
102 }
103}
yarn.lock+200-99
......@@ -2,56 +2,83 @@
22# yarn lockfile v1
33
44
5"@discordjs/builders@^0.2.0":
6 version "0.2.0"
7 resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-0.2.0.tgz#832c8d894aad13362db7a99f11a7826b21e4cd94"
8 integrity sha512-TVq7NZBCJrrTRc3CfxOr3IdgY5nrtqVxZ7qDUF1mN6LgxIiOldmFxsSwMrQBzLFVmOwqFyNLKCeblley8UpEuw==
5"@discordjs/builders@^1.4.0":
6 version "1.4.0"
7 resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.4.0.tgz#b951b5e6ce4e459cd06174ce50dbd51c254c1d47"
8 integrity sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==
99 dependencies:
10 discord-api-types "^0.18.1"
11 tslib "^2.3.0"
10 "@discordjs/util" "^0.1.0"
11 "@sapphire/shapeshift" "^3.7.1"
12 discord-api-types "^0.37.20"
13 fast-deep-equal "^3.1.3"
14 ts-mixer "^6.0.2"
15 tslib "^2.4.1"
1216
13"@discordjs/collection@^0.1.6":
14 version "0.1.6"
15 resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.1.6.tgz#9e9a7637f4e4e0688fd8b2b5c63133c91607682c"
16 integrity sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==
17"@discordjs/collection@^1.3.0":
18 version "1.3.0"
19 resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.3.0.tgz#65bf9674db72f38c25212be562bb28fa0dba6aa3"
20 integrity sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==
1721
18"@discordjs/form-data@^3.0.1":
19 version "3.0.1"
20 resolved "https://registry.yarnpkg.com/@discordjs/form-data/-/form-data-3.0.1.tgz#5c9e6be992e2e57d0dfa0e39979a850225fb4697"
21 integrity sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==
22"@discordjs/rest@^1.4.0":
23 version "1.5.0"
24 resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-1.5.0.tgz#dc15474ab98cf6f31291bf61bbc72bcf4f30cea2"
25 integrity sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==
2226 dependencies:
23 asynckit "^0.4.0"
24 combined-stream "^1.0.8"
25 mime-types "^2.1.12"
27 "@discordjs/collection" "^1.3.0"
28 "@discordjs/util" "^0.1.0"
29 "@sapphire/async-queue" "^1.5.0"
30 "@sapphire/snowflake" "^3.2.2"
31 discord-api-types "^0.37.23"
32 file-type "^18.0.0"
33 tslib "^2.4.1"
34 undici "^5.13.0"
2635
27"@sapphire/async-queue@^1.1.4":
28 version "1.1.4"
29 resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.1.4.tgz#ae431310917a8880961cebe8e59df6ffa40f2957"
30 integrity sha512-fFrlF/uWpGOX5djw5Mu2Hnnrunao75WGey0sP0J3jnhmrJ5TAPzHYOmytD5iN/+pMxS+f+u/gezqHa9tPhRHEA==
36"@discordjs/util@^0.1.0":
37 version "0.1.0"
38 resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-0.1.0.tgz#e42ca1bf407bc6d9adf252877d1b206e32ba369a"
39 integrity sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==
40
41"@sapphire/async-queue@^1.5.0":
42 version "1.5.0"
43 resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.0.tgz#2f255a3f186635c4fb5a2381e375d3dfbc5312d8"
44 integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==
45
46"@sapphire/shapeshift@^3.7.1":
47 version "3.8.1"
48 resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz#b98dc6a7180f9b38219267917b2e6fa33f9ec656"
49 integrity sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==
50 dependencies:
51 fast-deep-equal "^3.1.3"
52 lodash "^4.17.21"
53
54"@sapphire/snowflake@^3.2.2":
55 version "3.4.0"
56 resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.4.0.tgz#25c012158a9feea2256c718985dbd6c1859a5022"
57 integrity sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==
58
59"@tokenizer/token@^0.3.0":
60 version "0.3.0"
61 resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276"
62 integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==
3163
3264"@types/node@*":
3365 version "16.3.3"
3466 resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.3.tgz#0c30adff37bbbc7a50eb9b58fae2a504d0d88038"
3567 integrity sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==
3668
37"@types/ws@^7.4.5":
38 version "7.4.6"
39 resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.6.tgz#c4320845e43d45a7129bb32905e28781c71c1fff"
40 integrity sha512-ijZ1vzRawI7QoWnTNL8KpHixd2b2XVb9I9HAqI3triPsh1EC0xH0Eg6w2O3TKbDCgiNNlJqfrof6j4T2I+l9vw==
69"@types/ws@^8.5.3":
70 version "8.5.4"
71 resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5"
72 integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==
4173 dependencies:
4274 "@types/node" "*"
4375
44abort-controller@^3.0.0:
45 version "3.0.0"
46 resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
47 integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
76busboy@^1.6.0:
77 version "1.6.0"
78 resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
79 integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
4880 dependencies:
49 event-target-shim "^5.0.0"
50
51asynckit@^0.4.0:
52 version "0.4.0"
53 resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
54 integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
81 streamsearch "^1.1.0"
5582
5683clone@2.x:
5784 version "2.1.2"
......@@ -86,75 +113,78 @@ color@^3.1.2:
86113 color-convert "^2.0.1"
87114 color-string "^1.6.0"
88115
89combined-stream@^1.0.8:
90 version "1.0.8"
91 resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
92 integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
93 dependencies:
94 delayed-stream "~1.0.0"
95
96delayed-stream@~1.0.0:
97 version "1.0.0"
98 resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
99 integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
100
101discord-api-types@^0.18.1:
102 version "0.18.1"
103 resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.18.1.tgz#5d08ed1263236be9c21a22065d0e6b51f790f492"
104 integrity sha512-hNC38R9ZF4uaujaZQtQfm5CdQO58uhdkoHQAVvMfIL0LgOSZeW575W8H6upngQOuoxWd8tiRII3LLJm9zuQKYg==
105
106discord-api-types@^0.19.0-next.f393ba520d7d6d2aacaca7b3ca5d355fab614f6e:
107 version "0.19.0-next.f393ba520d7d6d2aacaca7b3ca5d355fab614f6e"
108 resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.19.0-next.f393ba520d7d6d2aacaca7b3ca5d355fab614f6e.tgz#d5f36f5712ec8fe2fe928b5c37618c94a3969d6a"
109 integrity sha512-ttRA/8e/WKHDbGFfED5WlS7gID+kalmNr6iMiWBCvkphQ7kFHiTOVbnj/zX9ksaRaYXp/I38SCQ+qZvLu8DJZg==
110
111discord.js@^13.0.0-dev.4d53d0f.1626566655:
112 version "13.0.0-dev.4d53d0f.1626566655"
113 resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-13.0.0-dev.4d53d0f.1626566655.tgz#8680d6c08a931b1550664daeb4ac02eb2c9c9bde"
114 integrity sha512-TXq6Q16X8QVt4A81q0eaBZd+hfvThIvx76FLd8eRiB4H9Hid3BnVwzbOAucwZ3Xr+koPcaw16YVoV+XL9ZwknA==
115 dependencies:
116 "@discordjs/builders" "^0.2.0"
117 "@discordjs/collection" "^0.1.6"
118 "@discordjs/form-data" "^3.0.1"
119 "@sapphire/async-queue" "^1.1.4"
120 "@types/ws" "^7.4.5"
121 abort-controller "^3.0.0"
122 discord-api-types "^0.19.0-next.f393ba520d7d6d2aacaca7b3ca5d355fab614f6e"
123 node-fetch "^2.6.1"
124 ws "^7.5.1"
116discord-api-types@^0.37.20, discord-api-types@^0.37.23:
117 version "0.37.32"
118 resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.32.tgz#661053cfab02eb4807d26a3800c81949b5ab7607"
119 integrity sha512-oUA4dhrzFOkvIWOc9WvKhPwsezUUVd5v5M7am1uupnRZjOmpE9RJMS0fTCUqNiMRlNAaZwPEy09UZOdIR9CyGQ==
120
121discord.js@^14.7.1:
122 version "14.7.1"
123 resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.7.1.tgz#26079d0ff4d27daf02480a403c456121f0682bd9"
124 integrity sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==
125 dependencies:
126 "@discordjs/builders" "^1.4.0"
127 "@discordjs/collection" "^1.3.0"
128 "@discordjs/rest" "^1.4.0"
129 "@discordjs/util" "^0.1.0"
130 "@sapphire/snowflake" "^3.2.2"
131 "@types/ws" "^8.5.3"
132 discord-api-types "^0.37.20"
133 fast-deep-equal "^3.1.3"
134 lodash.snakecase "^4.1.1"
135 tslib "^2.4.1"
136 undici "^5.13.0"
137 ws "^8.11.0"
125138
126139dotenv@^10.0.0:
127140 version "10.0.0"
128141 resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
129142 integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
130143
131event-target-shim@^5.0.0:
132 version "5.0.1"
133 resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
134 integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
144fast-deep-equal@^3.1.3:
145 version "3.1.3"
146 resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
147 integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
148
149file-type@^18.0.0:
150 version "18.2.0"
151 resolved "https://registry.yarnpkg.com/file-type/-/file-type-18.2.0.tgz#c2abec00d1af0f09151e1549e3588aab0bac5001"
152 integrity sha512-M3RQMWY3F2ykyWZ+IHwNCjpnUmukYhtdkGGC1ZVEUb0ve5REGF7NNJ4Q9ehCUabtQKtSVFOMbFTXgJlFb0DQIg==
153 dependencies:
154 readable-web-to-node-stream "^3.0.2"
155 strtok3 "^7.0.0"
156 token-types "^5.0.1"
157
158ieee754@^1.2.1:
159 version "1.2.1"
160 resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
161 integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
162
163inherits@^2.0.3:
164 version "2.0.4"
165 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
166 integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
135167
136168is-arrayish@^0.3.1:
137169 version "0.3.2"
138170 resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
139171 integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
140172
173lodash.snakecase@^4.1.1:
174 version "4.1.1"
175 resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d"
176 integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==
177
178lodash@^4.17.21:
179 version "4.17.21"
180 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
181 integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
182
141183long@^4.0.0:
142184 version "4.0.0"
143185 resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
144186 integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
145187
146mime-db@1.48.0:
147 version "1.48.0"
148 resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d"
149 integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==
150
151mime-types@^2.1.12:
152 version "2.1.31"
153 resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b"
154 integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==
155 dependencies:
156 mime-db "1.48.0"
157
158188node-cache@^5.1.2:
159189 version "5.1.2"
160190 resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-5.1.2.tgz#f264dc2ccad0a780e76253a694e9fd0ed19c398d"
......@@ -162,10 +192,31 @@ node-cache@^5.1.2:
162192 dependencies:
163193 clone "2.x"
164194
165node-fetch@^2.6.1:
166 version "2.6.1"
167 resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
168 integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
195peek-readable@^5.0.0:
196 version "5.0.0"
197 resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.0.0.tgz#7ead2aff25dc40458c60347ea76cfdfd63efdfec"
198 integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==
199
200readable-stream@^3.6.0:
201 version "3.6.0"
202 resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
203 integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
204 dependencies:
205 inherits "^2.0.3"
206 string_decoder "^1.1.1"
207 util-deprecate "^1.0.1"
208
209readable-web-to-node-stream@^3.0.2:
210 version "3.0.2"
211 resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb"
212 integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==
213 dependencies:
214 readable-stream "^3.6.0"
215
216safe-buffer@~5.2.0:
217 version "5.2.1"
218 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
219 integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
169220
170221simple-swizzle@^0.2.2:
171222 version "0.2.2"
......@@ -174,12 +225,62 @@ simple-swizzle@^0.2.2:
174225 dependencies:
175226 is-arrayish "^0.3.1"
176227
177tslib@^2.3.0:
178 version "2.3.0"
179 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
180 integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
228streamsearch@^1.1.0:
229 version "1.1.0"
230 resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
231 integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
232
233string_decoder@^1.1.1:
234 version "1.3.0"
235 resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
236 integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
237 dependencies:
238 safe-buffer "~5.2.0"
239
240strtok3@^7.0.0:
241 version "7.0.0"
242 resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-7.0.0.tgz#868c428b4ade64a8fd8fee7364256001c1a4cbe5"
243 integrity sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==
244 dependencies:
245 "@tokenizer/token" "^0.3.0"
246 peek-readable "^5.0.0"
247
248token-types@^5.0.1:
249 version "5.0.1"
250 resolved "https://registry.yarnpkg.com/token-types/-/token-types-5.0.1.tgz#aa9d9e6b23c420a675e55413b180635b86a093b4"
251 integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==
252 dependencies:
253 "@tokenizer/token" "^0.3.0"
254 ieee754 "^1.2.1"
255
256ts-mixer@^6.0.2:
257 version "6.0.3"
258 resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6"
259 integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==
260
261tslib@^2.4.1:
262 version "2.5.0"
263 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
264 integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
265
266typescript@^4.9.5:
267 version "4.9.5"
268 resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
269 integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
270
271undici@^5.13.0:
272 version "5.18.0"
273 resolved "https://registry.yarnpkg.com/undici/-/undici-5.18.0.tgz#e88a77a74d991a30701e9a6751e4193a26fabda9"
274 integrity sha512-1iVwbhonhFytNdg0P4PqyIAXbdlVZVebtPDvuM36m66mRw4OGrCm2MYynJv/UENFLdP13J1nPVQzVE2zTs1OeA==
275 dependencies:
276 busboy "^1.6.0"
277
278util-deprecate@^1.0.1:
279 version "1.0.2"
280 resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
281 integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
181282
182ws@^7.5.1:
183 version "7.5.3"
184 resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74"
185 integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==
283ws@^8.11.0:
284 version "8.12.0"
285 resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8"
286 integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==