update to discordjs 14

This commit is contained in:
Evert Prants 2024-03-16 14:34:03 +02:00
parent d17c9244e7
commit d931e0117e
Signed by: evert
GPG Key ID: 1688DA83D222D0B5
5 changed files with 502 additions and 390 deletions

View File

@ -2,8 +2,8 @@
"main": "plugin.js", "main": "plugin.js",
"name": "discord", "name": "discord",
"description": "Discord Service for Squeebot 3", "description": "Discord Service for Squeebot 3",
"version": "1.3.0", "version": "1.4.0",
"tags": ["service", "discord"], "tags": ["service", "discord"],
"dependencies": ["control?"], "dependencies": ["control?"],
"npmDependencies": ["discord.js@^13.1.0"] "npmDependencies": ["discord.js@^14.14.1"]
} }

View File

@ -2,15 +2,27 @@ import {
Plugin, Plugin,
Configurable, Configurable,
EventListener, EventListener,
InjectService InjectService,
} from '@squeebot/core/lib/plugin'; } from '@squeebot/core/lib/plugin';
import util from 'util'; import util from 'util';
import Discord, { ClientUser, Intents, Permissions, TextChannel, User } from 'discord.js'; import Discord, {
ClientUser,
GatewayIntentBits,
Message,
Partials,
PermissionsBitField,
TextChannel,
User,
} from 'discord.js';
import { logger } from '@squeebot/core/lib/core'; import { logger } from '@squeebot/core/lib/core';
import { thousandsSeparator, timeSince, toHHMMSS } from '@squeebot/core/lib/common'; import {
thousandsSeparator,
timeSince,
toHHMMSS,
} from '@squeebot/core/lib/common';
import { import {
EMessageType, EMessageType,
Formatter, Formatter,
@ -18,12 +30,12 @@ import {
IMessageTarget, IMessageTarget,
MarkdownFormatter, MarkdownFormatter,
Protocol, Protocol,
ProtocolFeatureFlag ProtocolFeatureFlag,
} from '@squeebot/core/lib/types'; } from '@squeebot/core/lib/types';
class DiscordFormatter extends MarkdownFormatter { class DiscordFormatter extends MarkdownFormatter {
public compose(objs: any): any { public compose(objs: any): any {
const embed = new Discord.MessageEmbed(); const embed = new Discord.EmbedBuilder();
for (const i in objs) { for (const i in objs) {
const elem = objs[i]; const elem = objs[i];
@ -55,9 +67,10 @@ class DiscordFormatter extends MarkdownFormatter {
} }
if (elemParams?.type === 'description') { if (elemParams?.type === 'description') {
embed.setDescription(embed.description embed.setDescription(
? embed.description += `\n${elemValue}` embed.data.description
: elemValue ? (embed.data.description += `\n${elemValue}`)
: elemValue
); );
continue; continue;
} }
@ -80,11 +93,12 @@ class DiscordFormatter extends MarkdownFormatter {
label = elemParams.label[elemParams.label.length - 1]; label = elemParams.label[elemParams.label.length - 1];
} }
embed.addField(label, elemValue, true); embed.addFields([{ name: label, value: elemValue, inline: true }]);
} else { } else {
embed.setDescription(embed.description embed.setDescription(
? embed.description += `\n${elemValue}` embed.data.description
: elemValue ? (embed.data.description += `\n${elemValue}`)
: elemValue
); );
} }
} }
@ -98,13 +112,15 @@ class DiscordMessageAdapter implements IMessage {
public time: Date = new Date(); public time: Date = new Date();
public resolved = false; public resolved = false;
public direct = false; public direct = false;
public isReply = false;
constructor( constructor(
public type: EMessageType, public type: EMessageType,
public data: any, public data: any,
public source: Protocol, public source: Protocol,
public sender: IMessageTarget, public sender: IMessageTarget,
public target?: IMessageTarget) {} public target?: IMessageTarget
) {}
public get fullSenderID(): string { public get fullSenderID(): string {
return this.source.fullName + '/' + this.sender.id; return this.source.fullName + '/' + this.sender.id;
@ -116,7 +132,9 @@ class DiscordMessageAdapter implements IMessage {
} }
if (this.target.server) { if (this.target.server) {
return this.source.fullName + '/s:' + this.target.server + '/' + this.target.id; return (
this.source.fullName + '/s:' + this.target.server + '/' + this.target.id
);
} }
return this.source.fullName + '/' + this.target.id; return this.source.fullName + '/' + this.target.id;
@ -131,6 +149,12 @@ class DiscordMessageAdapter implements IMessage {
this.source.resolve(this, ...args); this.source.resolve(this, ...args);
} }
public reply(...args: any[]): void {
this.resolved = true;
this.isReply = true;
this.source.resolve(this, ...args);
}
public reject(error: Error): void { public reject(error: Error): void {
this.resolved = true; this.resolved = true;
this.source.resolve(this, error.message); this.source.resolve(this, error.message);
@ -154,6 +178,7 @@ class DiscordProtocol extends Protocol {
ProtocolFeatureFlag.VIDEO, ProtocolFeatureFlag.VIDEO,
ProtocolFeatureFlag.THREADS, ProtocolFeatureFlag.THREADS,
ProtocolFeatureFlag.REACTIONS, ProtocolFeatureFlag.REACTIONS,
ProtocolFeatureFlag.REPLY,
ProtocolFeatureFlag.MENTION, ProtocolFeatureFlag.MENTION,
ProtocolFeatureFlag.MULTISERVER, ProtocolFeatureFlag.MULTISERVER,
ProtocolFeatureFlag.EVENT_MESSAGE, ProtocolFeatureFlag.EVENT_MESSAGE,
@ -169,17 +194,27 @@ class DiscordProtocol extends Protocol {
private client = new Discord.Client({ private client = new Discord.Client({
intents: [ intents: [
Intents.FLAGS.GUILDS, GatewayIntentBits.MessageContent,
Intents.FLAGS.GUILD_MESSAGES, GatewayIntentBits.Guilds,
Intents.FLAGS.GUILD_MESSAGE_REACTIONS, GatewayIntentBits.GuildMessages,
Intents.FLAGS.GUILD_PRESENCES, GatewayIntentBits.GuildMessageReactions,
Intents.FLAGS.GUILD_VOICE_STATES, GatewayIntentBits.GuildPresences,
Intents.FLAGS.GUILD_BANS, GatewayIntentBits.GuildVoiceStates,
Intents.FLAGS.DIRECT_MESSAGES, GatewayIntentBits.GuildMembers,
Intents.FLAGS.DIRECT_MESSAGE_REACTIONS, GatewayIntentBits.GuildScheduledEvents,
Intents.FLAGS.DIRECT_MESSAGE_TYPING, GatewayIntentBits.GuildModeration,
GatewayIntentBits.DirectMessages,
GatewayIntentBits.DirectMessageReactions,
GatewayIntentBits.DirectMessageTyping,
],
partials: [
Partials.Channel,
Partials.GuildMember,
Partials.Message,
Partials.User,
Partials.Reaction,
Partials.GuildScheduledEvent,
], ],
partials: ['CHANNEL', 'GUILD_MEMBER', 'MESSAGE', 'USER'],
}); });
private eventsAttached = false; private eventsAttached = false;
@ -200,12 +235,13 @@ class DiscordProtocol extends Protocol {
}); });
this.client.on('disconnect', () => this.stop(true)); this.client.on('disconnect', () => this.stop(true));
this.client.login(this.config.token) this.client.login(this.config.token).then(
.then(() => this.emit('running'), () => this.emit('running'),
(reason) => { (reason) => {
this.emit('error', reason); this.emit('error', reason);
this.stop(true); this.stop(true);
}); }
);
} }
public stop(force = false): void { public stop(force = false): void {
@ -242,12 +278,24 @@ class DiscordProtocol extends Protocol {
if (this.me && this.me.id && message.author.id === this.me.id) { if (this.me && this.me.id && message.author.id === this.me.id) {
return; return;
} }
const chanName = 'name' in message.channel ? message.channel.name : message.author.username;
const msg = new DiscordMessageAdapter(EMessageType.message, const chanName =
'name' in message.channel
? message.channel.name
: message.author.username;
const msg = new DiscordMessageAdapter(
EMessageType.message,
message, message,
this, this,
{ name: message.author.username, id: message.author.id }, { name: message.author.username, id: message.author.id },
{ name: chanName, id: message.channel.id, server: message.guildId || undefined }); {
name: chanName,
id: message.channel.id,
server: message.guildId || undefined,
}
);
this.plugin.stream.emitTo('channel', 'message', msg); this.plugin.stream.emitTo('channel', 'message', msg);
}); });
@ -255,12 +303,15 @@ class DiscordProtocol extends Protocol {
if (this.me && this.me.id && member.user.id === this.me.id) { if (this.me && this.me.id && member.user.id === this.me.id) {
return; return;
} }
const newMessage = new DiscordMessageAdapter( const newMessage = new DiscordMessageAdapter(
EMessageType.roomJoin, EMessageType.roomJoin,
member, member,
this, this,
{ id: member.user.id, name: member.user.username }, { id: member.user.id, name: member.user.username },
{ server: member.guild.id, id: '*', name: '*'}); { server: member.guild.id, id: '*', name: '*' }
);
this.plugin.stream.emitTo('channel', 'event', newMessage); this.plugin.stream.emitTo('channel', 'event', newMessage);
}); });
@ -268,35 +319,52 @@ class DiscordProtocol extends Protocol {
if (!member.user) { if (!member.user) {
return; return;
} }
if (this.me && this.me.id && member.user.id === this.me.id) { if (this.me && this.me.id && member.user.id === this.me.id) {
return; return;
} }
const newMessage = new DiscordMessageAdapter( const newMessage = new DiscordMessageAdapter(
EMessageType.roomLeave, EMessageType.roomLeave,
member, member,
this, this,
{ id: member.user.id, name: member.user.username }, { id: member.user.id, name: member.user.username },
{ server: member.guild.id, id: '*', name: '*'}); { server: member.guild.id, id: '*', name: '*' }
);
this.plugin.stream.emitTo('channel', 'event', newMessage); this.plugin.stream.emitTo('channel', 'event', newMessage);
}); });
} }
public resolve(msg: DiscordMessageAdapter, ...data: any[]): void { public resolve(msg: DiscordMessageAdapter, ...data: any[]): void {
const toDiscord = this.fromSend(...data); const toDiscord = this.fromSend(...data);
const msgData = msg.data as Message;
if (!toDiscord) { if (!toDiscord) {
return; return;
} }
// Check send permission // Check send permission
if (msg.data.guildId) { if (msgData.guildId) {
const perms = msg.data.channel.permissionsFor(this.client.user as ClientUser); const perms = (msgData.channel as TextChannel).permissionsFor(
if (perms && !perms.has(Permissions.FLAGS.SEND_MESSAGES, true)) { this.client.user as ClientUser
);
if (perms && !perms.has(PermissionsBitField.Flags.SendMessages, true)) {
return; return;
} }
} }
msg.data.channel.send(toDiscord).catch((e: Error) => { // Send a reply
if (msg.isReply) {
msgData.reply(toDiscord).catch((e: Error) => {
logger.error(e);
});
return;
}
msgData.channel.send(toDiscord).catch((e: Error) => {
logger.error(e); logger.error(e);
}); });
} }
@ -325,20 +393,24 @@ class DiscordProtocol extends Protocol {
// Fetch the channel and ensure we can send to it // Fetch the channel and ensure we can send to it
const channelId = rxSplit[3]; const channelId = rxSplit[3];
channel = await guild.channels.fetch(channelId) as TextChannel; channel = (await guild.channels.fetch(channelId)) as TextChannel;
if (!channel || !(channel.isText || channel.isThread) || !channel.viewable) { if (
!channel ||
!(channel.isThread() || channel.isTextBased()) ||
!channel.viewable
) {
return false; return false;
} }
// Check send permission // Check send permission
const perms = channel.permissionsFor(this.client.user as ClientUser); const perms = channel.permissionsFor(this.client.user as ClientUser);
if (perms) { if (perms) {
if (!perms.has(Permissions.FLAGS.SEND_MESSAGES, true)) { if (!perms.has(PermissionsBitField.Flags.SendMessages, true)) {
return false; return false;
} }
} }
// Message to user // Message to user
} else if (rxSplit.length === 3) { } else if (rxSplit.length === 3) {
const userId = rxSplit[2]; const userId = rxSplit[2];
channel = await this.client.users.fetch(userId); channel = await this.client.users.fetch(userId);
@ -353,7 +425,9 @@ class DiscordProtocol extends Protocol {
return true; return true;
} }
private fromSend(...data: any[]): { embeds?: object[]; content?: string } | null { private fromSend(
...data: any[]
): { embeds?: object[]; content?: string } | null {
let response = util.format(data[0], ...data.slice(1)); let response = util.format(data[0], ...data.slice(1));
if (!response) { if (!response) {
return null; return null;
@ -363,7 +437,11 @@ class DiscordProtocol extends Protocol {
try { try {
response = this.format.compose(data[0]); response = this.format.compose(data[0]);
} catch (e: any) { } catch (e: any) {
logger.error('[%s] Failed to compose message:', this.fullName, e.message); logger.error(
'[%s] Failed to compose message:',
this.fullName,
e.message
);
return null; return null;
} }
} }
@ -374,7 +452,7 @@ class DiscordProtocol extends Protocol {
const toDiscord: { embeds?: object[]; content?: string } = {}; const toDiscord: { embeds?: object[]; content?: string } = {};
if (typeof response === 'object') { if (typeof response === 'object') {
toDiscord.embeds = [ response ]; toDiscord.embeds = [response];
} else { } else {
toDiscord.content = response; toDiscord.content = response;
} }
@ -384,7 +462,7 @@ class DiscordProtocol extends Protocol {
} }
@InjectService(DiscordProtocol) @InjectService(DiscordProtocol)
@Configurable({instances: []}) @Configurable({ instances: [] })
class DiscordServicePlugin extends Plugin { class DiscordServicePlugin extends Plugin {
initialize(): void { initialize(): void {
const protoList = this.validateConfiguration(); const protoList = this.validateConfiguration();
@ -430,8 +508,7 @@ class DiscordServicePlugin extends Plugin {
@EventListener('pluginUnload') @EventListener('pluginUnload')
public unloadEventHandler(plugin: string | Plugin): void { public unloadEventHandler(plugin: string | Plugin): void {
if (plugin === this.name || plugin === this) { if (plugin === this.name || plugin === this) {
this.service?.stopAll().then(() => this.service?.stopAll().then(() => this.emit('pluginUnloaded', this));
this.emit('pluginUnloaded', this));
} }
} }
} }

711
package-lock.json generated
View File

@ -9,9 +9,9 @@
"version": "1.0.0", "version": "1.0.0",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@squeebot/core": "^3.6.0-1", "@squeebot/core": "^3.6.3",
"discord.js": "^13.1.0", "discord.js": "^14.14.1",
"typescript": "^4.4.2" "typescript": "^5.4.2"
} }
}, },
"../core": { "../core": {
@ -36,66 +36,145 @@
} }
}, },
"node_modules/@discordjs/builders": { "node_modules/@discordjs/builders": {
"version": "0.5.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.5.0.tgz", "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.7.0.tgz",
"integrity": "sha512-HP5y4Rqw68o61Qv4qM5tVmDbWi4mdTFftqIOGRo33SNPpLJ1Ga3KEIR2ibKofkmsoQhEpLmopD1AZDs3cKpHuw==", "integrity": "sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw==",
"dependencies": { "dependencies": {
"@sindresorhus/is": "^4.0.1", "@discordjs/formatters": "^0.3.3",
"discord-api-types": "^0.22.0", "@discordjs/util": "^1.0.2",
"ow": "^0.27.0", "@sapphire/shapeshift": "^3.9.3",
"ts-mixer": "^6.0.0", "discord-api-types": "0.37.61",
"tslib": "^2.3.0" "fast-deep-equal": "^3.1.3",
"ts-mixer": "^6.0.3",
"tslib": "^2.6.2"
}, },
"engines": { "engines": {
"node": ">=14.0.0", "node": ">=16.11.0"
"npm": ">=7.0.0"
} }
}, },
"node_modules/@discordjs/collection": { "node_modules/@discordjs/collection": {
"version": "0.2.1", "version": "1.5.3",
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz",
"integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==", "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==",
"engines": { "engines": {
"node": ">=14.0.0" "node": ">=16.11.0"
} }
}, },
"node_modules/@discordjs/form-data": { "node_modules/@discordjs/formatters": {
"version": "3.0.1", "version": "0.3.3",
"resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz",
"integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", "integrity": "sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==",
"dependencies": { "dependencies": {
"asynckit": "^0.4.0", "discord-api-types": "0.37.61"
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}, },
"engines": { "engines": {
"node": ">= 6" "node": ">=16.11.0"
}
},
"node_modules/@discordjs/rest": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz",
"integrity": "sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==",
"dependencies": {
"@discordjs/collection": "^2.0.0",
"@discordjs/util": "^1.0.2",
"@sapphire/async-queue": "^1.5.0",
"@sapphire/snowflake": "^3.5.1",
"@vladfrangu/async_event_emitter": "^2.2.2",
"discord-api-types": "0.37.61",
"magic-bytes.js": "^1.5.0",
"tslib": "^2.6.2",
"undici": "5.27.2"
},
"engines": {
"node": ">=16.11.0"
}
},
"node_modules/@discordjs/rest/node_modules/@discordjs/collection": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz",
"integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==",
"engines": {
"node": ">=18"
}
},
"node_modules/@discordjs/util": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.2.tgz",
"integrity": "sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==",
"engines": {
"node": ">=16.11.0"
}
},
"node_modules/@discordjs/ws": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.2.tgz",
"integrity": "sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==",
"dependencies": {
"@discordjs/collection": "^2.0.0",
"@discordjs/rest": "^2.1.0",
"@discordjs/util": "^1.0.2",
"@sapphire/async-queue": "^1.5.0",
"@types/ws": "^8.5.9",
"@vladfrangu/async_event_emitter": "^2.2.2",
"discord-api-types": "0.37.61",
"tslib": "^2.6.2",
"ws": "^8.14.2"
},
"engines": {
"node": ">=16.11.0"
}
},
"node_modules/@discordjs/ws/node_modules/@discordjs/collection": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz",
"integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==",
"engines": {
"node": ">=18"
}
},
"node_modules/@fastify/busboy": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
"integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
"engines": {
"node": ">=14"
} }
}, },
"node_modules/@sapphire/async-queue": { "node_modules/@sapphire/async-queue": {
"version": "1.1.4", "version": "1.5.2",
"resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.4.tgz", "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.2.tgz",
"integrity": "sha512-fFrlF/uWpGOX5djw5Mu2Hnnrunao75WGey0sP0J3jnhmrJ5TAPzHYOmytD5iN/+pMxS+f+u/gezqHa9tPhRHEA==", "integrity": "sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg==",
"engines": { "engines": {
"node": ">=14", "node": ">=v14.0.0",
"npm": ">=6" "npm": ">=7.0.0"
} }
}, },
"node_modules/@sindresorhus/is": { "node_modules/@sapphire/shapeshift": {
"version": "4.0.1", "version": "3.9.6",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.6.tgz",
"integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==", "integrity": "sha512-4+Na/fxu2SEepZRb9z0dbsVh59QtwPuBg/UVaDib3av7ZY14b14+z09z6QVn0P6Dv6eOU2NDTsjIi0mbtgP56g==",
"engines": { "dependencies": {
"node": ">=10" "fast-deep-equal": "^3.1.3",
"lodash": "^4.17.21"
}, },
"funding": { "engines": {
"url": "https://github.com/sindresorhus/is?sponsor=1" "node": ">=v18"
}
},
"node_modules/@sapphire/snowflake": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz",
"integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==",
"engines": {
"node": ">=v14.0.0",
"npm": ">=7.0.0"
} }
}, },
"node_modules/@squeebot/core": { "node_modules/@squeebot/core": {
"version": "3.6.0-1", "version": "3.6.3",
"resolved": "https://registry.npmjs.org/@squeebot/core/-/core-3.6.0-1.tgz", "resolved": "https://registry.npmjs.org/@squeebot/core/-/core-3.6.3.tgz",
"integrity": "sha512-Q9My45N9Z4irJc5/SvZJoSogLHKkqmqQkP6XdOEKerFAsPW/+x0gUNb45R0P7YpDjYe84nedtSuqlHxYzVnlhA==", "integrity": "sha512-lZArEZUiY2iN9poSxrXsowdIKGf9PzBjqNMgtQxf63UJ9es1A52DDlhpv7qzCVsSJ4wV0aZrY+crk4yTsqISXA==",
"dependencies": { "dependencies": {
"fs-extra": "^11.1.1", "fs-extra": "^11.1.1",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
@ -104,29 +183,28 @@
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "16.7.10", "version": "20.11.28",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz",
"integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==" "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==",
"dependencies": {
"undici-types": "~5.26.4"
}
}, },
"node_modules/@types/ws": { "node_modules/@types/ws": {
"version": "7.4.7", "version": "8.5.9",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz",
"integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==",
"dependencies": { "dependencies": {
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/asynckit": { "node_modules/@vladfrangu/async_event_emitter": {
"version": "0.4.0", "version": "2.2.4",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" "integrity": "sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==",
},
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"engines": { "engines": {
"node": ">=6" "node": ">=v14.0.0",
"npm": ">=7.0.0"
} }
}, },
"node_modules/chownr": { "node_modules/chownr": {
@ -137,65 +215,39 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/discord-api-types": { "node_modules/discord-api-types": {
"version": "0.22.0", "version": "0.37.61",
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz",
"integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==", "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw=="
"engines": {
"node": ">=12"
}
}, },
"node_modules/discord.js": { "node_modules/discord.js": {
"version": "13.1.0", "version": "14.14.1",
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.1.0.tgz", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz",
"integrity": "sha512-gxO4CXKdHpqA+WKG+f5RNnd3srTDj5uFJHgOathksDE90YNq/Qijkd2WlMgTTMS6AJoEnHxI7G9eDQHCuZ+xDA==", "integrity": "sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w==",
"dependencies": { "dependencies": {
"@discordjs/builders": "^0.5.0", "@discordjs/builders": "^1.7.0",
"@discordjs/collection": "^0.2.1", "@discordjs/collection": "1.5.3",
"@discordjs/form-data": "^3.0.1", "@discordjs/formatters": "^0.3.3",
"@sapphire/async-queue": "^1.1.4", "@discordjs/rest": "^2.1.0",
"@types/ws": "^7.4.7", "@discordjs/util": "^1.0.2",
"discord-api-types": "^0.22.0", "@discordjs/ws": "^1.0.2",
"node-fetch": "^2.6.1", "@sapphire/snowflake": "3.5.1",
"ws": "^7.5.1" "@types/ws": "8.5.9",
"discord-api-types": "0.37.61",
"fast-deep-equal": "3.1.3",
"lodash.snakecase": "4.1.1",
"tslib": "2.6.2",
"undici": "5.27.2",
"ws": "8.14.2"
}, },
"engines": { "engines": {
"node": ">=16.6.0", "node": ">=16.11.0"
"npm": ">=7.0.0"
} }
}, },
"node_modules/dot-prop": { "node_modules/fast-deep-equal": {
"version": "6.0.1", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
"dependencies": {
"is-obj": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
}, },
"node_modules/fs-extra": { "node_modules/fs-extra": {
"version": "11.1.1", "version": "11.1.1",
@ -237,14 +289,6 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
}, },
"node_modules/is-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
"engines": {
"node": ">=8"
}
},
"node_modules/jsonfile": { "node_modules/jsonfile": {
"version": "6.1.0", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@ -256,10 +300,15 @@
"graceful-fs": "^4.1.6" "graceful-fs": "^4.1.6"
} }
}, },
"node_modules/lodash.isequal": { "node_modules/lodash": {
"version": "4.5.0", "version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/lodash.snakecase": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
"integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="
}, },
"node_modules/lru-cache": { "node_modules/lru-cache": {
"version": "6.0.0", "version": "6.0.0",
@ -272,24 +321,10 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/mime-db": { "node_modules/magic-bytes.js": {
"version": "1.44.0", "version": "1.10.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz",
"integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ=="
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.27",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
"integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
"dependencies": {
"mime-db": "1.44.0"
},
"engines": {
"node": ">= 0.6"
}
}, },
"node_modules/minipass": { "node_modules/minipass": {
"version": "5.0.0", "version": "5.0.0",
@ -333,33 +368,6 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
"engines": {
"node": "4.x || >=6.0.0"
}
},
"node_modules/ow": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz",
"integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==",
"dependencies": {
"@sindresorhus/is": "^4.0.1",
"callsites": "^3.1.0",
"dot-prop": "^6.0.1",
"lodash.isequal": "^4.5.0",
"type-fest": "^1.2.1",
"vali-date": "^1.0.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/reflect-metadata": { "node_modules/reflect-metadata": {
"version": "0.1.13", "version": "0.1.13",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
@ -396,38 +404,43 @@
} }
}, },
"node_modules/ts-mixer": { "node_modules/ts-mixer": {
"version": "6.0.0", "version": "6.0.4",
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz",
"integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA=="
}, },
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.3.1", "version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
"node_modules/type-fest": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "4.4.2", "version": "5.4.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz",
"integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==",
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
}, },
"engines": { "engines": {
"node": ">=4.2.0" "node": ">=14.17"
} }
}, },
"node_modules/undici": {
"version": "5.27.2",
"resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz",
"integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==",
"dependencies": {
"@fastify/busboy": "^2.0.0"
},
"engines": {
"node": ">=14.0"
}
},
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
},
"node_modules/universalify": { "node_modules/universalify": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
@ -436,24 +449,16 @@
"node": ">= 10.0.0" "node": ">= 10.0.0"
} }
}, },
"node_modules/vali-date": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
"integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ws": { "node_modules/ws": {
"version": "7.5.4", "version": "8.14.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.4.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
"integrity": "sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg==", "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
"engines": { "engines": {
"node": ">=8.3.0" "node": ">=10.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"bufferutil": "^4.0.1", "bufferutil": "^4.0.1",
"utf-8-validate": "^5.0.2" "utf-8-validate": ">=5.0.2"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"bufferutil": { "bufferutil": {
@ -472,46 +477,111 @@
}, },
"dependencies": { "dependencies": {
"@discordjs/builders": { "@discordjs/builders": {
"version": "0.5.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.5.0.tgz", "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.7.0.tgz",
"integrity": "sha512-HP5y4Rqw68o61Qv4qM5tVmDbWi4mdTFftqIOGRo33SNPpLJ1Ga3KEIR2ibKofkmsoQhEpLmopD1AZDs3cKpHuw==", "integrity": "sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw==",
"requires": { "requires": {
"@sindresorhus/is": "^4.0.1", "@discordjs/formatters": "^0.3.3",
"discord-api-types": "^0.22.0", "@discordjs/util": "^1.0.2",
"ow": "^0.27.0", "@sapphire/shapeshift": "^3.9.3",
"ts-mixer": "^6.0.0", "discord-api-types": "0.37.61",
"tslib": "^2.3.0" "fast-deep-equal": "^3.1.3",
"ts-mixer": "^6.0.3",
"tslib": "^2.6.2"
} }
}, },
"@discordjs/collection": { "@discordjs/collection": {
"version": "0.2.1", "version": "1.5.3",
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz",
"integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==" "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ=="
}, },
"@discordjs/form-data": { "@discordjs/formatters": {
"version": "3.0.1", "version": "0.3.3",
"resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz",
"integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", "integrity": "sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==",
"requires": { "requires": {
"asynckit": "^0.4.0", "discord-api-types": "0.37.61"
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
} }
}, },
"@sapphire/async-queue": { "@discordjs/rest": {
"version": "1.1.4", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.4.tgz", "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz",
"integrity": "sha512-fFrlF/uWpGOX5djw5Mu2Hnnrunao75WGey0sP0J3jnhmrJ5TAPzHYOmytD5iN/+pMxS+f+u/gezqHa9tPhRHEA==" "integrity": "sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==",
"requires": {
"@discordjs/collection": "^2.0.0",
"@discordjs/util": "^1.0.2",
"@sapphire/async-queue": "^1.5.0",
"@sapphire/snowflake": "^3.5.1",
"@vladfrangu/async_event_emitter": "^2.2.2",
"discord-api-types": "0.37.61",
"magic-bytes.js": "^1.5.0",
"tslib": "^2.6.2",
"undici": "5.27.2"
},
"dependencies": {
"@discordjs/collection": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz",
"integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w=="
}
}
}, },
"@sindresorhus/is": { "@discordjs/util": {
"version": "4.0.1", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.2.tgz",
"integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==" "integrity": "sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw=="
},
"@discordjs/ws": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.2.tgz",
"integrity": "sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==",
"requires": {
"@discordjs/collection": "^2.0.0",
"@discordjs/rest": "^2.1.0",
"@discordjs/util": "^1.0.2",
"@sapphire/async-queue": "^1.5.0",
"@types/ws": "^8.5.9",
"@vladfrangu/async_event_emitter": "^2.2.2",
"discord-api-types": "0.37.61",
"tslib": "^2.6.2",
"ws": "^8.14.2"
},
"dependencies": {
"@discordjs/collection": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz",
"integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w=="
}
}
},
"@fastify/busboy": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
"integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="
},
"@sapphire/async-queue": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.2.tgz",
"integrity": "sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg=="
},
"@sapphire/shapeshift": {
"version": "3.9.6",
"resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.6.tgz",
"integrity": "sha512-4+Na/fxu2SEepZRb9z0dbsVh59QtwPuBg/UVaDib3av7ZY14b14+z09z6QVn0P6Dv6eOU2NDTsjIi0mbtgP56g==",
"requires": {
"fast-deep-equal": "^3.1.3",
"lodash": "^4.17.21"
}
},
"@sapphire/snowflake": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz",
"integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA=="
}, },
"@squeebot/core": { "@squeebot/core": {
"version": "3.6.0-1", "version": "3.6.3",
"resolved": "https://registry.npmjs.org/@squeebot/core/-/core-3.6.0-1.tgz", "resolved": "https://registry.npmjs.org/@squeebot/core/-/core-3.6.3.tgz",
"integrity": "sha512-Q9My45N9Z4irJc5/SvZJoSogLHKkqmqQkP6XdOEKerFAsPW/+x0gUNb45R0P7YpDjYe84nedtSuqlHxYzVnlhA==", "integrity": "sha512-lZArEZUiY2iN9poSxrXsowdIKGf9PzBjqNMgtQxf63UJ9es1A52DDlhpv7qzCVsSJ4wV0aZrY+crk4yTsqISXA==",
"requires": { "requires": {
"fs-extra": "^11.1.1", "fs-extra": "^11.1.1",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
@ -520,73 +590,61 @@
} }
}, },
"@types/node": { "@types/node": {
"version": "16.7.10", "version": "20.11.28",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz",
"integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==" "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==",
"requires": {
"undici-types": "~5.26.4"
}
}, },
"@types/ws": { "@types/ws": {
"version": "7.4.7", "version": "8.5.9",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz",
"integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==",
"requires": { "requires": {
"@types/node": "*" "@types/node": "*"
} }
}, },
"asynckit": { "@vladfrangu/async_event_emitter": {
"version": "0.4.0", "version": "2.2.4",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" "integrity": "sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug=="
},
"callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
}, },
"chownr": { "chownr": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
}, },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"discord-api-types": { "discord-api-types": {
"version": "0.22.0", "version": "0.37.61",
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz",
"integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw=="
}, },
"discord.js": { "discord.js": {
"version": "13.1.0", "version": "14.14.1",
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.1.0.tgz", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz",
"integrity": "sha512-gxO4CXKdHpqA+WKG+f5RNnd3srTDj5uFJHgOathksDE90YNq/Qijkd2WlMgTTMS6AJoEnHxI7G9eDQHCuZ+xDA==", "integrity": "sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w==",
"requires": { "requires": {
"@discordjs/builders": "^0.5.0", "@discordjs/builders": "^1.7.0",
"@discordjs/collection": "^0.2.1", "@discordjs/collection": "1.5.3",
"@discordjs/form-data": "^3.0.1", "@discordjs/formatters": "^0.3.3",
"@sapphire/async-queue": "^1.1.4", "@discordjs/rest": "^2.1.0",
"@types/ws": "^7.4.7", "@discordjs/util": "^1.0.2",
"discord-api-types": "^0.22.0", "@discordjs/ws": "^1.0.2",
"node-fetch": "^2.6.1", "@sapphire/snowflake": "3.5.1",
"ws": "^7.5.1" "@types/ws": "8.5.9",
"discord-api-types": "0.37.61",
"fast-deep-equal": "3.1.3",
"lodash.snakecase": "4.1.1",
"tslib": "2.6.2",
"undici": "5.27.2",
"ws": "8.14.2"
} }
}, },
"dot-prop": { "fast-deep-equal": {
"version": "6.0.1", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
"requires": {
"is-obj": "^2.0.0"
}
}, },
"fs-extra": { "fs-extra": {
"version": "11.1.1", "version": "11.1.1",
@ -621,11 +679,6 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
}, },
"is-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
},
"jsonfile": { "jsonfile": {
"version": "6.1.0", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@ -635,10 +688,15 @@
"universalify": "^2.0.0" "universalify": "^2.0.0"
} }
}, },
"lodash.isequal": { "lodash": {
"version": "4.5.0", "version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"lodash.snakecase": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
"integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="
}, },
"lru-cache": { "lru-cache": {
"version": "6.0.0", "version": "6.0.0",
@ -648,18 +706,10 @@
"yallist": "^4.0.0" "yallist": "^4.0.0"
} }
}, },
"mime-db": { "magic-bytes.js": {
"version": "1.44.0", "version": "1.10.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz",
"integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ=="
},
"mime-types": {
"version": "2.1.27",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
"integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
"requires": {
"mime-db": "1.44.0"
}
}, },
"minipass": { "minipass": {
"version": "5.0.0", "version": "5.0.0",
@ -690,24 +740,6 @@
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
}, },
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
},
"ow": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz",
"integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==",
"requires": {
"@sindresorhus/is": "^4.0.1",
"callsites": "^3.1.0",
"dot-prop": "^6.0.1",
"lodash.isequal": "^4.5.0",
"type-fest": "^1.2.1",
"vali-date": "^1.0.0"
}
},
"reflect-metadata": { "reflect-metadata": {
"version": "0.1.13", "version": "0.1.13",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
@ -735,39 +767,42 @@
} }
}, },
"ts-mixer": { "ts-mixer": {
"version": "6.0.0", "version": "6.0.4",
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz",
"integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA=="
}, },
"tslib": { "tslib": {
"version": "2.3.1", "version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
"type-fest": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="
}, },
"typescript": { "typescript": {
"version": "4.4.2", "version": "5.4.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz",
"integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==" "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ=="
},
"undici": {
"version": "5.27.2",
"resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz",
"integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==",
"requires": {
"@fastify/busboy": "^2.0.0"
}
},
"undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
}, },
"universalify": { "universalify": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
}, },
"vali-date": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
"integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY="
},
"ws": { "ws": {
"version": "7.5.4", "version": "8.14.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.4.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
"integrity": "sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg==", "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
"requires": {} "requires": {}
}, },
"yallist": { "yallist": {

View File

@ -11,8 +11,8 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@squeebot/core": "^3.6.0-1", "@squeebot/core": "^3.6.3",
"discord.js": "^13.1.0", "discord.js": "^14.14.1",
"typescript": "^4.4.2" "typescript": "^5.4.2"
} }
} }

View File

@ -3,7 +3,7 @@
"plugins": [ "plugins": [
{ {
"name": "discord", "name": "discord",
"version": "1.3.0" "version": "1.4.0"
} }
], ],
"typescript": true "typescript": true