aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/Faithful.ttfbin0 -> 275832 bytes
-rw-r--r--package.json17
-rw-r--r--src/bot.ts10
-rw-r--r--src/commands/info/inviteInfo.ts43
-rw-r--r--src/commands/moulberry-bush/neuRepo.ts47
-rw-r--r--src/commands/tickets/ticket-!.ts0
-rw-r--r--src/lib/common/util/Minecraft.ts331
-rw-r--r--src/tasks/cache/updateNeuItemCache.ts12
-rw-r--r--tsconfig.json4
-rw-r--r--vite.config.ts14
-rw-r--r--yarn.lock142
11 files changed, 533 insertions, 87 deletions
diff --git a/assets/Faithful.ttf b/assets/Faithful.ttf
new file mode 100644
index 0000000..aaadb94
--- /dev/null
+++ b/assets/Faithful.ttf
Binary files differ
diff --git a/package.json b/package.json
index 971378b..e858ae6 100644
--- a/package.json
+++ b/package.json
@@ -60,14 +60,15 @@
"dependencies": {
"@discordjs/builders": "^0.15.0",
"@discordjs/rest": "^0.5.0",
+ "@ironm00n/nbt-ts": "^1.4.0",
"@notenoughupdates/discord.js-minesweeper": "^1.0.10",
"@notenoughupdates/events-intercept": "^3.0.1",
"@notenoughupdates/humanize-duration": "^4.0.1",
"@notenoughupdates/simplify-number": "^1.0.1",
"@notenoughupdates/wolfram-alpha-api": "^1.0.2",
- "@sentry/integrations": "^7.5.1",
- "@sentry/node": "^7.5.1",
- "@sentry/tracing": "^7.5.1",
+ "@sentry/integrations": "^7.7.0",
+ "@sentry/node": "^7.7.0",
+ "@sentry/tracing": "^7.7.0",
"canvas": "^2.9.3",
"chalk": "^5.0.1",
"deep-lock": "^1.0.0",
@@ -87,18 +88,18 @@
"prettier": "^2.7.1",
"pretty-bytes": "^6.0.0",
"rimraf": "^3.0.2",
- "sequelize": "6.21.2",
+ "sequelize": "6.21.3",
"tinycolor2": "^1.4.2",
"typescript": "^4.7.4",
"vm2": "^3.9.10"
},
"devDependencies": {
"@sapphire/snowflake": "^3.2.2",
- "@sentry/types": "^7.5.1",
+ "@sentry/types": "^7.7.0",
"@types/eslint": "^8.4.5",
"@types/express": "^4.17.13",
"@types/lodash": "^4.14.182",
- "@types/node": "^18.0.3",
+ "@types/node": "^18.0.4",
"@types/numeral": "^2.0.2",
"@types/pg": "^8.6.5",
"@types/prettier": "^2.6.3",
@@ -111,9 +112,9 @@
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-deprecation": "^1.3.2",
"eslint-plugin-import": "^2.26.0",
- "node-fetch": "^3.2.6",
+ "node-fetch": "^3.2.8",
"ts-essentials": "^9.2.0",
- "vitest": "^0.17.1"
+ "vitest": "^0.18.0"
},
"packageManager": "yarn@3.2.1"
}
diff --git a/src/bot.ts b/src/bot.ts
index d7b5ad9..038fbbb 100644
--- a/src/bot.ts
+++ b/src/bot.ts
@@ -3,11 +3,11 @@ import { init } from './lib/utils/BushLogger.js';
// also starts a REPL session
init();
-const { dirname } = await import('path');
-const { fileURLToPath } = await import('url');
-const { default: config } = await import('../config/options.js');
-const { Sentry } = await import('./lib/common/Sentry.js');
-const { BushClient } = await import('./lib/index.js');
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import { default as config } from '../config/options.js';
+import { Sentry } from './lib/common/Sentry.js';
+import { BushClient } from './lib/index.js';
const isDry = process.argv.includes('dry');
if (!isDry && config.credentials.sentryDsn !== null) new Sentry(dirname(fileURLToPath(import.meta.url)) || process.cwd(), config);
diff --git a/src/commands/info/inviteInfo.ts b/src/commands/info/inviteInfo.ts
new file mode 100644
index 0000000..bfe7eae
--- /dev/null
+++ b/src/commands/info/inviteInfo.ts
@@ -0,0 +1,43 @@
+import { Arg, ArgType, BushCommand, clientSendAndPermCheck, colors, type CommandMessage, type SlashMessage } from '#lib';
+import { ApplicationCommandOptionType, EmbedBuilder, Invite, PermissionFlagsBits } from 'discord.js';
+
+export default class InviteInfoCommand extends BushCommand {
+ public constructor() {
+ super('inviteInfo', {
+ aliases: ['invite-info', 'ii'],
+ category: 'info',
+ description: 'Get info about an invite.',
+ usage: ['invite-info [invite]'],
+ examples: ['invite-info discord.gg/moulberry'],
+ args: [
+ {
+ id: 'invite',
+ description: 'The guild to find information about.',
+ type: 'invite',
+ prompt: 'What invite would you like to find information about?',
+ retry: '{error} Choose a valid invite to find information about.',
+ slashType: ApplicationCommandOptionType.String
+ }
+ ],
+ slash: true,
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ userPermissions: []
+ });
+ }
+
+ public override async exec(message: CommandMessage | SlashMessage, args: { invite: ArgType<'invite' | 'string'> }) {
+ const invite = message.util.isSlashMessage(message)
+ ? ((await Arg.cast('invite', message, args.invite as string)) as ArgType<'invite'>)
+ : args.invite;
+
+ const inviteInfoEmbed = new EmbedBuilder().setTitle(`Invite to ${invite.guild.name}`).setColor(colors.default);
+
+ this.generateAboutField(inviteInfoEmbed, invite);
+ }
+
+ private generateAboutField(embed: EmbedBuilder, invite: Invite) {
+ const about = [`**code:** ${invite.code}`, `**channel:** ${}`];
+
+ embed.addFields({ name: '» About', value: about.join('\n') });
+ }
+}
diff --git a/src/commands/moulberry-bush/neuRepo.ts b/src/commands/moulberry-bush/neuRepo.ts
new file mode 100644
index 0000000..24f83ad
--- /dev/null
+++ b/src/commands/moulberry-bush/neuRepo.ts
@@ -0,0 +1,47 @@
+import { BushCommand, clientSendAndPermCheck, type ArgType, type CommandMessage, type SlashMessage } from '#lib';
+import { ApplicationCommandOptionType, AutocompleteInteraction, CacheType, PermissionFlagsBits } from 'discord.js';
+
+export default class NeuRepoCommand extends BushCommand {
+ public static items: { name: string; id: string }[] = [];
+
+ public constructor() {
+ super('neuRepo', {
+ aliases: ['neu-repo', 'repo-item', 'neu-item', 'item-repo'],
+ category: "Moulberry's Bush",
+ description: 'Get information about an item from the NEU item repo.',
+ usage: ['neu-repo <item>'],
+ examples: ['neu-repo BARRIER'],
+ args: [
+ {
+ id: 'item',
+ description: 'The item id that you would like to find neu item information about.',
+ type: 'string',
+ prompt: 'What SkyBlock item would you like to get information about?',
+ retry: '{error} Pick a valid SkyBlock item ID. Try using the slash command for a better experience.',
+ slashType: ApplicationCommandOptionType.String,
+ autocomplete: true
+ }
+ /* {
+ id: 'dangerous',
+ description: 'Whether or not to use the dangerous branch.',
+ prompt: 'Would you like to use the dangerous branch instead of the master branch?',
+ match: 'flag',
+ flag: ['--dangerous', '-d'],
+ default: false,
+ optional: true,
+ slashType: ApplicationCommandOptionType.Boolean
+ } */
+ ],
+ slash: true,
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ userPermissions: []
+ });
+ }
+
+ public override async exec(
+ message: CommandMessage | SlashMessage,
+ args: { item: ArgType<'string'> /* dangerous: ArgType<'flag'> */ }
+ ) {}
+
+ public override async autocomplete(interaction: AutocompleteInteraction<CacheType>) {}
+}
diff --git a/src/commands/tickets/ticket-!.ts b/src/commands/tickets/ticket-!.ts
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/commands/tickets/ticket-!.ts
diff --git a/src/lib/common/util/Minecraft.ts b/src/lib/common/util/Minecraft.ts
new file mode 100644
index 0000000..b4b013f
--- /dev/null
+++ b/src/lib/common/util/Minecraft.ts
@@ -0,0 +1,331 @@
+import { Byte, Int, parse } from '@ironm00n/nbt-ts';
+import { BitField } from 'discord.js';
+import fs from 'fs/promises';
+import path from 'path';
+import { fileURLToPath } from 'url';
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
+export enum FormattingCodes {
+ Black = '§0',
+ DarkBlue = '§1',
+ DarkGreen = '§2',
+ DarkAqua = '§3',
+ DarkRed = '§4',
+ DarkPurple = '§5',
+ Gold = '§6',
+ Gray = '§7',
+ DarkGray = '§8',
+ Blue = '§9',
+ Green = '§a',
+ Aqua = '§b',
+ Red = '§c',
+ LightPurple = '§d',
+ Yellow = '§e',
+ White = '§f',
+
+ Obfuscated = '§k',
+ Bold = '§l',
+ Strikethrough = '§m',
+ Underline = '§n',
+ Italic = '§o',
+ Reset = '§r'
+}
+
+// https://minecraft.fandom.com/wiki/Formatting_codes
+export const formattingInfo = {
+ [FormattingCodes.Black]: { foreground: '#000000', background: '#000000', ansi: '\u001b[0;30m' },
+ [FormattingCodes.DarkBlue]: { foreground: '#0000AA', background: '#00002A', ansi: '\u001b[0;34m' },
+ [FormattingCodes.DarkGreen]: { foreground: '#00AA00', background: '#002A00', ansi: '\u001b[0;32m' },
+ [FormattingCodes.DarkAqua]: { foreground: '#00AAAA', background: '#002A2A', ansi: '\u001b[0;36m' },
+ [FormattingCodes.DarkRed]: { foreground: '#AA0000', background: '#2A0000', ansi: '\u001b[0;31m' },
+ [FormattingCodes.DarkPurple]: { foreground: '#AA00AA', background: '#2A002A', ansi: '\u001b[0;35m' },
+ [FormattingCodes.Gold]: { foreground: '#FFAA00', background: '#2A2A00', ansi: '\u001b[0;33m' },
+ [FormattingCodes.Gray]: { foreground: '#AAAAAA', background: '#2A2A2A', ansi: '\u001b[0;37m' },
+ [FormattingCodes.DarkGray]: { foreground: '#555555', background: '#151515', ansi: '\u001b[0;90m' },
+ [FormattingCodes.Blue]: { foreground: '#5555FF', background: '#15153F', ansi: '\u001b[0;94m' },
+ [FormattingCodes.Green]: { foreground: '#55FF55', background: '#153F15', ansi: '\u001b[0;92m' },
+ [FormattingCodes.Aqua]: { foreground: '#55FFFF', background: '#153F3F', ansi: '\u001b[0;96m' },
+ [FormattingCodes.Red]: { foreground: '#FF5555', background: '#3F1515', ansi: '\u001b[0;91m' },
+ [FormattingCodes.LightPurple]: { foreground: '#FF55FF', background: '#3F153F', ansi: '\u001b[0;95m' },
+ [FormattingCodes.Yellow]: { foreground: '#FFFF55', background: '#3F3F15', ansi: '\u001b[0;93m' },
+ [FormattingCodes.White]: { foreground: '#FFFFFF', background: '#3F3F3F', ansi: '\u001b[0;97m' },
+
+ [FormattingCodes.Obfuscated]: { ansi: '\u001b[8m' },
+ [FormattingCodes.Bold]: { ansi: '\u001b[1m' },
+ [FormattingCodes.Strikethrough]: { ansi: '\u001b[9m' },
+ [FormattingCodes.Underline]: { ansi: '\u001b[4m' },
+ [FormattingCodes.Italic]: { ansi: '\u001b[3m' },
+ [FormattingCodes.Reset]: { ansi: '\u001b[0m' }
+} as const;
+
+export type McItemId = Lowercase<string>;
+export type SbItemId = Uppercase<string>;
+export type MojangJson = string;
+export type SbRecipeItem = `${SbItemId}:${number}` | '';
+export type SbRecipe = {
+ [Location in `${'A' | 'B' | 'C'}${1 | 2 | 3}`]: SbRecipeItem;
+};
+export type InfoType = 'WIKI_URL' | '';
+
+type Slayer = `${'WOLF' | 'BLAZE' | 'EMAN'}_${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}`;
+
+export interface RawNeuItem {
+ itemid: McItemId;
+ displayname: string;
+ nbttag: MojangJson;
+ damage: number;
+ lore: string[];
+ recipe?: SbRecipe;
+ internalname: SbItemId;
+ modver: string;
+ infoType: InfoType;
+ info?: string[];
+ crafttext: string;
+ vanilla?: boolean;
+ useneucraft?: boolean;
+ slayer_req?: Slayer;
+ clickcommand?: string;
+ x?: number;
+ y?: number;
+ z?: number;
+ island?: string;
+ recipes?: { type: string; cost: any[]; result: SbItemId }[];
+ /** @deprecated */
+ parent?: SbItemId;
+ noseal?: boolean;
+}
+
+export enum HideFlagsBits {
+ Enchantments = 1,
+ AttributeModifiers = 2,
+ Unbreakable = 4,
+ CanDestroy = 8,
+ CanPlaceOn = 16,
+ /**
+ * potion effects, shield pattern info, "StoredEnchantments", written book
+ * "generation" and "author", "Explosion", "Fireworks", and map tooltips
+ */
+ OtherInformation = 32,
+ Dyed = 64
+}
+
+export type HideFlagsString = keyof typeof HideFlagsBits;
+
+export class HideFlags extends BitField<HideFlagsString> {
+ public static override Flags = HideFlagsBits;
+}
+
+export const formattingCode = new RegExp(
+ `§[${Object.values(FormattingCodes)
+ .filter((v) => v.startsWith('§'))
+ .map((v) => v.substring(1))
+ .join('')}]`
+);
+
+export function removeMCFormatting(str: string) {
+ return str.replaceAll(formattingCode, '');
+}
+
+const repo = path.join(__dirname, '..', '..', '..', '..', '..', 'neu-item-repo-dangerous');
+const itemPath = path.join(repo, 'items');
+const items = await fs.readdir(itemPath);
+
+// for (let i = 0; i < 5; i++) {
+for (const path_ of items) {
+ // const randomItem = items[Math.floor(Math.random() * items.length)];
+ // console.log(randomItem);
+ const item = (await import(path.join(itemPath, /* randomItem */ path_), { assert: { type: 'json' } })).default as RawNeuItem;
+ if (/.*?((_MONSTER)|(_NPC)|(_ANIMAL)|(_MINIBOSS)|(_BOSS)|(_SC))$/.test(item.internalname)) continue;
+ if (!/.*?;[0-5]$/.test(item.internalname)) continue;
+ /* console.log(path_);
+ console.dir(item, { depth: Infinity }); */
+
+ /* console.log('==========='); */
+ const nbt = parse(item.nbttag) as NbtTag;
+
+ if (nbt?.SkullOwner?.Properties?.textures?.[0]?.Value) {
+ nbt.SkullOwner.Properties.textures[0].Value = parse(
+ Buffer.from(nbt.SkullOwner.Properties.textures[0].Value, 'base64').toString('utf-8')
+ ) as string;
+ }
+
+ if (nbt.ExtraAttributes?.petInfo) {
+ nbt.ExtraAttributes.petInfo = JSON.parse(nbt.ExtraAttributes.petInfo as any as string);
+ }
+
+ // delete nbt.display?.Lore;
+
+ console.dir(nbt, { depth: Infinity });
+ console.log('===========');
+
+ /* if (nbt?.display && nbt.display.Name !== item.displayname)
+ console.log(`${path_} display name mismatch: ${mcToAnsi(nbt.display.Name)} != ${mcToAnsi(item.displayname)}`);
+
+ if (nbt?.ExtraAttributes && nbt?.ExtraAttributes.id !== item.internalname)
+ console.log(`${path_} internal name mismatch: ${mcToAnsi(nbt?.ExtraAttributes.id)} != ${mcToAnsi(item.internalname)}`); */
+
+ /* console.log('===========');
+
+ console.log(mcToAnsi(item.displayname));
+ console.log(item.lore.map((l) => mcToAnsi(l)).join('\n')); */
+
+ /* const keys = [
+ 'itemid',
+ 'displayname',
+ 'nbttag',
+ 'damage',
+ 'lore',
+ 'recipe',
+ 'internalname',
+ 'modver',
+ 'infoType',
+ 'info',
+ 'crafttext',
+ 'vanilla',
+ 'useneucraft',
+ 'slayer_req',
+ 'clickcommand',
+ 'x',
+ 'y',
+ 'z',
+ 'island',
+ 'recipes',
+ 'parent',
+ 'noseal'
+ ];
+
+ Object.keys(item).forEach((k) => {
+ if (!keys.includes(k)) throw new Error(`Unknown key: ${k}`);
+ });
+
+ if (
+ 'slayer_req' in item &&
+ !new Array(10).flatMap((_, i) => ['WOLF', 'BLAZE', 'EMAN'].map((e) => e + (i + 1)).includes(item.slayer_req!))
+ )
+ throw new Error(`Unknown slayer req: ${item.slayer_req!}`); */
+
+ /* console.log('=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); */
+}
+
+interface NbtTag {
+ overrideMeta?: Byte;
+ Unbreakable?: Int;
+ ench?: string[];
+ HideFlags?: HideFlags;
+ SkullOwner?: SkullOwner;
+ display?: NbtTagDisplay;
+ ExtraAttributes?: ExtraAttributes;
+}
+
+interface SkullOwner {
+ Id?: string;
+ Properties?: {
+ textures?: { Value?: string }[];
+ };
+}
+
+interface NbtTagDisplay {
+ Lore?: string[];
+ color?: Int;
+ Name?: string;
+}
+
+type RuneId = string;
+
+interface ExtraAttributes {
+ originTag?: Origin;
+ id?: string;
+ generator_tier?: Int;
+ boss_tier?: Int;
+ enchantments?: { hardened_mana?: Int };
+ dungeon_item_level?: Int;
+ runes?: { [key: RuneId]: Int };
+ petInfo?: PetInfo;
+}
+
+interface PetInfo {
+ type: 'ZOMBIE';
+ active: boolean;
+ exp: number;
+ tier: 'COMMON' | 'UNCOMMON' | 'RARE' | 'EPIC' | 'LEGENDARY';
+ hideInfo: boolean;
+ candyUsed: number;
+}
+
+type Origin = 'SHOP_PURCHASE';
+
+const neuConstantsPath = path.join(repo, 'constants');
+const neuPetsPath = path.join(neuConstantsPath, 'pets.json');
+const neuPets = (await import(neuPetsPath, { assert: { type: 'json' } })) as PetsConstants;
+const neuPetNumsPath = path.join(neuConstantsPath, 'petnums.json');
+const neuPetNums = (await import(neuPetNumsPath, { assert: { type: 'json' } })) as PetNums;
+
+interface PetsConstants {
+ pet_rarity_offset: Record<string, number>;
+ pet_levels: number[];
+ custom_pet_leveling: Record<string, { type: number; pet_levels: number[]; max_level: number }>;
+ pet_types: Record<string, string>;
+}
+
+interface PetNums {
+ [key: string]: {
+ [key: string]: {
+ '1': {
+ otherNums: number[];
+ statNums: Record<string, number>;
+ };
+ '100': {
+ otherNums: number[];
+ statNums: Record<string, number>;
+ };
+ 'stats_levelling_curve'?: `${number};${number};${number}`;
+ };
+ };
+}
+
+class NeuItem {
+ public itemId: McItemId;
+ public displayName: string;
+ public nbtTag: NbtTag;
+ public internalName: SbItemId;
+ public lore: string[];
+
+ public constructor(raw: RawNeuItem) {
+ this.itemId = raw.itemid;
+ this.nbtTag = <NbtTag>parse(raw.nbttag);
+ this.displayName = raw.displayname;
+ this.internalName = raw.internalname;
+ this.lore = raw.lore;
+
+ this.petLoreReplacements();
+ }
+
+ private petLoreReplacements(level = -1) {
+ if (/.*?;[0-5]$/.test(this.internalName) && this.displayName.includes('LVL')) {
+ const maxLevel = neuPets?.custom_pet_leveling?.[this.internalName]?.max_level ?? 100;
+ this.displayName = this.displayName.replace('LVL', `1➡${maxLevel}`);
+
+ const nums = neuPetNums[this.internalName];
+ if (!nums) throw new Error(`Pet (${this.internalName}) has no pet nums.`);
+
+ const teir = ['COMMON', 'UNCOMMON', 'RARE', 'EPIC', 'LEGENDARY', 'MYTHIC'][+this.internalName.at(-1)!];
+ const petInfoTier = nums[teir];
+ if (!petInfoTier) throw new Error(`Pet (${this.internalName}) has no pet nums for ${teir} rarity.`);
+
+ const curve = petInfoTier?.stats_levelling_curve?.split(';');
+
+ const minStatsLevel = parseInt(curve?.[0] ?? '0');
+ const maxStatsLevel = parseInt(curve?.[0] ?? '100');
+
+ const lore = '';
+ }
+ }
+}
+
+function mcToAnsi(str: string) {
+ for (const format in formattingInfo) {
+ str = str.replaceAll(format, formattingInfo[format as keyof typeof formattingInfo].ansi);
+ }
+ return `${str}\u001b[0m`;
+}
diff --git a/src/tasks/cache/updateNeuItemCache.ts b/src/tasks/cache/updateNeuItemCache.ts
new file mode 100644
index 0000000..fff9e08
--- /dev/null
+++ b/src/tasks/cache/updateNeuItemCache.ts
@@ -0,0 +1,12 @@
+import { BushTask, Time } from '#lib';
+
+export default class UpdatePriceItemCache extends BushTask {
+ public constructor() {
+ super('updatePriceItemCache', {
+ delay: 1 * Time.Hour,
+ runOnStart: true
+ });
+ }
+
+ public async exec() {}
+}
diff --git a/tsconfig.json b/tsconfig.json
index eb23517..565346b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -35,7 +35,9 @@
".eslintrc.cjs",
"config/**/*.ts",
"tests/**/*.ts",
- "vite.config.ts"
+ "vite.config.ts",
+ "src/bot.ts",
+ "src/lib/common/util/Minecraft.ts"
],
"exclude": ["dist", "node_modules"]
}
diff --git a/vite.config.ts b/vite.config.ts
index 58e1d1c..5bb079e 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,7 +1,9 @@
-import { defineConfig } from 'vitest/config';
+// import { defineConfig } from 'vitest/config';
-export default defineConfig({
- test: {
- include: ['./tests/**/*.test.ts']
- }
-});
+// export default defineConfig({
+// test: {
+// include: ['./tests/**/*.test.ts']
+// }
+// });
+
+export {};
diff --git a/yarn.lock b/yarn.lock
index 311d506..63b0c6d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -126,6 +126,13 @@ __metadata:
languageName: node
linkType: hard
+"@ironm00n/nbt-ts@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "@ironm00n/nbt-ts@npm:1.4.0"
+ checksum: c518403b261668fe077b2e202acb6b9c597cdefc4453d5a13fee40dc90dadc1c8e651b47f7ac1e3036b317d7a1998428a69762552179815c57923175c538bbb1
+ languageName: node
+ linkType: hard
+
"@mapbox/node-pre-gyp@npm:^1.0.0":
version: 1.0.9
resolution: "@mapbox/node-pre-gyp@npm:1.0.9"
@@ -248,83 +255,83 @@ __metadata:
languageName: node
linkType: hard
-"@sentry/core@npm:7.5.1":
- version: 7.5.1
- resolution: "@sentry/core@npm:7.5.1"
+"@sentry/core@npm:7.7.0":
+ version: 7.7.0
+ resolution: "@sentry/core@npm:7.7.0"
dependencies:
- "@sentry/hub": 7.5.1
- "@sentry/types": 7.5.1
- "@sentry/utils": 7.5.1
+ "@sentry/hub": 7.7.0
+ "@sentry/types": 7.7.0
+ "@sentry/utils": 7.7.0
tslib: ^1.9.3
- checksum: 90613800c95bd17075b33ed8f76a2cf18a2fd03e9c1b244ee7a846f0e0b738b84a199bc7c085d62c8e9043913024169e45cb925a03b36cf77d064caf8e7e05fd
+ checksum: d3b9b5a92a9182bae7f39eef01502dd542d5be7365632ea9e26aa5247c90fd72e620856b20a393f4d3eeadb27f3b744bf25be93b1fdc4f7457a894e290c41fb0
languageName: node
linkType: hard
-"@sentry/hub@npm:7.5.1":
- version: 7.5.1
- resolution: "@sentry/hub@npm:7.5.1"
+"@sentry/hub@npm:7.7.0":
+ version: 7.7.0
+ resolution: "@sentry/hub@npm:7.7.0"
dependencies:
- "@sentry/types": 7.5.1
- "@sentry/utils": 7.5.1
+ "@sentry/types": 7.7.0
+ "@sentry/utils": 7.7.0
tslib: ^1.9.3
- checksum: 6b00f2ef5fb12f94d5844f3abef9a84ec79d4f19d8347e8e8b8c06719c2d84d06963bb94e09305deb76640231ca1ed34dd4b2c63ff447fdb8fa16c22ac022484
+ checksum: 0683ae6da7d961e6bbb90ad1fded3b33cd9fc76dc54a080902a83bd7769991294ce8017277f5e0d145fcf9f2ad53ae89d3b0c7619fa0586c8513f4b585f14f6d
languageName: node
linkType: hard
-"@sentry/integrations@npm:^7.5.1":
- version: 7.5.1
- resolution: "@sentry/integrations@npm:7.5.1"
+"@sentry/integrations@npm:^7.7.0":
+ version: 7.7.0
+ resolution: "@sentry/integrations@npm:7.7.0"
dependencies:
- "@sentry/types": 7.5.1
- "@sentry/utils": 7.5.1
+ "@sentry/types": 7.7.0
+ "@sentry/utils": 7.7.0
localforage: ^1.8.1
tslib: ^1.9.3
- checksum: 13b4cb068e09f5208fbb750aa569453956a7f5cc4093e4e3485a92bac74b0c77a056c39b51395a2bc307cbb02cbde3b989bb985aaa849d87eed6ee853bfd33b6
+ checksum: cd24f34301c55069e8487adc6d9b3c61e9f4f7284a01d4e9954324695f15b74806303cf53bd2e88db325289c057d2b33546986ed240b022f6d170cada94a0cab
languageName: node
linkType: hard
-"@sentry/node@npm:^7.5.1":
- version: 7.5.1
- resolution: "@sentry/node@npm:7.5.1"
+"@sentry/node@npm:^7.7.0":
+ version: 7.7.0
+ resolution: "@sentry/node@npm:7.7.0"
dependencies:
- "@sentry/core": 7.5.1
- "@sentry/hub": 7.5.1
- "@sentry/types": 7.5.1
- "@sentry/utils": 7.5.1
+ "@sentry/core": 7.7.0
+ "@sentry/hub": 7.7.0
+ "@sentry/types": 7.7.0
+ "@sentry/utils": 7.7.0
cookie: ^0.4.1
https-proxy-agent: ^5.0.0
lru_map: ^0.3.3
tslib: ^1.9.3
- checksum: a8caa39edb923952a551a9609afb933c1753e5e6cf1a8eccb9b1f4adb6567356d3077d3319b266e502a3183f1cf402847ade0967217522a408f9c1640a220f02
+ checksum: 554f4165f7cee16c70eca1e4e42d354330bcfcbf157bfbcdf4a17e89393f0c39f042cfaa07ba51ebb8391bbf2091d8dc6108a81650a60d39632d3b6a1edafe6f
languageName: node
linkType: hard
-"@sentry/tracing@npm:^7.5.1":
- version: 7.5.1
- resolution: "@sentry/tracing@npm:7.5.1"
+"@sentry/tracing@npm:^7.7.0":
+ version: 7.7.0
+ resolution: "@sentry/tracing@npm:7.7.0"
dependencies:
- "@sentry/hub": 7.5.1
- "@sentry/types": 7.5.1
- "@sentry/utils": 7.5.1
+ "@sentry/hub": 7.7.0
+ "@sentry/types": 7.7.0
+ "@sentry/utils": 7.7.0
tslib: ^1.9.3
- checksum: cf70120946a1d4a337e05b2035ab7a2b00755f638006250d003dbf6badf1fba066f0abfc19689b60d4e6143e99616f4ada0d564376aec2d48a5171c6b9c871c8
+ checksum: c3884c297e87284ab73f103338dfb2f8dc2d2fcf641981650ad72009f1d7a41292ded048a7283b57a66f730d8d7cb8932bb6ee64e8b512b33de08da8867a58fe
languageName: node
linkType: hard
-"@sentry/types@npm:7.5.1, @sentry/types@npm:^7.5.1":
- version: 7.5.1
- resolution: "@sentry/types@npm:7.5.1"
- checksum: 2ff669f0e6c6ea5020c117a15012ec55147033faebbc0708c1a772aabf9cf6e283d69556903a9213e96b188b0a5f7030ded7006ad8805b2a89a6442d36202b21
+"@sentry/types@npm:7.7.0, @sentry/types@npm:^7.7.0":
+ version: 7.7.0
+ resolution: "@sentry/types@npm:7.7.0"
+ checksum: 1f26c23617e9370cf32269ea5d5aa0f75fe86c34aede4fc07ae3bdae08803a788d628d0bba6f2e22c03d0430dcf63cc19453468ae086406448da07e13f36da70
languageName: node
linkType: hard
-"@sentry/utils@npm:7.5.1":
- version: 7.5.1
- resolution: "@sentry/utils@npm:7.5.1"
+"@sentry/utils@npm:7.7.0":
+ version: 7.7.0
+ resolution: "@sentry/utils@npm:7.7.0"
dependencies:
- "@sentry/types": 7.5.1
+ "@sentry/types": 7.7.0
tslib: ^1.9.3
- checksum: 567fdba09fdbfc62b0e50f5099d82b075f4e5ebd7dace67c4379a9f65c12e7191aad526fbc955ee681da757c8332807bda74a50880c4576c4c39d97c2c49e91d
+ checksum: 990224e0542015952a4f1fa83dd69c82a3a85894576457f10bc3c0c60620c675969424bdbfde9872a19a5db2b682dd1d51c67ec99f0c57acfc993e6f7c970aaf
languageName: node
linkType: hard
@@ -529,10 +536,10 @@ __metadata:
languageName: node
linkType: hard
-"@types/node@npm:^18.0.3":
- version: 18.0.3
- resolution: "@types/node@npm:18.0.3"
- checksum: 5dec59fbbc1186c808b53df1ca717dad034dbd6a901c75f5b052c845618b531b05f27217122c6254db99529a68618e4cfc534ae3dbf4e88754e9e572df80defa
+"@types/node@npm:^18.0.4":
+ version: 18.0.4
+ resolution: "@types/node@npm:18.0.4"
+ checksum: 981284fd57941f233f0e77038087c122f56e3c2b4fc4e090dfc7f0a93abfc526d5ccdd59eb3ef551d713245cf3943e37c7b957f12ba699209341a447c39fab59
languageName: node
linkType: hard
@@ -1122,20 +1129,21 @@ __metadata:
dependencies:
"@discordjs/builders": ^0.15.0
"@discordjs/rest": ^0.5.0
+ "@ironm00n/nbt-ts": ^1.4.0
"@notenoughupdates/discord.js-minesweeper": ^1.0.10
"@notenoughupdates/events-intercept": ^3.0.1
"@notenoughupdates/humanize-duration": ^4.0.1
"@notenoughupdates/simplify-number": ^1.0.1
"@notenoughupdates/wolfram-alpha-api": ^1.0.2
"@sapphire/snowflake": ^3.2.2
- "@sentry/integrations": ^7.5.1
- "@sentry/node": ^7.5.1
- "@sentry/tracing": ^7.5.1
- "@sentry/types": ^7.5.1
+ "@sentry/integrations": ^7.7.0
+ "@sentry/node": ^7.7.0
+ "@sentry/tracing": ^7.7.0
+ "@sentry/types": ^7.7.0
"@types/eslint": ^8.4.5
"@types/express": ^4.17.13
"@types/lodash": ^4.14.182
- "@types/node": ^18.0.3
+ "@types/node": ^18.0.4
"@types/numeral": ^2.0.2
"@types/pg": ^8.6.5
"@types/prettier": ^2.6.3
@@ -1161,18 +1169,18 @@ __metadata:
lodash: ^4.17.21
mathjs: ^10.6.4
nanoid: ^4.0.0
- node-fetch: ^3.2.6
+ node-fetch: ^3.2.8
numeral: ^2.0.6
pg: ^8.7.3
pg-hstore: ^2.3.4
prettier: ^2.7.1
pretty-bytes: ^6.0.0
rimraf: ^3.0.2
- sequelize: 6.21.2
+ sequelize: 6.21.3
tinycolor2: ^1.4.2
ts-essentials: ^9.2.0
typescript: ^4.7.4
- vitest: ^0.17.1
+ vitest: ^0.18.0
vm2: ^3.9.10
languageName: unknown
linkType: soft
@@ -3671,14 +3679,14 @@ __metadata:
languageName: node
linkType: hard
-"node-fetch@npm:^3.2.6":
- version: 3.2.6
- resolution: "node-fetch@npm:3.2.6"
+"node-fetch@npm:^3.2.8":
+ version: 3.2.8
+ resolution: "node-fetch@npm:3.2.8"
dependencies:
data-uri-to-buffer: ^4.0.0
fetch-blob: ^3.1.4
formdata-polyfill: ^4.0.10
- checksum: ece307ace3a3ff28638ccb0fa0545bb5c0cfd673a9d06fc314d937a73ae6a55917d5bacd7f080f9a9f1449ca20a5c01b1281d0e616acb20315e5ac315971da46
+ checksum: 2f7fc3e59fbede43a273e988d2f2a3dd68160618114e32ad537477db253808b65221f1dbfd666b8fb33ff07bf1de9d6448035b0f8ada5ef876c5afec93b27318
languageName: node
linkType: hard
@@ -4436,9 +4444,9 @@ __metadata:
languageName: node
linkType: hard
-"sequelize@npm:6.21.2":
- version: 6.21.2
- resolution: "sequelize@npm:6.21.2"
+"sequelize@npm:6.21.3":
+ version: 6.21.3
+ resolution: "sequelize@npm:6.21.3"
dependencies:
"@types/debug": ^4.1.7
"@types/validator": ^13.7.1
@@ -4473,7 +4481,7 @@ __metadata:
optional: true
tedious:
optional: true
- checksum: 5486ec15e80cf51e49d819c2495a05a17b5a0102866ca0af054dbc4a625d2dc6200e36189261e50234625fcf4da5cbc973eb9900591a5b9e9f63c67955196f56
+ checksum: 85a57cdde00edc5e1634585aacda874eeab9cc0d6d296e5ae90be3d861cba682bacde427009600d331fec82396520621a16a27d1958c689dd197d9d88051cf7e
languageName: node
linkType: hard
@@ -5052,9 +5060,9 @@ __metadata:
languageName: node
linkType: hard
-"vitest@npm:^0.17.1":
- version: 0.17.1
- resolution: "vitest@npm:0.17.1"
+"vitest@npm:^0.18.0":
+ version: 0.18.0
+ resolution: "vitest@npm:0.18.0"
dependencies:
"@types/chai": ^4.3.1
"@types/chai-subset": ^1.3.3
@@ -5084,7 +5092,7 @@ __metadata:
optional: true
bin:
vitest: vitest.mjs
- checksum: eae2d024d97a46ba08f3cc7e0703a330c92dc0a6f4c7a9bc20ec8a5129bf787d8ebabd14bf31ae810897c1813e29178af59f63ec8b24b5944cfa62e225cd207c
+ checksum: 20e76b0de9f02dd09a412b11e5898d1ec7c5c9f9287da40a79fde98f6bd100db6f777fb5f1370496a2c153277cc5eb6738e176435101332fce1c87a565e62d5f
languageName: node
linkType: hard