diff options
-rw-r--r-- | .vscode/settings.json | 238 | ||||
-rw-r--r-- | src/commands/config/features.ts | 5 | ||||
-rw-r--r-- | src/commands/config/settings.ts | 168 | ||||
-rw-r--r-- | src/commands/dev/__template.ts | 7 | ||||
-rw-r--r-- | src/commands/dev/setLevel.ts | 6 | ||||
-rw-r--r-- | src/lib/extensions/discord-akairo/BushClientUtil.ts | 6 | ||||
-rw-r--r-- | src/lib/models/Guild.ts | 79 | ||||
-rw-r--r-- | src/listeners/client/interactionCreate.ts | 15 | ||||
-rw-r--r-- | src/listeners/commands/commandError.ts | 2 | ||||
-rw-r--r-- | src/listeners/message/automodCreate.ts | 9 | ||||
-rw-r--r-- | src/listeners/message/level.ts | 2 | ||||
-rw-r--r-- | yarn.lock | 52 |
12 files changed, 357 insertions, 232 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json index 1a05c63..105375b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,121 +1,121 @@ { - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "dist": false, - ".pnp.js": true - }, - "javascript.preferences.importModuleSpecifier": "project-relative", - "typescript.preferences.importModuleSpecifier": "project-relative", - "typescript.preferences.importModuleSpecifierEnding": "minimal", - "search.exclude": { - "**/.yarn": true, - "**/.pnp.*": true - }, - "editor.codeActionsOnSave": { - "source.organizeImports": true, - "source.fixAll.eslint": true, - "source.format": true - }, - "editor.formatOnSave": true, - "diffEditor.wordWrap": "on", - "editor.insertSpaces": false, - "editor.wordWrap": "on", - "editor.tabSize": 2, - "prettier.configPath": "package.json", - "prettier.prettierPath": ".yarn/sdks/prettier/index.js", - "prettier.withNodeModules": true, - "prettier.useEditorConfig": false, - "eslint.nodePath": ".yarn/sdks", - "typescript.tsdk": ".yarn/sdks/typescript/lib", - "typescript.enablePromptUseWorkspaceTsdk": true, - "better-comments.highlightPlainText": true, - "better-comments.multilineComments": true, - "better-comments.tags": [ - { - "tag": "!", - "color": "#FF2D00", - "strikethrough": false, - "underline": false, - "backgroundColor": "transparent", - "bold": false, - "italic": false - }, - { - "tag": "?", - "color": "#3498DB", - "strikethrough": false, - "underline": false, - "backgroundColor": "transparent", - "bold": false, - "italic": false - }, - // { - // "tag": "#", - // "color": "#f003fc", - // "strikethrough": false, - // "underline": false, - // "backgroundColor": "transparent", - // "bold": false, - // "italic": false - // }, - // { - // "tag": "//", - // "color": "#474747", - // "strikethrough": true, - // "underline": false, - // "backgroundColor": "transparent", - // "bold": false, - // "italic": false - // }, - { - "tag": "todo", - "color": "#FF8C00", - "strikethrough": false, - "underline": false, - "backgroundColor": "transparent", - "bold": false, - "italic": false - }, - // { - // "tag": "*", - // "color": "#98C379", - // "strikethrough": false, - // "underline": false, - // "backgroundColor": "transparent", - // "bold": false, - // "italic": false - // }, - { - "tag": "@ts-", - "color": "#f54242", - "strikethrough": false, - "underline": false, - "backgroundColor": "transparent", - "bold": false, - "italic": false - }, - { - "tag": "eslint-", - "color": "#f54242", - "strikethrough": false, - "underline": false, - "backgroundColor": "transparent", - "bold": false, - "italic": false - }, - { - "tag": "~", - "color": "#474747", - "strikethrough": true, - "underline": false, - "backgroundColor": "transparent", - "bold": false, - "italic": false - }, - ], - "compile-hero.disable-compile-files-on-did-save-code": true + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "dist": false, + ".pnp.js": true + }, + "javascript.preferences.importModuleSpecifier": "project-relative", + "typescript.preferences.importModuleSpecifier": "project-relative", + "typescript.preferences.importModuleSpecifierEnding": "minimal", + "search.exclude": { + "**/.yarn": true, + "**/.pnp.*": true + }, + "editor.codeActionsOnSave": { + "source.organizeImports": true, + "source.fixAll.eslint": true, + "source.format": true + }, + "editor.formatOnSave": true, + "diffEditor.wordWrap": "on", + "editor.insertSpaces": false, + "editor.wordWrap": "on", + "editor.tabSize": 2, + "prettier.configPath": "package.json", + "prettier.prettierPath": ".yarn/sdks/prettier/index.js", + "prettier.withNodeModules": true, + "prettier.useEditorConfig": false, + "eslint.nodePath": ".yarn/sdks", + "typescript.tsdk": ".yarn/sdks/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true, + "better-comments.highlightPlainText": true, + "better-comments.multilineComments": true, + "better-comments.tags": [ + { + "tag": "!", + "color": "#FF2D00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "?", + "color": "#3498DB", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + // { + // "tag": "#", + // "color": "#f003fc", + // "strikethrough": false, + // "underline": false, + // "backgroundColor": "transparent", + // "bold": false, + // "italic": false + // }, + // { + // "tag": "//", + // "color": "#474747", + // "strikethrough": true, + // "underline": false, + // "backgroundColor": "transparent", + // "bold": false, + // "italic": false + // }, + { + "tag": "todo", + "color": "#FF8C00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + // { + // "tag": "*", + // "color": "#98C379", + // "strikethrough": false, + // "underline": false, + // "backgroundColor": "transparent", + // "bold": false, + // "italic": false + // }, + { + "tag": "@ts-", + "color": "#f54242", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "eslint-", + "color": "#f54242", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "~", + "color": "#474747", + "strikethrough": true, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + } + ], + "compile-hero.disable-compile-files-on-did-save-code": true } diff --git a/src/commands/config/features.ts b/src/commands/config/features.ts index 31facfc..9a5fa5b 100644 --- a/src/commands/config/features.ts +++ b/src/commands/config/features.ts @@ -1,7 +1,6 @@ import { BushCommand, BushMessage, BushSlashMessage, GuildFeatures, guildFeaturesArr, guildFeaturesObj } from '@lib'; import { Message, MessageActionRow, MessageEmbed, MessageSelectMenu, SelectMenuInteraction } from 'discord.js'; -//todo: fix this so that it doesn't just select one feature but instead toggles it export default class FeaturesCommand extends BushCommand { public constructor() { super('features', { @@ -36,7 +35,7 @@ export default class FeaturesCommand extends BushCommand { }); collector.on('collect', async (interaction: SelectMenuInteraction) => { - if (interaction.user.id == message.author.id || client.config.owners.includes(interaction.user.id)) { + if (interaction.user.id === message.author.id || client.config.owners.includes(interaction.user.id)) { if (!message.guild) throw new Error('message.guild is null'); const [selected]: GuildFeatures[] = interaction.values as GuildFeatures[]; @@ -84,7 +83,7 @@ export default class FeaturesCommand extends BushCommand { .setPlaceholder('Select A Feature to Toggle') .setMaxValues(1) .setMinValues(1) - .setCustomId('featureCommand_selectFeature') + .setCustomId('command_selectFeature') .setDisabled(disable) ); } diff --git a/src/commands/config/settings.ts b/src/commands/config/settings.ts index 0b71629..003e118 100644 --- a/src/commands/config/settings.ts +++ b/src/commands/config/settings.ts @@ -1,56 +1,114 @@ -// import { BushCommand, BushMessage, BushSlashMessage, guildSettings } from '@lib'; +import { BushCommand, BushMessage, BushSlashMessage, guildSettings } from '@lib'; +import { + Message, + MessageActionRow, + MessageButton, + MessageComponentInteraction, + MessageEmbed, + MessageOptions, + MessageSelectMenu +} from 'discord.js'; -// export default class SettingsCommand extends BushCommand { -// public constructor() { -// super('settings', { -// aliases: ['settings', 'settings', 'configure', 'config'], -// category: 'config', -// description: { -// content: 'Configure server options. Hint this is easier to use with the slash command.', -// usage: 'config <\'add\'|\'remove\'|\'toggle\'> <setting>', -// examples: ['template 1 2'] -// }, -// args: [ -// { -// id: 'action', -// customType: ['add', 'remove', 'toggle'], -// prompt: { -// start: 'What action would you like to perform, it can be `add`, `remove`, or `toggle`.', -// retry: '{error} Choose a either `add`, `remove`, or `toggle`.', -// optional: false -// } -// }, -// { -// id: 'setting', -// customType: Object.keys(guildSettings), -// prompt: { -// start: 'What would you like to set your second argument to be?', -// retry: '{error} Pick a valid argument.', -// optional: true -// } -// } -// ], -// slash: true, -// slashOptions: [ -// { -// name: 'required_argument', -// description: 'What would you like to set your first argument to be?', -// type: 'STRING', -// required: true -// }, -// { -// name: 'optional_argument', -// description: 'What would you like to set your second argument to be?', -// type: 'STRING', -// required: false -// } -// ], -// channel: 'guild', -// clientPermissions: ['SEND_MESSAGES'], -// userPermissions: ['SEND_MESSAGES'] -// }); -// } -// public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> { -// return await message.util.reply(`${util.emojis.error} Do not use the template command.`); -// } -// } +export default class SettingsCommand extends BushCommand { + public constructor() { + super('settings', { + aliases: ['settings', 'setting', 'configure', 'config'], + category: 'config', + description: { + content: 'Configure server options.', + usage: 'settings', + examples: ['settings'] + }, + slash: true, + channel: 'guild', + clientPermissions: ['SEND_MESSAGES'], + userPermissions: ['SEND_MESSAGES', 'MANAGE_GUILD'], + ownerOnly: true + }); + } + + public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> { + if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be used in servers.`); + const messageOptions = await this.generateMessageOptions(message); + const msg = (await message.util.reply(messageOptions)) as Message; + const collector = msg.createMessageComponentCollector({ + channel: message.channel ?? undefined, + guild: message.guild, + message: message as Message, + time: 300_000 + }); + + collector.on('collect', async (interaction: MessageComponentInteraction) => { + if (interaction.user.id === message.author.id || client.config.owners.includes(interaction.user.id)) { + if (!message.guild) throw new Error('message.guild is null'); + switch (interaction.customId) { + case 'command_settingsSel': { + if (!interaction.isSelectMenu()) return; + + return interaction.update( + await this.generateMessageOptions(message, interaction.values[0] as keyof typeof guildSettings) + ); + } + } + } else { + return await interaction?.deferUpdate().catch(() => undefined); + } + }); + } + + public async generateMessageOptions( + message: BushMessage | BushSlashMessage, + feature?: keyof typeof guildSettings + ): Promise<MessageOptions> { + if (!message.guild) throw new Error('message.guild is null'); + const settingsEmbed = new MessageEmbed().setTitle(`${message.guild!.name}'s Settings`).setColor(util.colors.default); + if (!feature) { + const settingsArr = Object.keys(guildSettings) as (keyof typeof guildSettings)[]; + const desc = settingsArr.map((s) => `**${guildSettings[s].name}**`).join('\n'); + settingsEmbed.setDescription(desc); + + const selMenu = new MessageActionRow().addComponents( + new MessageSelectMenu() + .addOptions( + ...settingsArr.map((s) => ({ + label: guildSettings[s].name, + value: s, + description: guildSettings[s].description + })) + ) + .setPlaceholder('Select A Setting to View') + .setMaxValues(1) + .setMinValues(1) + .setCustomId('command_settingsSel') + ); + return { embeds: [settingsEmbed], components: [selMenu] }; + } else { + const components = new MessageActionRow().addComponents( + new MessageButton().setStyle('PRIMARY').setCustomId('command_settingsBack').setLabel('Back') + ); + settingsEmbed.setDescription(guildSettings[feature].description); + switch (guildSettings[feature].type as 'string' | 'channel' | 'channel-array' | 'role' | 'role-array') { + case 'string': { + settingsEmbed.addField(guildSettings[feature].name, (await message.guild.getSetting(feature)).toString()); + settingsEmbed.setFooter( + `Run "${await message.guild.getSetting('prefix')}settings set ${feature} <value>" to set this setting.` + ); + return { embeds: [settingsEmbed], components: [components] }; + } + case 'channel': { + break; + } + case 'channel-array': { + break; + } + case 'role': { + break; + } + case 'role-array': { + break; + } + } + return {}; + } + } +} diff --git a/src/commands/dev/__template.ts b/src/commands/dev/__template.ts index be4f7a7..4cf407c 100644 --- a/src/commands/dev/__template.ts +++ b/src/commands/dev/__template.ts @@ -53,7 +53,12 @@ export default class TemplateCommand extends BushCommand { userPermissions: ['SEND_MESSAGES'] }); } - public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> { + + public override async exec( + message: BushMessage | BushSlashMessage, + args: { required_argument: string; optional_argumen: string } + ): Promise<unknown> { return await message.util.reply(`${util.emojis.error} Do not use the template command.`); + args; } } diff --git a/src/commands/dev/setLevel.ts b/src/commands/dev/setLevel.ts index e69b9df..777ef60 100644 --- a/src/commands/dev/setLevel.ts +++ b/src/commands/dev/setLevel.ts @@ -55,15 +55,17 @@ export default class SetLevelCommand extends BushCommand { ): Promise<unknown> { if (!message.author.isOwner()) return await message.util.reply(`${util.emojis.error} Only my developers can run this command.`); + if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be run in a guild.`); + if (!user.id) throw new Error('user.id is null'); const [levelEntry] = await Level.findOrBuild({ where: { user: user.id, - guild: message.guild!.id + guild: message.guild.id }, defaults: { user: user.id, - guild: message.guild!.id + guild: message.guild.id } }); await levelEntry.update({ xp: Level.convertLevelToXp(level) }); diff --git a/src/lib/extensions/discord-akairo/BushClientUtil.ts b/src/lib/extensions/discord-akairo/BushClientUtil.ts index da98dac..ef51b63 100644 --- a/src/lib/extensions/discord-akairo/BushClientUtil.ts +++ b/src/lib/extensions/discord-akairo/BushClientUtil.ts @@ -1012,11 +1012,7 @@ export class BushClientUtil extends ClientUtil { * @param surroundChar2 - The character placed in the end of the element. Defaults to `surroundChar1`. */ public surroundArray(array: string[], surroundChar1: string, surroundChar2?: string): string[] { - const newArray: string[] = []; - array.forEach((a) => { - newArray.push(`${surroundChar1}${a}${surroundChar2 ?? surroundChar1}`); - }); - return newArray; + return array.map((a) => `${surroundChar1}${a}${surroundChar2 ?? surroundChar1}`); } public parseDuration(content: string, remove = true): { duration: number; contentWithoutTime: string | null } { diff --git a/src/lib/models/Guild.ts b/src/lib/models/Guild.ts index 614bf15..66deddb 100644 --- a/src/lib/models/Guild.ts +++ b/src/lib/models/Guild.ts @@ -18,6 +18,7 @@ export interface GuildModel { autoModPhases: string[]; enabledFeatures: GuildFeatures[]; joinRoles: Snowflake[]; + automodLogChannel: Snowflake; } export interface GuildModelCreationAttributes { @@ -34,16 +35,58 @@ export interface GuildModelCreationAttributes { autoModPhases?: string[]; enabledFeatures?: GuildFeatures[]; joinRoles?: Snowflake[]; + automodLogChannel?: Snowflake; } export const guildSettings = { - prefix: { type: 'string' }, - autoPublishChannels: { type: 'channel-array' }, - welcomeChannel: { type: 'channel-array' }, - muteRole: { type: 'role' }, - punishmentEnding: { type: 'string' }, - lockdownChannels: { type: 'channel-array' }, - joinRoles: { type: 'role-array' } + prefix: { + name: 'Prefix', + description: 'description goes here', + type: 'string', + configurable: true + }, + autoPublishChannels: { + name: 'Auto Publish Channels', + description: 'description goes here', + type: 'channel-array', + configurable: true + }, + welcomeChannel: { + name: 'Welcome Channel', + description: 'description goes here', + type: 'channel-array', + configurable: true + }, + muteRole: { + name: 'Mute Role', + description: 'description goes here', + type: 'role', + configurable: true + }, + punishmentEnding: { + name: 'Punishment Ending', + description: 'description goes here', + type: 'string', + configurable: true + }, + lockdownChannels: { + name: 'Lockdown Channels', + description: 'description goes here', + type: 'channel-array', + configurable: false // not implemented yet + }, + joinRoles: { + name: 'Join Roles', + description: 'description goes here', + type: 'role-array', + configurable: true + }, + automodLogChannel: { + name: 'Automod Log Channel', + description: 'description goes here', + type: 'channel', + configurable: true + } }; export const guildFeaturesObj = { @@ -53,11 +96,11 @@ export const guildFeaturesObj = { }, autoPublish: { name: 'Auto Publish', - description: 'Auto publishes all messages in configured announcement channels.' + description: 'Publishes messages in configured announcement channels.' }, autoThread: { name: 'Auto Thread', - description: 'Automatically creates a new thread for every message in configured channels.' + description: 'Creates a new thread for messages in configured channels.' }, blacklistedFile: { name: 'Blacklisted File', @@ -73,7 +116,7 @@ export const guildFeaturesObj = { }, stickyRoles: { name: 'Sticky Roles', - description: "Stores users' roles when they leave the server and returns them when they rejoin." + description: 'Restores past roles to a user when they rejoin.' } }; @@ -211,6 +254,16 @@ export class Guild extends BaseModel<GuildModel, GuildModelCreationAttributes> i throw new Error(NEVER_USED); } + /** + * The channel to send automod logs to. + */ + public get automodLogChannel(): Snowflake { + throw new Error(NEVER_USED); + } + public set automodLogChannel(_: Snowflake) { + throw new Error(NEVER_USED); + } + public static initModel(sequelize: Sequelize, client: BushClient): void { Guild.init( { @@ -242,7 +295,11 @@ export class Guild extends BaseModel<GuildModel, GuildModelCreationAttributes> i lockdownChannels: jsonArrayInit('lockdownChannels'), autoModPhases: jsonArrayInit('autoModPhases'), enabledFeatures: jsonArrayInit('enabledFeatures'), - joinRoles: jsonArrayInit('joinRoles') + joinRoles: jsonArrayInit('joinRoles'), + automodLogChannel: { + type: DataTypes.STRING, + allowNull: true + } }, { sequelize: sequelize } ); diff --git a/src/listeners/client/interactionCreate.ts b/src/listeners/client/interactionCreate.ts index b4cc353..d2bc6b5 100644 --- a/src/listeners/client/interactionCreate.ts +++ b/src/listeners/client/interactionCreate.ts @@ -25,10 +25,10 @@ export default class InteractionCreateListener extends BushListener { ); return; } else if (interaction.isButton()) { - if (interaction.customId.startsWith('paginate_')) return; + if (interaction.customId.startsWith('paginate_') || interaction.customId.startsWith('command_')) return; return await interaction.reply({ content: 'Buttons go brrr', ephemeral: true }); } else if (interaction.isSelectMenu()) { - if (interaction.customId.startsWith('featureCommand_')) return; + if (interaction.customId.startsWith('command_')) return; return await interaction.reply({ content: `You selected ${ Array.isArray(interaction.values) @@ -37,15 +37,6 @@ export default class InteractionCreateListener extends BushListener { }.`, ephemeral: true }); - } /* else if (interaction.isContextMenu()) { - if (interaction.commandName === 'View Raw') { - await interaction.deferReply({ ephemeral: true }); - const embed = await ViewRawCommand.getRawData(interaction.options.getMessage('message') as BushMessage, { - json: false, - js: false - }); - return await interaction.editReply({ embeds: [embed] }); - } - } */ + } } } diff --git a/src/listeners/commands/commandError.ts b/src/listeners/commands/commandError.ts index f43e17d..a3618e7 100644 --- a/src/listeners/commands/commandError.ts +++ b/src/listeners/commands/commandError.ts @@ -96,7 +96,7 @@ export default class CommandErrorListener extends BushListener { } const inspectOptions = { showHidden: false, - depth: 5, + depth: 9, colors: false, customInspect: true, showProxy: false, diff --git a/src/listeners/message/automodCreate.ts b/src/listeners/message/automodCreate.ts index f78efec..4165043 100644 --- a/src/listeners/message/automodCreate.ts +++ b/src/listeners/message/automodCreate.ts @@ -97,16 +97,15 @@ export default class AutomodMessageCreateListener extends BushListener { : highestOffence === 2 ? util.colors.orange : util.colors.red; + // TODO: remove hard coded value void (message.guild.channels.cache.get('783088333055066212') as TextChannel).send({ embeds: [ new MessageEmbed() .setTitle(`[Severity ${highestOffence}] Automod Action Performed`) .setDescription( - `**User:** ${message.author.tag} (${message.author.tag})\n**Sent From**: <#${ - message.channel.id - }> [Jump to context](${message.url})\n**Blacklisted Words:** ${util - .surroundArray(Object.keys(offences), '`') - .join(', ')}` + `**User:** ${message.author} (${message.author.tag})\n**Sent From**: <#${message.channel.id}> [Jump to context](${ + message.url + })\n**Blacklisted Words:** ${util.surroundArray(Object.keys(offences), '`').join(', ')}` ) .addField('Message Content', `${await util.codeblock(message.content, 1024)}`) .setColor(color) diff --git a/src/listeners/message/level.ts b/src/listeners/message/level.ts index 33e7b08..83d9e3b 100644 --- a/src/listeners/message/level.ts +++ b/src/listeners/message/level.ts @@ -35,7 +35,7 @@ export default class LevelListener extends BushListener { }); if (success) void client.logger.verbose( - `levelMessageListener`, + `levelMessage`, `Gave <<${xpToGive}>> XP to <<${message.author.tag}>> in <<${message.guild}>>.` ); this.#levelCooldowns.add(`${message.guild.id}-${message.author.id}`); @@ -102,6 +102,13 @@ __metadata: languageName: node linkType: hard +"@gar/promisify@npm:^1.0.1": + version: 1.1.2 + resolution: "@gar/promisify@npm:1.1.2" + checksum: d05081e0887a49c178b75ee3067bd6ee086f73c154d121b854fb2e044e8a89cb1cbb6de3a0dd93a519b80f0531fda68b099dd7256205f7fbb3490324342f2217 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.5.0": version: 0.5.0 resolution: "@humanwhocodes/config-array@npm:0.5.0" @@ -166,6 +173,16 @@ __metadata: languageName: node linkType: hard +"@npmcli/fs@npm:^1.0.0": + version: 1.0.0 + resolution: "@npmcli/fs@npm:1.0.0" + dependencies: + "@gar/promisify": ^1.0.1 + semver: ^7.3.5 + checksum: f2b4990107dd2a5b18794c89aaff6f62f3a67883d49a20602fdfc353cbc7f8c5fd50edeffdc769e454900e01b8b8e43d0b9eb524d00963d69f3c829be1a2e8ac + languageName: node + linkType: hard + "@npmcli/move-file@npm:^1.0.1": version: 1.1.2 resolution: "@npmcli/move-file@npm:1.1.2" @@ -329,16 +346,16 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 16.7.1 - resolution: "@types/node@npm:16.7.1" - checksum: fcf1a2c7b1f19c2201574b2110176b49c6efd824a39b2ed8ac3e6688740e2a35bef95a3334dfa345f4bd4873fd8b79d8ac8cfcc9fcd3d2f4f8f993c2c37ce4ab + version: 16.7.2 + resolution: "@types/node@npm:16.7.2" + checksum: aef77c109e2fd93b5dc6ec0a57a0878aaaa58adf0e63d9618d67b116ad3f2a3eb2589a99deaf9fda4a0805068b2533e3d2cf8e8dc3572251c498ec3dc929a76c languageName: node linkType: hard "@types/node@npm:^14.14.22": - version: 14.17.11 - resolution: "@types/node@npm:14.17.11" - checksum: 94192a5f6f5da51a10dfa959049a5cfcff440fbeeefbf98084083c1370a107872fc7f4a2df42f100989dea873cb4128f376d5e4af6be43fec21273359d9dbdb0 + version: 14.17.12 + resolution: "@types/node@npm:14.17.12" + checksum: 7efbce3781a0ea5d7a39bca3c5ed9c4e4d99fed3483fb2a89670aeb049cd9d25f1ddecd8fb58420fd92de371278721ddd6e3ad95c4f55992592f1ac5d1dedf98 languageName: node linkType: hard @@ -782,9 +799,10 @@ __metadata: linkType: soft "cacache@npm:^15.0.5": - version: 15.2.0 - resolution: "cacache@npm:15.2.0" + version: 15.3.0 + resolution: "cacache@npm:15.3.0" dependencies: + "@npmcli/fs": ^1.0.0 "@npmcli/move-file": ^1.0.1 chownr: ^2.0.0 fs-minipass: ^2.0.0 @@ -802,7 +820,7 @@ __metadata: ssri: ^8.0.1 tar: ^6.0.2 unique-filename: ^1.1.1 - checksum: 34d0fba6030dd3f1f9de4d9fb486cfa8f6ec836ab00d75b846b40c06f96e64898e781f715d19a2c357a601a899c339a44446f94dd328f173605af165a295dd29 + checksum: a07327c27a4152c04eb0a831c63c00390d90f94d51bb80624a66f4e14a6b6360bbf02a84421267bd4d00ca73ac9773287d8d7169e8d2eafe378d2ce140579db8 languageName: node linkType: hard @@ -1109,7 +1127,7 @@ discord-akairo@NotEnoughUpdates/discord-akairo: discord.js@NotEnoughUpdates/discord.js: version: 13.2.0-dev - resolution: "discord.js@https://github.com/NotEnoughUpdates/discord.js.git#commit=e0c7f18a5c43cce502cfb6578f0b74940afe4859" + resolution: "discord.js@https://github.com/NotEnoughUpdates/discord.js.git#commit=a1764c7ece9e6dc83484a1bf2f0ac9ca5a501d0a" dependencies: "@discordjs/builders": ^0.5.0 "@discordjs/collection": ^0.2.1 @@ -1119,7 +1137,7 @@ discord.js@NotEnoughUpdates/discord.js: discord-api-types: ^0.22.0 node-fetch: ^2.6.1 ws: ^7.5.1 - checksum: 0a6839d548cbbbaa1ae12d7a712a9c94cef73c4cd2a76f094a9ab364fef020395cf8685238a4d71c91e53cf27512d0ce5daee06733fc58fa17ab26f8a614a501 + checksum: 54d4a52cba0358317b9c1d2d1d55cdd66987a2489db3a7443dae5220f3a7f532fddf9cd5c8c1d6e8e2f6d1cdcd9b95cf6dc481208724f11d437ddd6c51dc4f4b languageName: node linkType: hard @@ -1197,11 +1215,11 @@ discord.js@NotEnoughUpdates/discord.js: linkType: hard "esbuild@npm:^0.12.11": - version: 0.12.22 - resolution: "esbuild@npm:0.12.22" + version: 0.12.23 + resolution: "esbuild@npm:0.12.23" bin: esbuild: bin/esbuild - checksum: db14cc10914d40a875da1b102cee7479ebe1b085cdc2deaa8e275468ada9bf3c6b793bd6004a031a9f2e34865fe629dc59030c5fe4820978f1cf071966aa2c5d + checksum: 9ae58a151d62888d9ded07bda113a7e343331aaf0ba651827883d0f270e94846cac3ac8cb28c055dfceb6c45fb648a20db70e65aa8afb03b8b87fb08fdfb4f90 languageName: node linkType: hard @@ -3076,8 +3094,8 @@ discord.js@NotEnoughUpdates/discord.js: linkType: hard "tar@npm:^6.0.2, tar@npm:^6.1.0, tar@npm:^6.1.2": - version: 6.1.10 - resolution: "tar@npm:6.1.10" + version: 6.1.11 + resolution: "tar@npm:6.1.11" dependencies: chownr: ^2.0.0 fs-minipass: ^2.0.0 @@ -3085,7 +3103,7 @@ discord.js@NotEnoughUpdates/discord.js: minizlib: ^2.1.1 mkdirp: ^1.0.3 yallist: ^4.0.0 - checksum: 9e7ba4abc81a3095a5fc7a3e97a9f753103f5ce884c52431613f281954ec83d690e58f1ccad3cdd9eacdea901431f96f5f879dddc421f6b231994f6e7de07e1f + checksum: a04c07bb9e2d8f46776517d4618f2406fb977a74d914ad98b264fc3db0fe8224da5bec11e5f8902c5b9bcb8ace22d95fbe3c7b36b8593b7dfc8391a25898f32f languageName: node linkType: hard |