From 90dd079ef3bf510662a73848038ae18ae24202cc Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 14 Nov 2025 19:52:12 +0900 Subject: [PATCH 01/15] =?UTF-8?q?add:ci=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.json | 37 ++ .github/workflows/ci.yml | 40 ++ .gitignore | 3 +- .prettierignore | 6 + .prettierrc.json | 9 + package-lock.json | 903 ++++++++++++++++++++------------------- package.json | 6 +- 7 files changed, 568 insertions(+), 436 deletions(-) create mode 100644 .eslintrc.json create mode 100644 .github/workflows/ci.yml create mode 100644 .prettierignore create mode 100644 .prettierrc.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..8891758 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,37 @@ +{ + "env": { + "node": true, + "es2021": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "prettier" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2021, + "sourceType": "module", + "project": "./tsconfig.json" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_" + } + ], + "@typescript-eslint/no-non-null-assertion": "off", // issue #7解決後にwarnに変更予定 + "no-console": "off" + }, + "ignorePatterns": [ + "dist", + "node_modules", + "*.js" + ] +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..17e6276 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,40 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + ci: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [24.x] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Format check + run: npm run format:check + + - name: Lint check + run: npm run lint:check + + - name: Type check + run: npm run typecheck + + - name: Build + run: npm run build diff --git a/.gitignore b/.gitignore index 3ac6ce9..914a81e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ dist/ node_modules/ -.eslintrc.json .env -settings.json \ No newline at end of file +settings.json diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..332f284 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +node_modules +dist +*.log +.git +coverage +build diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..f059a42 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,9 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": false, + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "endOfLine": "lf" +} diff --git a/package-lock.json b/package-lock.json index 77b8bc8..6a7dc43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "discord.js": "^14.7.1", - "ts-node": "^10.9.1" + "discord.js": "^14.24.2", + "ts-node": "^10.9.2" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.50.0", @@ -28,7 +28,7 @@ "webpack-dev-server": "^4.11.1" }, "engines": { - "node": "18.x" + "node": "24.x" } }, "node_modules/@cspotcode/source-map-support": { @@ -43,65 +43,130 @@ } }, "node_modules/@discordjs/builders": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.1.tgz", - "integrity": "sha512-CCcLwn/8ANhlAbhlE18fcaN0hfXTen53/JiwZs1t9oE/Cqa9maA8ZRarkCIsXF4J7J/MYnd0J6IsxeKsq+f6mw==", - "dependencies": { - "@discordjs/formatters": "^0.3.0", - "@discordjs/util": "^0.2.0", - "@sapphire/shapeshift": "^3.8.1", - "discord-api-types": "^0.37.37", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.13.0.tgz", + "integrity": "sha512-COK0uU6ZaJI+LA67H/rp8IbEkYwlZf3mAoBI5wtPh5G5cbEQGNhVpzINg2f/6+q/YipnNIKy6fJDg6kMUKUw4Q==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/formatters": "^0.6.1", + "@discordjs/util": "^1.1.1", + "@sapphire/shapeshift": "^4.0.0", + "discord-api-types": "^0.38.31", "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.3", - "tslib": "^2.5.0" + "ts-mixer": "^6.0.4", + "tslib": "^2.6.3" }, "engines": { - "node": ">=16.9.0" + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" } }, "node_modules/@discordjs/collection": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.0.tgz", - "integrity": "sha512-suyVndkEAAWrGxyw/CPGdtXoRRU6AUNkibtnbJevQzpelkJh3Q1gQqWDpqf5i39CnAn5+LrN0YS+cULeEjq2Yw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "license": "Apache-2.0", "engines": { - "node": ">=16.9.0" + "node": ">=16.11.0" } }, "node_modules/@discordjs/formatters": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.0.tgz", - "integrity": "sha512-Fc4MomalbP8HMKEMor3qUiboAKDtR7PSBoPjwm7WYghVRwgJlj5WYvUsriLsxeKk8+Qq2oy+HJlGTUkGvX0YnA==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.1.tgz", + "integrity": "sha512-5cnX+tASiPCqCWtFcFslxBVUaCetB0thvM/JyavhbXInP1HJIEU+Qv/zMrnuwSsX3yWH2lVXNJZeDK3EiP4HHg==", + "license": "Apache-2.0", "dependencies": { - "discord-api-types": "^0.37.37" + "discord-api-types": "^0.38.1" }, "engines": { - "node": ">=16.9.0" + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" } }, "node_modules/@discordjs/rest": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.0.tgz", - "integrity": "sha512-r2HzmznRIo8IDGYBWqQfkEaGN1LrFfWQd3dSyC4tOpMU8nuVvFUEw6V/lwnG44jyOq+vgyDny2fxeUDMt9I4aQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.6.0.tgz", + "integrity": "sha512-RDYrhmpB7mTvmCKcpj+pc5k7POKszS4E2O9TYc+U+Y4iaCP+r910QdO43qmpOja8LRr1RJ0b3U+CqVsnPqzf4w==", + "license": "Apache-2.0", "dependencies": { - "@discordjs/collection": "^1.5.0", - "@discordjs/util": "^0.2.0", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.4.0", - "discord-api-types": "^0.37.37", - "file-type": "^18.2.1", - "tslib": "^2.5.0", - "undici": "^5.21.0" + "@discordjs/collection": "^2.1.1", + "@discordjs/util": "^1.1.1", + "@sapphire/async-queue": "^1.5.3", + "@sapphire/snowflake": "^3.5.3", + "@vladfrangu/async_event_emitter": "^2.4.6", + "discord-api-types": "^0.38.16", + "magic-bytes.js": "^1.10.0", + "tslib": "^2.6.3", + "undici": "6.21.3" }, "engines": { - "node": ">=16.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" } }, "node_modules/@discordjs/util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.2.0.tgz", - "integrity": "sha512-/8qNbebFzLWKOOg+UV+RB8itp4SmU5jw0tBUD3ifElW6rYNOj1Ku5JaSW7lLl/WgjjxF01l/1uQPCzkwr110vg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.1.tgz", + "integrity": "sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==", + "license": "Apache-2.0", "engines": { - "node": ">=16.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.3.tgz", + "integrity": "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^2.1.0", + "@discordjs/rest": "^2.5.1", + "@discordjs/util": "^1.1.0", + "@sapphire/async-queue": "^1.5.2", + "@types/ws": "^8.5.10", + "@vladfrangu/async_event_emitter": "^2.2.4", + "discord-api-types": "^0.38.1", + "tslib": "^2.6.2", + "ws": "^8.17.0" + }, + "engines": { + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" } }, "node_modules/@eslint-community/eslint-utils": { @@ -198,6 +263,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -220,6 +286,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, + "peer": true, "engines": { "node": ">=6.0.0" } @@ -229,6 +296,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -290,41 +358,38 @@ } }, "node_modules/@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.5.tgz", + "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==", + "license": "MIT", "engines": { "node": ">=v14.0.0", "npm": ">=7.0.0" } }, "node_modules/@sapphire/shapeshift": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.2.tgz", - "integrity": "sha512-NXpnJAsxN3/h9TqQPntOeVWZrpIuucqXI3IWF6tj2fWCoRLCuVK5wx7Dtg7pRrtkYfsMUbDqgKoX26vrC5iYfA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz", + "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "lodash": "^4.17.21" }, "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" + "node": ">=v16" } }, "node_modules/@sapphire/snowflake": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.2.tgz", - "integrity": "sha512-KJwlv5gkGjs1uFV7/xx81n3tqgBwBJvH94n1xDyH3q+JSmtsMeSleJffarEBfG2yAFeJiFA4BnGOK6FFPHc19g==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", + "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==", + "license": "MIT", "engines": { "node": ">=v14.0.0", "npm": ">=7.0.0" } }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -388,6 +453,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", "dev": true, + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -398,6 +464,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, + "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -407,7 +474,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/express": { "version": "4.17.17", @@ -462,8 +530,7 @@ "node_modules/@types/node": { "version": "18.15.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "peer": true + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -530,9 +597,10 @@ "dev": true }, "node_modules/@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -542,7 +610,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz", "integrity": "sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==", "dev": true, - "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.59.0", @@ -577,7 +644,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", "dev": true, - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "5.59.0", "@typescript-eslint/types": "5.59.0", @@ -727,11 +793,22 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.7.tgz", + "integrity": "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -741,25 +818,29 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -770,13 +851,15 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -789,6 +872,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -798,6 +882,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -806,13 +891,15 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -829,6 +916,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -842,6 +930,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -854,6 +943,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -868,6 +958,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -877,13 +968,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/accepts": { "version": "1.3.8", @@ -902,7 +995,6 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -915,6 +1007,7 @@ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, + "peer": true, "peerDependencies": { "acorn": "^8" } @@ -941,7 +1034,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -997,6 +1089,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "peer": true, "peerDependencies": { "ajv": "^6.9.1" } @@ -1303,17 +1396,6 @@ "semver": "^7.0.0" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -1363,7 +1445,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "peer": true }, "node_modules/chalk": { "version": "4.1.2", @@ -1425,6 +1508,7 @@ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, + "peer": true, "engines": { "node": ">=6.0" } @@ -1457,7 +1541,8 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/compressible": { "version": "2.0.18", @@ -1692,31 +1777,39 @@ } }, "node_modules/discord-api-types": { - "version": "0.37.39", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.39.tgz", - "integrity": "sha512-hkhQsQyzsTJITp311WXvHZh9j4RAMfIk2hPmsWeOTN50QTpg6zqmJNfel9D/8lYNvsU01wzw9281Yke8NhYyHg==" + "version": "0.38.33", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.33.tgz", + "integrity": "sha512-oau1V7OzrNX8yNi+DfQpoLZCNCv7cTFmvPKwHfMrA/tewsO6iQKrMTzA7pa3iBSj0fED6NlklJ/1B/cC1kI08Q==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] }, "node_modules/discord.js": { - "version": "14.9.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.9.0.tgz", - "integrity": "sha512-ygGms5xP4hG+QrrY9k7d/OYCzMltSMtdl/2Snzq/nLCiZo+Sna91Ulv9l0+B5Jd/Czcq37B7wJAnmja7GOa+bg==", - "dependencies": { - "@discordjs/builders": "^1.6.0", - "@discordjs/collection": "^1.5.0", - "@discordjs/formatters": "^0.3.0", - "@discordjs/rest": "^1.7.0", - "@discordjs/util": "^0.2.0", - "@sapphire/snowflake": "^3.4.0", - "@types/ws": "^8.5.4", - "discord-api-types": "^0.37.37", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.5.0", - "undici": "^5.21.0", - "ws": "^8.13.0" + "version": "14.24.2", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.24.2.tgz", + "integrity": "sha512-VMEDbmguRdX/EeMaTsf9Mb0IQA90WdYF2cn4QDfslQFXgQ6LFtmlPn0FSotnS0kcFbFp+JBSIxtnF+bnAHG/hQ==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/builders": "^1.13.0", + "@discordjs/collection": "1.5.3", + "@discordjs/formatters": "^0.6.1", + "@discordjs/rest": "^2.6.0", + "@discordjs/util": "^1.1.1", + "@discordjs/ws": "^1.2.3", + "@sapphire/snowflake": "3.5.3", + "discord-api-types": "^0.38.31", + "fast-deep-equal": "3.1.3", + "lodash.snakecase": "4.1.1", + "magic-bytes.js": "^1.10.0", + "tslib": "^2.6.3", + "undici": "6.21.3" + }, + "engines": { + "node": ">=18" }, - "engines": { - "node": ">=16.9.0" + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" } }, "node_modules/dns-equal": { @@ -1768,7 +1861,8 @@ "version": "1.4.367", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", "integrity": "sha512-mNuDxb+HpLhPGUKrg0hSxbTjHWw8EziwkwlJNkFUj3W60ypigLDRVz04vU+VRsJPi8Gub+FDhYUpuTm9xiEwRQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1844,7 +1938,8 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/es-set-tostringtag": { "version": "2.0.1", @@ -1891,6 +1986,7 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "peer": true, "engines": { "node": ">=6" } @@ -1918,7 +2014,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", "dev": true, - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", @@ -2121,7 +2216,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, - "peer": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -2181,7 +2275,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", "dev": true, - "peer": true, "dependencies": { "builtins": "^5.0.1", "eslint-plugin-es": "^4.1.0", @@ -2207,7 +2300,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, - "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -2389,6 +2481,7 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "peer": true, "engines": { "node": ">=0.8.x" } @@ -2557,22 +2650,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-type": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.2.1.tgz", - "integrity": "sha512-Yw5MtnMv7vgD2/6Bjmmuegc8bQEVA9GmAyaR18bMYWKqsWDG9wgYZ1j4I6gNMF5Y5JBDcUcjRQqNQx7Y8uotcg==", - "dependencies": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0", - "token-types": "^5.0.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -2837,7 +2914,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/globals": { "version": "13.20.0", @@ -3135,25 +3213,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -3201,7 +3260,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/internal-slot": { "version": "1.0.5", @@ -3542,6 +3602,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -3556,6 +3617,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3592,7 +3654,8 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -3646,6 +3709,7 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "peer": true, "engines": { "node": ">=6.11.5" } @@ -3668,7 +3732,8 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -3693,6 +3758,12 @@ "node": ">=10" } }, + "node_modules/magic-bytes.js": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz", + "integrity": "sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==", + "license": "MIT" + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -3887,7 +3958,8 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/node-forge": { "version": "1.3.1", @@ -3902,7 +3974,8 @@ "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/normalize-path": { "version": "3.0.0", @@ -4175,18 +4248,6 @@ "node": ">=8" } }, - "node_modules/peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -4306,6 +4367,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -4347,6 +4409,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4356,21 +4419,6 @@ "node": ">= 6" } }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -4514,6 +4562,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -4554,6 +4603,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", "dev": true, + "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -4650,6 +4700,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, + "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -4881,18 +4932,11 @@ "node": ">= 0.8" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -4984,22 +5028,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -5038,6 +5066,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz", "integrity": "sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -5056,6 +5085,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", @@ -5090,6 +5120,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, + "peer": true, "engines": { "node": ">=6.0.0" } @@ -5098,13 +5129,15 @@ "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -5143,22 +5176,6 @@ "node": ">=0.6" } }, - "node_modules/token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -5188,14 +5205,16 @@ } }, "node_modules/ts-mixer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", - "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", + "license": "MIT" }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -5314,9 +5333,10 @@ } }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", @@ -5394,7 +5414,6 @@ "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5419,14 +5438,12 @@ } }, "node_modules/undici": { - "version": "5.21.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.2.tgz", - "integrity": "sha512-f6pTQ9RF4DQtwoWSaC42P/NKlUjvezVvd9r155ohqkwFNRyBKM3f3pcty3ouusefNRyM25XhIQEbeQ46sZDJfQ==", - "dependencies": { - "busboy": "^1.6.0" - }, + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "license": "MIT", "engines": { - "node": ">=12.18" + "node": ">=18.17" } }, "node_modules/unpipe": { @@ -5457,6 +5474,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -5480,7 +5498,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", @@ -5519,6 +5538,7 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, + "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -5612,7 +5632,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -5725,7 +5744,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -5779,6 +5797,7 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "peer": true, "engines": { "node": ">=10.13.0" } @@ -5873,9 +5892,10 @@ "dev": true }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -5938,51 +5958,82 @@ } }, "@discordjs/builders": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.1.tgz", - "integrity": "sha512-CCcLwn/8ANhlAbhlE18fcaN0hfXTen53/JiwZs1t9oE/Cqa9maA8ZRarkCIsXF4J7J/MYnd0J6IsxeKsq+f6mw==", - "requires": { - "@discordjs/formatters": "^0.3.0", - "@discordjs/util": "^0.2.0", - "@sapphire/shapeshift": "^3.8.1", - "discord-api-types": "^0.37.37", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.13.0.tgz", + "integrity": "sha512-COK0uU6ZaJI+LA67H/rp8IbEkYwlZf3mAoBI5wtPh5G5cbEQGNhVpzINg2f/6+q/YipnNIKy6fJDg6kMUKUw4Q==", + "requires": { + "@discordjs/formatters": "^0.6.1", + "@discordjs/util": "^1.1.1", + "@sapphire/shapeshift": "^4.0.0", + "discord-api-types": "^0.38.31", "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.3", - "tslib": "^2.5.0" + "ts-mixer": "^6.0.4", + "tslib": "^2.6.3" } }, "@discordjs/collection": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.0.tgz", - "integrity": "sha512-suyVndkEAAWrGxyw/CPGdtXoRRU6AUNkibtnbJevQzpelkJh3Q1gQqWDpqf5i39CnAn5+LrN0YS+cULeEjq2Yw==" + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==" }, "@discordjs/formatters": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.0.tgz", - "integrity": "sha512-Fc4MomalbP8HMKEMor3qUiboAKDtR7PSBoPjwm7WYghVRwgJlj5WYvUsriLsxeKk8+Qq2oy+HJlGTUkGvX0YnA==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.1.tgz", + "integrity": "sha512-5cnX+tASiPCqCWtFcFslxBVUaCetB0thvM/JyavhbXInP1HJIEU+Qv/zMrnuwSsX3yWH2lVXNJZeDK3EiP4HHg==", "requires": { - "discord-api-types": "^0.37.37" + "discord-api-types": "^0.38.1" } }, "@discordjs/rest": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.0.tgz", - "integrity": "sha512-r2HzmznRIo8IDGYBWqQfkEaGN1LrFfWQd3dSyC4tOpMU8nuVvFUEw6V/lwnG44jyOq+vgyDny2fxeUDMt9I4aQ==", - "requires": { - "@discordjs/collection": "^1.5.0", - "@discordjs/util": "^0.2.0", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.4.0", - "discord-api-types": "^0.37.37", - "file-type": "^18.2.1", - "tslib": "^2.5.0", - "undici": "^5.21.0" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.6.0.tgz", + "integrity": "sha512-RDYrhmpB7mTvmCKcpj+pc5k7POKszS4E2O9TYc+U+Y4iaCP+r910QdO43qmpOja8LRr1RJ0b3U+CqVsnPqzf4w==", + "requires": { + "@discordjs/collection": "^2.1.1", + "@discordjs/util": "^1.1.1", + "@sapphire/async-queue": "^1.5.3", + "@sapphire/snowflake": "^3.5.3", + "@vladfrangu/async_event_emitter": "^2.4.6", + "discord-api-types": "^0.38.16", + "magic-bytes.js": "^1.10.0", + "tslib": "^2.6.3", + "undici": "6.21.3" + }, + "dependencies": { + "@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==" + } } }, "@discordjs/util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.2.0.tgz", - "integrity": "sha512-/8qNbebFzLWKOOg+UV+RB8itp4SmU5jw0tBUD3ifElW6rYNOj1Ku5JaSW7lLl/WgjjxF01l/1uQPCzkwr110vg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.1.tgz", + "integrity": "sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==" + }, + "@discordjs/ws": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.3.tgz", + "integrity": "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw==", + "requires": { + "@discordjs/collection": "^2.1.0", + "@discordjs/rest": "^2.5.1", + "@discordjs/util": "^1.1.0", + "@sapphire/async-queue": "^1.5.2", + "@types/ws": "^8.5.10", + "@vladfrangu/async_event_emitter": "^2.2.4", + "discord-api-types": "^0.38.1", + "tslib": "^2.6.2", + "ws": "^8.17.0" + }, + "dependencies": { + "@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==" + } + } }, "@eslint-community/eslint-utils": { "version": "4.4.0", @@ -6050,6 +6101,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, + "peer": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -6065,13 +6117,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "dev": true, + "peer": true }, "@jridgewell/source-map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", "dev": true, + "peer": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -6124,28 +6178,23 @@ } }, "@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.5.tgz", + "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==" }, "@sapphire/shapeshift": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.2.tgz", - "integrity": "sha512-NXpnJAsxN3/h9TqQPntOeVWZrpIuucqXI3IWF6tj2fWCoRLCuVK5wx7Dtg7pRrtkYfsMUbDqgKoX26vrC5iYfA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz", + "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", "requires": { "fast-deep-equal": "^3.1.3", "lodash": "^4.17.21" } }, "@sapphire/snowflake": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.2.tgz", - "integrity": "sha512-KJwlv5gkGjs1uFV7/xx81n3tqgBwBJvH94n1xDyH3q+JSmtsMeSleJffarEBfG2yAFeJiFA4BnGOK6FFPHc19g==" - }, - "@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", + "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==" }, "@tsconfig/node10": { "version": "1.0.9", @@ -6210,6 +6259,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", "dev": true, + "peer": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" @@ -6220,6 +6270,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, + "peer": true, "requires": { "@types/eslint": "*", "@types/estree": "*" @@ -6229,7 +6280,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true + "dev": true, + "peer": true }, "@types/express": { "version": "4.17.17", @@ -6284,8 +6336,7 @@ "@types/node": { "version": "18.15.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "peer": true + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" }, "@types/qs": { "version": "6.9.7", @@ -6352,9 +6403,9 @@ "dev": true }, "@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "requires": { "@types/node": "*" } @@ -6364,7 +6415,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz", "integrity": "sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==", "dev": true, - "peer": true, "requires": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.59.0", @@ -6383,7 +6433,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", "dev": true, - "peer": true, "requires": { "@typescript-eslint/scope-manager": "5.59.0", "@typescript-eslint/types": "5.59.0", @@ -6460,11 +6509,17 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@vladfrangu/async_event_emitter": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.7.tgz", + "integrity": "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g==" + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -6474,25 +6529,29 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true + "dev": true, + "peer": true }, "@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true + "dev": true, + "peer": true }, "@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true + "dev": true, + "peer": true }, "@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -6503,13 +6562,15 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true + "dev": true, + "peer": true }, "@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -6522,6 +6583,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, + "peer": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -6531,6 +6593,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, + "peer": true, "requires": { "@xtuc/long": "4.2.2" } @@ -6539,13 +6602,15 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true + "dev": true, + "peer": true }, "@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -6562,6 +6627,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -6575,6 +6641,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -6587,6 +6654,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -6601,6 +6669,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -6610,13 +6679,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "peer": true }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "peer": true }, "accepts": { "version": "1.3.8", @@ -6631,14 +6702,14 @@ "acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "peer": true + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" }, "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, + "peer": true, "requires": {} }, "acorn-jsx": { @@ -6658,7 +6729,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -6700,6 +6770,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "peer": true, "requires": {} }, "ansi-html-community": { @@ -6929,14 +7000,6 @@ "semver": "^7.0.0" } }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "requires": { - "streamsearch": "^1.1.0" - } - }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -6963,7 +7026,8 @@ "version": "1.0.30001480", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==", - "dev": true + "dev": true, + "peer": true }, "chalk": { "version": "4.1.2", @@ -7006,7 +7070,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true + "dev": true, + "peer": true }, "color-convert": { "version": "2.0.1", @@ -7033,7 +7098,8 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "peer": true }, "compressible": { "version": "2.0.18", @@ -7216,28 +7282,28 @@ } }, "discord-api-types": { - "version": "0.37.39", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.39.tgz", - "integrity": "sha512-hkhQsQyzsTJITp311WXvHZh9j4RAMfIk2hPmsWeOTN50QTpg6zqmJNfel9D/8lYNvsU01wzw9281Yke8NhYyHg==" + "version": "0.38.33", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.33.tgz", + "integrity": "sha512-oau1V7OzrNX8yNi+DfQpoLZCNCv7cTFmvPKwHfMrA/tewsO6iQKrMTzA7pa3iBSj0fED6NlklJ/1B/cC1kI08Q==" }, "discord.js": { - "version": "14.9.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.9.0.tgz", - "integrity": "sha512-ygGms5xP4hG+QrrY9k7d/OYCzMltSMtdl/2Snzq/nLCiZo+Sna91Ulv9l0+B5Jd/Czcq37B7wJAnmja7GOa+bg==", - "requires": { - "@discordjs/builders": "^1.6.0", - "@discordjs/collection": "^1.5.0", - "@discordjs/formatters": "^0.3.0", - "@discordjs/rest": "^1.7.0", - "@discordjs/util": "^0.2.0", - "@sapphire/snowflake": "^3.4.0", - "@types/ws": "^8.5.4", - "discord-api-types": "^0.37.37", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.5.0", - "undici": "^5.21.0", - "ws": "^8.13.0" + "version": "14.24.2", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.24.2.tgz", + "integrity": "sha512-VMEDbmguRdX/EeMaTsf9Mb0IQA90WdYF2cn4QDfslQFXgQ6LFtmlPn0FSotnS0kcFbFp+JBSIxtnF+bnAHG/hQ==", + "requires": { + "@discordjs/builders": "^1.13.0", + "@discordjs/collection": "1.5.3", + "@discordjs/formatters": "^0.6.1", + "@discordjs/rest": "^2.6.0", + "@discordjs/util": "^1.1.1", + "@discordjs/ws": "^1.2.3", + "@sapphire/snowflake": "3.5.3", + "discord-api-types": "^0.38.31", + "fast-deep-equal": "3.1.3", + "lodash.snakecase": "4.1.1", + "magic-bytes.js": "^1.10.0", + "tslib": "^2.6.3", + "undici": "6.21.3" } }, "dns-equal": { @@ -7283,7 +7349,8 @@ "version": "1.4.367", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", "integrity": "sha512-mNuDxb+HpLhPGUKrg0hSxbTjHWw8EziwkwlJNkFUj3W60ypigLDRVz04vU+VRsJPi8Gub+FDhYUpuTm9xiEwRQ==", - "dev": true + "dev": true, + "peer": true }, "encodeurl": { "version": "1.0.2", @@ -7347,7 +7414,8 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", - "dev": true + "dev": true, + "peer": true }, "es-set-tostringtag": { "version": "2.0.1", @@ -7384,7 +7452,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "dev": true, + "peer": true }, "escape-html": { "version": "1.0.3", @@ -7403,7 +7472,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", "dev": true, - "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", @@ -7563,7 +7631,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, - "peer": true, "requires": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -7613,7 +7680,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", "dev": true, - "peer": true, "requires": { "builtins": "^5.0.1", "eslint-plugin-es": "^4.1.0", @@ -7630,7 +7696,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, - "peer": true, "requires": {} }, "eslint-scope": { @@ -7739,7 +7804,8 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "dev": true, + "peer": true }, "execa": { "version": "5.1.1", @@ -7888,16 +7954,6 @@ "flat-cache": "^3.0.4" } }, - "file-type": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.2.1.tgz", - "integrity": "sha512-Yw5MtnMv7vgD2/6Bjmmuegc8bQEVA9GmAyaR18bMYWKqsWDG9wgYZ1j4I6gNMF5Y5JBDcUcjRQqNQx7Y8uotcg==", - "requires": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0", - "token-types": "^5.0.1" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -8089,7 +8145,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "peer": true }, "globals": { "version": "13.20.0", @@ -8315,11 +8372,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -8355,7 +8407,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "internal-slot": { "version": "1.0.5", @@ -8582,6 +8635,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "peer": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -8593,6 +8647,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -8618,7 +8673,8 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "peer": true }, "json-schema-traverse": { "version": "0.4.1", @@ -8665,7 +8721,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true + "dev": true, + "peer": true }, "locate-path": { "version": "6.0.0", @@ -8701,6 +8758,11 @@ "yallist": "^4.0.0" } }, + "magic-bytes.js": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz", + "integrity": "sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==" + }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -8847,7 +8909,8 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "peer": true }, "node-forge": { "version": "1.3.1", @@ -8859,7 +8922,8 @@ "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "dev": true, + "peer": true }, "normalize-path": { "version": "3.0.0", @@ -9054,11 +9118,6 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==" - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -9133,6 +9192,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "peer": true, "requires": { "safe-buffer": "^5.1.0" } @@ -9167,20 +9227,13 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, - "readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "requires": { - "readable-stream": "^3.6.0" - } - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -9269,7 +9322,8 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "safe-regex-test": { "version": "1.0.0", @@ -9293,6 +9347,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", "dev": true, + "peer": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -9374,6 +9429,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, + "peer": true, "requires": { "randombytes": "^2.1.0" } @@ -9568,15 +9624,11 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -9641,15 +9693,6 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", - "requires": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9676,6 +9719,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz", "integrity": "sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==", "dev": true, + "peer": true, "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -9688,6 +9732,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", "dev": true, + "peer": true, "requires": { "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", @@ -9700,19 +9745,22 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "dev": true, + "peer": true }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "dev": true, + "peer": true }, "@jridgewell/trace-mapping": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, + "peer": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -9747,15 +9795,6 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, - "token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", - "requires": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - } - }, "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -9775,14 +9814,14 @@ } }, "ts-mixer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", - "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" }, "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -9861,9 +9900,9 @@ } }, "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "tsutils": { "version": "3.21.0", @@ -9921,8 +9960,7 @@ "typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "peer": true + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, "unbox-primitive": { "version": "1.0.2", @@ -9937,12 +9975,9 @@ } }, "undici": { - "version": "5.21.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.2.tgz", - "integrity": "sha512-f6pTQ9RF4DQtwoWSaC42P/NKlUjvezVvd9r155ohqkwFNRyBKM3f3pcty3ouusefNRyM25XhIQEbeQ46sZDJfQ==", - "requires": { - "busboy": "^1.6.0" - } + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==" }, "unpipe": { "version": "1.0.0", @@ -9955,6 +9990,7 @@ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, + "peer": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -9972,7 +10008,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "utils-merge": { "version": "1.0.1", @@ -10002,6 +10039,7 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, + "peer": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -10067,7 +10105,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -10147,7 +10184,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -10188,7 +10224,8 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true + "dev": true, + "peer": true }, "websocket-driver": { "version": "0.7.4", @@ -10256,9 +10293,9 @@ "dev": true }, "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "requires": {} }, "xtend": { diff --git a/package.json b/package.json index fe0c1e1..d63df5e 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,11 @@ "test": "echo \"Error: no test specified\" && exit 1", "build": "tsc", "start": "node dist/main.js", - "format": "prettier --write 'src'" + "format": "prettier --write \"src/**/*.ts\"", + "format:check": "prettier --check \"src/**/*.ts\"", + "lint": "eslint \"src/**/*.ts\" --fix", + "lint:check": "eslint \"src/**/*.ts\"", + "typecheck": "tsc --noEmit" }, "engines": { "node": "24.x" From 00f117eb211dbb956b88917881d4e0b2143c91c2 Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 14 Nov 2025 19:52:30 +0900 Subject: [PATCH 02/15] =?UTF-8?q?fmt:=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=81=AE=E5=AE=9F=E6=96=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config.ts | 14 ++++--- src/discord/commands.ts | 30 ++++++++------- src/discord/discordUI.ts | 12 +++--- src/handlers/buttonHandlers.ts | 28 +++++++++----- src/handlers/commandHandlers.ts | 65 +++++++++++++++++++++++++-------- src/handlers/handlerUtils.ts | 10 +++-- src/main.ts | 11 +++--- src/services/reminderService.ts | 54 +++++++++++++++++++-------- src/services/scheduledCheck.ts | 53 ++++++++++++++++++--------- src/utils.ts | 8 ++-- 10 files changed, 189 insertions(+), 96 deletions(-) diff --git a/src/config.ts b/src/config.ts index 928fa6d..138aafd 100644 --- a/src/config.ts +++ b/src/config.ts @@ -23,8 +23,10 @@ try { } catch (err) { console.error( "設定ファイル settings.json の読み込みまたはパースに失敗しました。\n" + - "エラー内容: " + err + "\n" + - "settings.json が存在しない場合は settings.json.sample をコピーして作成してください。" + "エラー内容: " + + err + + "\n" + + "settings.json が存在しない場合は settings.json.sample をコピーして作成してください。" ); process.exit(1); } @@ -41,16 +43,16 @@ export const modeConsole = string2boolean(settings.ModeConsole); export const config = { // 鍵の返却リマインダー時間(分)、デフォルトは60分 reminderTimeMinutes: settings.ReminderTimeMinutes || 60, - + // 定時チェックの時刻(時)、デフォルトは20時 checkHour: settings.checkHour || 20, - + // 定時チェックの時刻(分)、デフォルトは0分 checkMinute: settings.checkMinute || 0, - + // リマインダー機能のON/OFF(初期状態はON) isReminderEnabled: true, - + // 定時チェック機能のON/OFF(初期状態はON) isScheduledCheckEnabled: true, }; diff --git a/src/discord/commands.ts b/src/discord/commands.ts index b032236..5495189 100644 --- a/src/discord/commands.ts +++ b/src/discord/commands.ts @@ -8,8 +8,9 @@ export const commands = [ new SlashCommandBuilder() .setName("borrow") .setDescription("鍵を借りる(オプション:リマインダー開始時間を分で指定)") - .addIntegerOption(option => - option.setName("delay-minutes") + .addIntegerOption((option) => + option + .setName("delay-minutes") .setDescription("指定分後にリマインダー開始(指定なしはデフォルト)") .setRequired(false) .setMinValue(0) @@ -26,8 +27,9 @@ export const commands = [ new SlashCommandBuilder() .setName("reminder-time") .setDescription("リマインダー送信時間を設定(分)") - .addIntegerOption(option => - option.setName("minutes") + .addIntegerOption((option) => + option + .setName("minutes") .setDescription("リマインダー送信までの時間(分)") .setRequired(true) .setMinValue(1) @@ -37,15 +39,17 @@ export const commands = [ new SlashCommandBuilder() .setName("check-time") .setDescription("定時チェックの時刻を設定") - .addIntegerOption(option => - option.setName("hour") + .addIntegerOption((option) => + option + .setName("hour") .setDescription("時(0-23)") .setRequired(true) .setMinValue(0) .setMaxValue(23) ) - .addIntegerOption(option => - option.setName("minute") + .addIntegerOption((option) => + option + .setName("minute") .setDescription("分(0-59)") .setRequired(true) .setMinValue(0) @@ -59,9 +63,7 @@ export const commands = [ new SlashCommandBuilder() .setName("owner") .setDescription("鍵の持ち主を変更") - .addUserOption(option => - option.setName("user") - .setDescription("新しい持ち主") - .setRequired(true) - ) -].map(command => command.toJSON()); + .addUserOption((option) => + option.setName("user").setDescription("新しい持ち主").setRequired(true) + ), +].map((command) => command.toJSON()); diff --git a/src/discord/discordUI.ts b/src/discord/discordUI.ts index 2832214..3d36e16 100644 --- a/src/discord/discordUI.ts +++ b/src/discord/discordUI.ts @@ -1,7 +1,12 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js"; import { Key, OperKey, Presence } from "../types"; import { modeConsole } from "../config"; -import { borrowKey, openKey, closeKey, returnKey } from "../services/keyOperations"; +import { + borrowKey, + openKey, + closeKey, + returnKey, +} from "../services/keyOperations"; // ボタンを定義 // 「借りる」ボタン - 緑色(成功)スタイル @@ -41,10 +46,7 @@ export const mapLabel: Map = new Map([ // 各状態で表示すべきボタンを管理 export const mapButtons: Map> = new Map([ // 返却済み状態: 「借りる」ボタンのみ表示 - [ - "RETURN", - new ActionRowBuilder().addComponents(borrowButton), - ], + ["RETURN", new ActionRowBuilder().addComponents(borrowButton)], // 借りた状態: 操作卓モードでない場合は「開ける」と「返す」、操作卓モードの場合は「返す」のみ [ "BORROW", diff --git a/src/handlers/buttonHandlers.ts b/src/handlers/buttonHandlers.ts index 21f8c35..2a4a51a 100644 --- a/src/handlers/buttonHandlers.ts +++ b/src/handlers/buttonHandlers.ts @@ -7,11 +7,17 @@ import { ButtonInteraction, Colors, EmbedBuilder } from "discord.js"; import { Key } from "../types"; import { isKey, minutesToMs } from "../utils"; import { getUserInfo } from "./handlerUtils"; -import { mapButtons, mapLabel, mapOpers, mapPresence, borrowButton } from "../discord/discordUI"; +import { + mapButtons, + mapLabel, + mapOpers, + mapPresence, + borrowButton, +} from "../discord/discordUI"; import { sendReminderMessage, clearReminderTimer, - setBorrowerInfo + setBorrowerInfo, } from "../services/reminderService"; import { config } from "../config"; import { client } from "../discord/client"; @@ -68,10 +74,10 @@ export const handleButtonInteraction = async ( // ボットのステータスを更新 interaction.client.user?.setPresence(presence); - + // ユーザー情報を取得 const { username, userIconUrl } = getUserInfo(interaction); - + // 鍵操作の結果を表示する埋め込みメッセージを作成 const embed = new EmbedBuilder() .setColor(Colors.Green) @@ -85,13 +91,17 @@ export const handleButtonInteraction = async ( embed.addFields({ name: "⏰ リマインダー設定", value: `リマインダーが有効です\n・間隔: ${config.reminderTimeMinutes}分ごと\n・定時チェック: ${config.checkHour}時${config.checkMinute}分`, - inline: false + inline: false, }); } else { embed.addFields({ name: "⏰ リマインダー設定", - value: `リマインダーは無効です\n・定時チェック: ${config.isScheduledCheckEnabled ? `${config.checkHour}時${config.checkMinute}分` : "無効"}`, - inline: false + value: `リマインダーは無効です\n・定時チェック: ${ + config.isScheduledCheckEnabled + ? `${config.checkHour}時${config.checkMinute}分` + : "無効" + }`, + inline: false, }); } } @@ -157,9 +167,7 @@ export const handleButtonInteraction = async ( borrowedAt: Date.now(), reminderCount: 0, }); - console.log( - `${username}が鍵を借りました。リマインダー機能はOFFです。` - ); + console.log(`${username}が鍵を借りました。リマインダー機能はOFFです。`); } } diff --git a/src/handlers/commandHandlers.ts b/src/handlers/commandHandlers.ts index b171a46..edea98d 100644 --- a/src/handlers/commandHandlers.ts +++ b/src/handlers/commandHandlers.ts @@ -11,14 +11,14 @@ import { setReminderTimeMinutes, setCheckTime, toggleReminderEnabled, - toggleScheduledCheckEnabled + toggleScheduledCheckEnabled, } from "../config"; import { sendReminderMessage, clearReminderTimer, rescheduleReminderTimer, borrowerInfo, - setBorrowerInfo + setBorrowerInfo, } from "../services/reminderService"; import { schedule20OClockCheck } from "../services/scheduledCheck"; import { client } from "../discord/client"; @@ -63,13 +63,17 @@ export const handleBorrowCommand = async ( embed.addFields({ name: "⏰ リマインダー設定", value: `リマインダーが有効です\n・間隔: ${config.reminderTimeMinutes}分ごと\n・定時チェック: ${config.checkHour}時${config.checkMinute}分`, - inline: false + inline: false, }); } else { embed.addFields({ name: "⏰ リマインダー設定", - value: `リマインダーは無効です\n・定時チェック: ${config.isScheduledCheckEnabled ? `${config.checkHour}時${config.checkMinute}分` : "無効"}`, - inline: false + value: `リマインダーは無効です\n・定時チェック: ${ + config.isScheduledCheckEnabled + ? `${config.checkHour}時${config.checkMinute}分` + : "無効" + }`, + inline: false, }); } @@ -107,7 +111,9 @@ export const handleBorrowCommand = async ( }); console.log( - `${username}が鍵を借りました。${delayMinutes ?? config.reminderTimeMinutes}分後にリマインダーを送信します。` + `${username}が鍵を借りました。${ + delayMinutes ?? config.reminderTimeMinutes + }分後にリマインダーを送信します。` ); } else { // リマインダーOFFの場合でも借りたユーザー情報は保存 @@ -129,7 +135,10 @@ export const handleBorrowCommand = async ( } return newStatus; - } else if (borrowerInfo && (keyStatus === "BORROW" || keyStatus === "OPEN" || keyStatus === "CLOSE")) { + } else if ( + borrowerInfo && + (keyStatus === "BORROW" || keyStatus === "OPEN" || keyStatus === "CLOSE") + ) { // 既に借りている状態でコマンド実行 → リマインダー開始時間を更新 const delayMs = (delayMinutes ?? config.reminderTimeMinutes) * 60 * 1000; @@ -157,12 +166,16 @@ export const handleBorrowCommand = async ( }); await interaction.reply({ - content: `リマインダー開始時間を${delayMinutes ?? config.reminderTimeMinutes}分後に設定しました。`, + content: `リマインダー開始時間を${ + delayMinutes ?? config.reminderTimeMinutes + }分後に設定しました。`, components: [getKeyButtonsForCommand(keyStatus)], }); console.log( - `リマインダー開始時間を${delayMinutes ?? config.reminderTimeMinutes}分後に更新しました。` + `リマインダー開始時間を${ + delayMinutes ?? config.reminderTimeMinutes + }分後に更新しました。` ); return keyStatus; @@ -258,7 +271,9 @@ export const handleCheckTimeCommand = async ( content: `定時チェック時刻を${hour}時${minute}分に設定しました。`, components: [getKeyButtonsForCommand(keyStatus)], }); - console.log(`定時チェック時刻: ${hour}時${minute}分に変更し、スケジュールを再設定しました。`); + console.log( + `定時チェック時刻: ${hour}時${minute}分に変更し、スケジュールを再設定しました。` + ); } }; @@ -274,10 +289,26 @@ export const handleStatusCommand = async ( .setColor(Colors.Blue) .setTitle("⚙️ アラーム設定状況") .addFields( - { name: "リマインダー機能", value: config.isReminderEnabled ? "✅ ON" : "❌ OFF", inline: true }, - { name: "定時チェック機能", value: config.isScheduledCheckEnabled ? "✅ ON" : "❌ OFF", inline: true }, - { name: "リマインダー時間", value: `${config.reminderTimeMinutes}分`, inline: true }, - { name: "定時チェック時刻", value: `${config.checkHour}時${config.checkMinute}分`, inline: true } + { + name: "リマインダー機能", + value: config.isReminderEnabled ? "✅ ON" : "❌ OFF", + inline: true, + }, + { + name: "定時チェック機能", + value: config.isScheduledCheckEnabled ? "✅ ON" : "❌ OFF", + inline: true, + }, + { + name: "リマインダー時間", + value: `${config.reminderTimeMinutes}分`, + inline: true, + }, + { + name: "定時チェック時刻", + value: `${config.checkHour}時${config.checkMinute}分`, + inline: true, + } ) .setTimestamp(); @@ -369,7 +400,11 @@ export const handleOwnerCommand = async ( .setColor(Colors.Green) .setTitle("🔄 鍵の持ち主変更") .setDescription( - `鍵の持ち主を変更しました\n<@${oldOwnerId}> → <@${newOwner.id}>\n${config.isReminderEnabled ? `⏰ リマインダー: ${config.reminderTimeMinutes}分後に通知` : ""}` + `鍵の持ち主を変更しました\n<@${oldOwnerId}> → <@${newOwner.id}>\n${ + config.isReminderEnabled + ? `⏰ リマインダー: ${config.reminderTimeMinutes}分後に通知` + : "" + }` ) .setTimestamp(); diff --git a/src/handlers/handlerUtils.ts b/src/handlers/handlerUtils.ts index e35fea9..1ce1a63 100644 --- a/src/handlers/handlerUtils.ts +++ b/src/handlers/handlerUtils.ts @@ -1,13 +1,15 @@ - import { ButtonInteraction, ChatInputCommandInteraction } from "discord.js"; +import { ButtonInteraction, ChatInputCommandInteraction } from "discord.js"; /** * インタラクションからユーザー情報を取得するヘルパー関数 * @param interaction - ボタンまたはコマンドのインタラクション * @returns ユーザー名とアイコンURL */ -export const getUserInfo = (interaction: ButtonInteraction | ChatInputCommandInteraction) => { +export const getUserInfo = ( + interaction: ButtonInteraction | ChatInputCommandInteraction +) => { return { username: interaction.user.username, - userIconUrl: interaction.user.avatarURL() + userIconUrl: interaction.user.avatarURL(), }; -}; \ No newline at end of file +}; diff --git a/src/main.ts b/src/main.ts index 03bfb30..e185930 100644 --- a/src/main.ts +++ b/src/main.ts @@ -16,7 +16,7 @@ import { handleReminderTimeCommand, handleCheckTimeCommand, handleStatusCommand, - handleOwnerCommand + handleOwnerCommand, } from "./handlers/commandHandlers"; import { handleButtonInteraction } from "./handlers/buttonHandlers"; import { Key } from "./types"; @@ -65,12 +65,11 @@ client.once("ready", async (bot) => { try { console.log("スラッシュコマンドを登録しています..."); - + // スラッシュコマンドをDiscord APIに登録 - await rest.put( - Routes.applicationCommands(client.user.id), - { body: commands } - ); + await rest.put(Routes.applicationCommands(client.user.id), { + body: commands, + }); console.log("スラッシュコマンドの登録が完了しました。"); } catch (error) { console.error("スラッシュコマンドの登録に失敗しました:", error); diff --git a/src/services/reminderService.ts b/src/services/reminderService.ts index a43d85e..541dc96 100644 --- a/src/services/reminderService.ts +++ b/src/services/reminderService.ts @@ -1,18 +1,23 @@ -import { EmbedBuilder, ActionRowBuilder, ButtonBuilder, Channel, Colors } from "discord.js"; +import { + EmbedBuilder, + ActionRowBuilder, + ButtonBuilder, + Channel, + Colors, +} from "discord.js"; import { BorrowerInfo, Key } from "../types"; -import { minutesToMs, msToMinutes} from "../utils"; +import { minutesToMs, msToMinutes } from "../utils"; import { config } from "../config"; import { Client } from "discord.js"; import { getKeyStatus } from "../main"; - // 現在鍵を借りているユーザーの情報(借りていない場合はnull) export let borrowerInfo: BorrowerInfo | null = null; /** * リマインダーメッセージを送信する関数 * 指定されたユーザーに鍵の返却を促すメッセージを送信する - * + * * @param client - Discordクライアント * @param userId - メッセージを送信するユーザーのDiscord ID * @param username - ユーザー名 @@ -30,19 +35,19 @@ export const sendReminderMessage = async ( ) => { // 常に最新の鍵の状態を取得 const keyStatus = getKeyStatus(); - + // 鍵が既に返却されている場合は送信しない if (keyStatus === "RETURN") { console.log("鍵が既に返却されているため、リマインダーを送信しません。"); return; } - + // リマインダー機能がOFFの場合は送信しない if (!config.isReminderEnabled) { console.log("リマインダー機能がOFFのため、送信をスキップしました。"); return; } - + // 借りた人の情報がない場合は送信できない if (!borrowerInfo) { console.log("借りた人の情報がないため、リマインダーを送信できません。"); @@ -52,7 +57,7 @@ export const sendReminderMessage = async ( // リマインダー送信回数をカウントアップ borrowerInfo.reminderCount++; const count = borrowerInfo.reminderCount; - + try { // チャンネルを取得 const channel: Channel | null = await client.channels.fetch(channelId); @@ -62,12 +67,16 @@ export const sendReminderMessage = async ( .setColor(Colors.Gold) // 黄色で警告を表現 .setTitle(`⌛️返却リマインダー (${count}回目)`) .setDescription( - `<@${userId}> さん、鍵を借りてから${config.reminderTimeMinutes * count}分が経過しました。\n返却を忘れていませんか?` + `<@${userId}> さん、鍵を借りてから${ + config.reminderTimeMinutes * count + }分が経過しました。\n返却を忘れていませんか?` ) .setTimestamp(); // 現在の鍵の状態に応じたボタンセットを取得 - const currentButtonSet = mapButtons.get(keyStatus) || new ActionRowBuilder().addComponents(borrowButton); + const currentButtonSet = + mapButtons.get(keyStatus) || + new ActionRowBuilder().addComponents(borrowButton); // メッセージを送信 await channel.send({ @@ -91,7 +100,9 @@ export const sendReminderMessage = async ( }, minutesToMs(config.reminderTimeMinutes)); // 分をミリ秒に変換 borrowerInfo.timerId = timerId; - console.log(`次のリマインダーを${config.reminderTimeMinutes}分後にスケジュールしました。`); + console.log( + `次のリマインダーを${config.reminderTimeMinutes}分後にスケジュールしました。` + ); } } } catch (error) { @@ -113,7 +124,7 @@ export const clearReminderTimer = () => { /** * リマインダータイマーを再設定する関数 * リマインダー間隔が変更された時などに呼び出される - * + * * @param client - Discordクライアント * @param mapButtons - 鍵の状態とボタンのマップ * @param borrowButton - 借りるボタン @@ -136,12 +147,19 @@ export const rescheduleReminderTimer = ( // 借りてからの経過時間を計算(分単位) const now = Date.now(); const elapsedMinutes = msToMinutes(now - borrowerInfo.borrowedAt); - + // 次のリマインダーまでの時間を計算 - const nextReminderAt = (borrowerInfo.reminderCount + 1) * config.reminderTimeMinutes; + const nextReminderAt = + (borrowerInfo.reminderCount + 1) * config.reminderTimeMinutes; const remainingMinutes = nextReminderAt - elapsedMinutes; - console.log(`経過時間: ${Math.floor(elapsedMinutes)}分, 次のリマインダーまで: ${Math.floor(remainingMinutes)}分 (${borrowerInfo.reminderCount + 1}回目)`); + console.log( + `経過時間: ${Math.floor( + elapsedMinutes + )}分, 次のリマインダーまで: ${Math.floor(remainingMinutes)}分 (${ + borrowerInfo.reminderCount + 1 + }回目)` + ); // まだ次のリマインダー時間に達していない場合は再スケジュール if (remainingMinutes > 0) { @@ -156,7 +174,11 @@ export const rescheduleReminderTimer = ( }, minutesToMs(remainingMinutes)); borrowerInfo.timerId = timerId; - console.log(`リマインダーを再スケジュールしました。${Math.floor(remainingMinutes)}分後に通知します。`); + console.log( + `リマインダーを再スケジュールしました。${Math.floor( + remainingMinutes + )}分後に通知します。` + ); } else { // 既に時間が経過している場合は即座に送信 console.log(`既にリマインダー時間を経過しているため、即座に通知します。`); diff --git a/src/services/scheduledCheck.ts b/src/services/scheduledCheck.ts index 066717c..8bfc68a 100644 --- a/src/services/scheduledCheck.ts +++ b/src/services/scheduledCheck.ts @@ -1,8 +1,13 @@ -import { EmbedBuilder, ActionRowBuilder, ButtonBuilder, Colors } from "discord.js"; +import { + EmbedBuilder, + ActionRowBuilder, + ButtonBuilder, + Colors, +} from "discord.js"; import { Key } from "../types"; import { config } from "../config"; import { borrowerInfo } from "./reminderService"; -import { Client} from "discord.js"; +import { Client } from "discord.js"; import { getKeyStatus } from "../main"; import { msToMinutes } from "../utils"; // 定時チェックのタイマーID @@ -12,7 +17,7 @@ let scheduledCheckTimerId: ReturnType | null = null; * 定時チェック関数 * 設定された時刻(デフォルト20時)に鍵が返却されていない場合、 * 借りているユーザーに通知を送信する - * + * * @param client - Discordクライアント * @param mapButtons - 鍵の状態とボタンのマップ * @param borrowButton - 借りるボタン @@ -29,7 +34,7 @@ export const check20OClock = async ( console.log("定時チェック機能がOFFのため、チェックをスキップしました。"); return; } - + // 鍵がRETURN状態でない場合(借りられている場合) if (keyStatus !== "RETURN" && borrowerInfo) { try { @@ -45,7 +50,9 @@ export const check20OClock = async ( .setTimestamp(); // 現在の鍵の状態に応じたボタンセットを取得 - const currentButtonSet = mapButtons.get(keyStatus) || new ActionRowBuilder().addComponents(borrowButton); + const currentButtonSet = + mapButtons.get(keyStatus) || + new ActionRowBuilder().addComponents(borrowButton); // メッセージを送信 await channel.send({ @@ -54,7 +61,9 @@ export const check20OClock = async ( components: [currentButtonSet], // ボタンも一緒に送信 }); - console.log(`定時チェック: ${borrowerInfo.username}に返却リマインダーを送信しました。`); + console.log( + `定時チェック: ${borrowerInfo.username}に返却リマインダーを送信しました。` + ); } } catch (error) { console.error("定時チェックメッセージの送信に失敗しました:", error); @@ -66,7 +75,7 @@ export const check20OClock = async ( /** * 次の定時チェックまでの時間をミリ秒で計算する関数 - * + * * @returns 次の定時チェックまでの時間(ミリ秒) */ export const getMillisecondsUntil20OClock = (): number => { @@ -74,19 +83,25 @@ export const getMillisecondsUntil20OClock = (): number => { const target = new Date(); target.setHours(config.checkHour, config.checkMinute, 0, 0); // 設定された時刻に設定 - console.log(`現在時刻: ${now.toLocaleString('ja-JP')}`); - console.log(`ターゲット時刻: ${target.toLocaleString('ja-JP')}`); - console.log(`now.getTime(): ${now.getTime()}, target.getTime(): ${target.getTime()}`); + console.log(`現在時刻: ${now.toLocaleString("ja-JP")}`); + console.log(`ターゲット時刻: ${target.toLocaleString("ja-JP")}`); + console.log( + `now.getTime(): ${now.getTime()}, target.getTime(): ${target.getTime()}` + ); // もし現在時刻が既に設定時刻を過ぎていたら、翌日の設定時刻に設定 if (now.getTime() >= target.getTime()) { - console.log(`${config.checkHour}時${config.checkMinute}分を過ぎているため、翌日の${config.checkHour}時${config.checkMinute}分に設定します`); + console.log( + `${config.checkHour}時${config.checkMinute}分を過ぎているため、翌日の${config.checkHour}時${config.checkMinute}分に設定します` + ); target.setDate(target.getDate() + 1); - console.log(`新しいターゲット時刻: ${target.toLocaleString('ja-JP')}`); + console.log(`新しいターゲット時刻: ${target.toLocaleString("ja-JP")}`); } const diff = target.getTime() - now.getTime(); - console.log(`時間差(ミリ秒): ${diff}, 分: ${Math.round(msToMinutes(diff))}`); + console.log( + `時間差(ミリ秒): ${diff}, 分: ${Math.round(msToMinutes(diff))}` + ); return diff; }; @@ -94,7 +109,7 @@ export const getMillisecondsUntil20OClock = (): number => { /** * 定時チェックをスケジュールする関数 * 設定された時刻に定期的にチェックを実行するようにタイマーを設定する - * + * * @param client - Discordクライアント * @param mapButtons - 鍵の状態とボタンのマップ * @param borrowButton - 借りるボタン @@ -113,8 +128,12 @@ export const schedule20OClockCheck = ( // 次のチェックをスケジュールする内部関数 const scheduleNext = () => { const msUntil20 = getMillisecondsUntil20OClock(); - - console.log(`次の定時チェックまで: ${Math.round(msUntil20 / 1000 / 60)}分 (${config.checkHour}時${config.checkMinute}分)`); + + console.log( + `次の定時チェックまで: ${Math.round(msUntil20 / 1000 / 60)}分 (${ + config.checkHour + }時${config.checkMinute}分)` + ); // タイマーを設定 scheduledCheckTimerId = setTimeout(() => { @@ -122,6 +141,6 @@ export const schedule20OClockCheck = ( scheduleNext(); // 次の日のチェックをスケジュール }, msUntil20); }; - + scheduleNext(); }; diff --git a/src/utils.ts b/src/utils.ts index 3504299..961fa5b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -22,11 +22,13 @@ export const minutesToMs = (minutes: number): number => { * 文字列またはbooleanをboolean型に変換する関数 * "true"または"1"の場合にtrueを返し、それ以外はfalseを返す * 既にboolean型の場合はそのまま返す - * + * * @param value - 変換する文字列またはboolean * @returns boolean値 */ -export const string2boolean = (value: string | boolean | null | undefined): boolean => { +export const string2boolean = ( + value: string | boolean | null | undefined +): boolean => { if (typeof value === "boolean") { return value; } @@ -39,7 +41,7 @@ export const string2boolean = (value: string | boolean | null | undefined): bool /** * 型ガード関数:文字列がKey型かどうかを確認 * TypeScriptの型安全性を保つために使用 - * + * * @param value - チェックする文字列 * @returns valueがKey型の値である場合true */ From 1e74ee472e9179165d7639e97a5c56ab5d4b88e1 Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 21 Nov 2025 13:39:32 +0900 Subject: [PATCH 03/15] update: typescript --- package-lock.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 56f39ef..fe26b0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "prettier": "^3.3.2", "ts-node": "^10.9.2", "ts-node-dev": "^2.0.0", - "typescript": "^5.4.5" + "typescript": "^5.9.3" }, "engines": { "node": "24.x" @@ -561,6 +561,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -634,6 +635,7 @@ "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.4", "@typescript-eslint/types": "8.46.4", @@ -849,6 +851,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1683,6 +1686,7 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -4505,6 +4509,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" From de6113557cd931c198a59e8f32afa36ac355ded5 Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 21 Nov 2025 13:49:03 +0900 Subject: [PATCH 04/15] =?UTF-8?q?fmt:=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=82=92=E5=AE=9F=E6=96=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/discord/discordUI.ts | 33 +++++++++++----- src/handlers/buttonHandlers.ts | 34 +++++++++++------ src/handlers/commandHandlers.ts | 67 +++++++++++++++++++++++---------- src/handlers/handlerUtils.ts | 20 +++++++--- src/services/reminderService.ts | 30 +++++++-------- src/services/scheduledCheck.ts | 45 +++++++++++++--------- 6 files changed, 148 insertions(+), 81 deletions(-) diff --git a/src/discord/discordUI.ts b/src/discord/discordUI.ts index b15c806..5fcd585 100644 --- a/src/discord/discordUI.ts +++ b/src/discord/discordUI.ts @@ -38,7 +38,9 @@ export const returnButton = new ButtonBuilder() * @param isReminderEnabled - リマインダーが有効かどうか * @returns 適切な色とラベルのボタン */ -export const createReminderToggleButton = (isReminderEnabled: boolean): ButtonBuilder => { +export const createReminderToggleButton = ( + isReminderEnabled: boolean +): ButtonBuilder => { // ラベルはリマインダーに統一 const label = "リマインダー"; // 現在の状態を色で表示: ON時は Success(緑)、OFF時は Secondary(灰色) @@ -69,8 +71,8 @@ export const mapButtons: Map> = new Map([ "BORROW", !modeConsole ? new ActionRowBuilder() - .addComponents(openButton) - .addComponents(returnButton) + .addComponents(openButton) + .addComponents(returnButton) : new ActionRowBuilder().addComponents(returnButton), ], // 開けた状態: 「閉める」ボタンのみ表示 @@ -100,22 +102,33 @@ export const mapOpers: Map = new Map([ * @param isReminderEnabled - リマインダーが有効かどうか * @returns ボタンセット */ -export const getButtons = (keyStatus: Key, isReminderEnabled: boolean): ActionRowBuilder => { +export const getButtons = ( + keyStatus: Key, + isReminderEnabled: boolean +): ActionRowBuilder => { const reminderButton = createReminderToggleButton(isReminderEnabled); if (keyStatus === "BORROW") { // 借りた状態: 操作卓モードでない場合は「開ける」「返す」「リマインダー」、操作卓モードの場合は「返す」「リマインダー」 return !modeConsole - ? new ActionRowBuilder() - .addComponents(openButton, returnButton, reminderButton) - : new ActionRowBuilder() - .addComponents(returnButton, reminderButton); + ? new ActionRowBuilder().addComponents( + openButton, + returnButton, + reminderButton + ) + : new ActionRowBuilder().addComponents( + returnButton, + reminderButton + ); } if (keyStatus === "CLOSE") { // 閉めた状態: 「返す」「開ける」「リマインダー」を表示 - return new ActionRowBuilder() - .addComponents(returnButton, openButton, reminderButton); + return new ActionRowBuilder().addComponents( + returnButton, + openButton, + reminderButton + ); } const buttons = mapButtons.get(keyStatus); diff --git a/src/handlers/buttonHandlers.ts b/src/handlers/buttonHandlers.ts index 17369ab..fee6249 100644 --- a/src/handlers/buttonHandlers.ts +++ b/src/handlers/buttonHandlers.ts @@ -6,8 +6,17 @@ import { ButtonInteraction, Colors, EmbedBuilder } from "discord.js"; import { Key } from "../types"; import { isKey, minutesToMs } from "../utils"; -import { getUserInfo, addReminderSettingsToEmbed, saveBorrowerInfo } from "./handlerUtils"; -import { mapLabel, mapOpers, mapPresence, getButtons } from "../discord/discordUI"; +import { + getUserInfo, + addReminderSettingsToEmbed, + saveBorrowerInfo, +} from "./handlerUtils"; +import { + mapLabel, + mapOpers, + mapPresence, + getButtons, +} from "../discord/discordUI"; import { sendReminderMessage, clearReminderTimer, @@ -53,7 +62,9 @@ export const handleButtonInteraction = async ( .setColor(Colors.Blue) .setAuthor({ name: username, iconURL: userIconUrl ?? undefined }) .setTitle("リマインダー設定変更") - .setDescription(`リマインダー機能を${newState ? "ON" : "OFF"}にしました。`) + .setDescription( + `リマインダー機能を${newState ? "ON" : "OFF"}にしました。` + ) .setTimestamp(); // インタラクションに返信 @@ -142,14 +153,15 @@ export const handleButtonInteraction = async ( // リマインダー機能がONの場合のみタイマーを設定 if (config.isReminderEnabled) { const timerId = setTimeout(() => { - sendReminderMessage( - client, - interaction.user.id, - interaction.channelId - ); + sendReminderMessage(client, interaction.user.id, interaction.channelId); }, minutesToMs(config.reminderTimeMinutes)); - saveBorrowerInfo(interaction.user.id, username, interaction.channelId, timerId); + saveBorrowerInfo( + interaction.user.id, + username, + interaction.channelId, + timerId + ); console.log( `${username}が鍵を借りました。${config.reminderTimeMinutes}分後にリマインダーを送信します。` @@ -157,9 +169,7 @@ export const handleButtonInteraction = async ( } else { // リマインダーOFFの場合でも借りたユーザー情報は保存 saveBorrowerInfo(interaction.user.id, username, interaction.channelId); - console.log( - `${username}が鍵を借りました。リマインダー機能はOFFです。` - ); + console.log(`${username}が鍵を借りました。リマインダー機能はOFFです。`); } } diff --git a/src/handlers/commandHandlers.ts b/src/handlers/commandHandlers.ts index f47378a..9afa332 100644 --- a/src/handlers/commandHandlers.ts +++ b/src/handlers/commandHandlers.ts @@ -5,13 +5,17 @@ import { ChatInputCommandInteraction, Colors, EmbedBuilder } from "discord.js"; import { Key } from "../types"; -import { getUserInfo, addReminderSettingsToEmbed, saveBorrowerInfo } from "./handlerUtils"; +import { + getUserInfo, + addReminderSettingsToEmbed, + saveBorrowerInfo, +} from "./handlerUtils"; import { config, setReminderTimeMinutes, setCheckTime, toggleReminderEnabled, - toggleScheduledCheckEnabled + toggleScheduledCheckEnabled, } from "../config"; import { sendReminderMessage, @@ -78,14 +82,15 @@ export const handleBorrowCommand = async ( const delayMs = (delayMinutes ?? config.reminderTimeMinutes) * 60 * 1000; const timerId = setTimeout(() => { - sendReminderMessage( - client, - interaction.user.id, - interaction.channelId - ); + sendReminderMessage(client, interaction.user.id, interaction.channelId); }, delayMs); - saveBorrowerInfo(interaction.user.id, username, interaction.channelId, timerId); + saveBorrowerInfo( + interaction.user.id, + username, + interaction.channelId, + timerId + ); console.log( `${username}が鍵を借りました。${delayMinutes ?? config.reminderTimeMinutes}分後にリマインダーを送信します。` @@ -103,7 +108,10 @@ export const handleBorrowCommand = async ( } return newStatus; - } else if (borrowerInfo && (keyStatus === "BORROW" || keyStatus === "OPEN" || keyStatus === "CLOSE")) { + } else if ( + borrowerInfo && + (keyStatus === "BORROW" || keyStatus === "OPEN" || keyStatus === "CLOSE") + ) { // 既に借りている状態でコマンド実行 → リマインダー開始時間を更新 const delayMs = (delayMinutes ?? config.reminderTimeMinutes) * 60 * 1000; @@ -121,7 +129,12 @@ export const handleBorrowCommand = async ( ); }, delayMs); - saveBorrowerInfo(borrowerInfo.userId, borrowerInfo.username, borrowerInfo.channelId, timerId); + saveBorrowerInfo( + borrowerInfo.userId, + borrowerInfo.username, + borrowerInfo.channelId, + timerId + ); await interaction.reply({ content: `リマインダー開始時間を${delayMinutes ?? config.reminderTimeMinutes}分後に設定しました。`, @@ -225,7 +238,9 @@ export const handleCheckTimeCommand = async ( content: `定時チェック時刻を${hour}時${minute}分に設定しました。`, components: [getKeyButtonsForCommand(keyStatus)], }); - console.log(`定時チェック時刻: ${hour}時${minute}分に変更し、スケジュールを再設定しました。`); + console.log( + `定時チェック時刻: ${hour}時${minute}分に変更し、スケジュールを再設定しました。` + ); } }; @@ -241,10 +256,26 @@ export const handleStatusCommand = async ( .setColor(Colors.Blue) .setTitle("⚙️ アラーム設定状況") .addFields( - { name: "リマインダー機能", value: config.isReminderEnabled ? "✅ ON" : "❌ OFF", inline: true }, - { name: "定時チェック機能", value: config.isScheduledCheckEnabled ? "✅ ON" : "❌ OFF", inline: true }, - { name: "リマインダー時間", value: `${config.reminderTimeMinutes}分`, inline: true }, - { name: "定時チェック時刻", value: `${config.checkHour}時${config.checkMinute}分`, inline: true } + { + name: "リマインダー機能", + value: config.isReminderEnabled ? "✅ ON" : "❌ OFF", + inline: true, + }, + { + name: "定時チェック機能", + value: config.isScheduledCheckEnabled ? "✅ ON" : "❌ OFF", + inline: true, + }, + { + name: "リマインダー時間", + value: `${config.reminderTimeMinutes}分`, + inline: true, + }, + { + name: "定時チェック時刻", + value: `${config.checkHour}時${config.checkMinute}分`, + inline: true, + } ) .setTimestamp(); @@ -293,11 +324,7 @@ export const handleOwnerCommand = async ( if (config.isReminderEnabled) { // 新しい持ち主用に新しいタイマーを設定(カウントをリセット) const timerId = setTimeout(() => { - sendReminderMessage( - client, - newOwner.id, - interaction.channelId - ); + sendReminderMessage(client, newOwner.id, interaction.channelId); }, minutesToMs(config.reminderTimeMinutes)); saveBorrowerInfo(newOwner.id, newOwnerName, interaction.channelId, timerId); diff --git a/src/handlers/handlerUtils.ts b/src/handlers/handlerUtils.ts index 012cc3e..0884243 100644 --- a/src/handlers/handlerUtils.ts +++ b/src/handlers/handlerUtils.ts @@ -1,4 +1,8 @@ -import { ButtonInteraction, ChatInputCommandInteraction, EmbedBuilder } from "discord.js"; +import { + ButtonInteraction, + ChatInputCommandInteraction, + EmbedBuilder, +} from "discord.js"; import { BorrowerInfo } from "../types"; import { config } from "../config"; import { setBorrowerInfo } from "../services/reminderService"; @@ -8,10 +12,12 @@ import { setBorrowerInfo } from "../services/reminderService"; * @param interaction - ボタンまたはコマンドのインタラクション * @returns ユーザー名とアイコンURL */ -export const getUserInfo = (interaction: ButtonInteraction | ChatInputCommandInteraction) => { +export const getUserInfo = ( + interaction: ButtonInteraction | ChatInputCommandInteraction +) => { return { username: interaction.user.username, - userIconUrl: interaction.user.avatarURL() + userIconUrl: interaction.user.avatarURL(), }; }; @@ -20,18 +26,20 @@ export const getUserInfo = (interaction: ButtonInteraction | ChatInputCommandInt * @param embed - 埋め込みメッセージ * @returns 更新された埋め込みメッセージ */ -export const addReminderSettingsToEmbed = (embed: EmbedBuilder): EmbedBuilder => { +export const addReminderSettingsToEmbed = ( + embed: EmbedBuilder +): EmbedBuilder => { if (config.isReminderEnabled) { embed.addFields({ name: "⏰ リマインダー設定", value: `リマインダーが有効です\n・間隔: ${config.reminderTimeMinutes}分ごと\n・定時チェック: ${config.checkHour}時${config.checkMinute}分`, - inline: false + inline: false, }); } else { embed.addFields({ name: "⏰ リマインダー設定", value: `リマインダーは無効です\n・定時チェック: ${config.isScheduledCheckEnabled ? `${config.checkHour}時${config.checkMinute}分` : "無効"}`, - inline: false + inline: false, }); } return embed; diff --git a/src/services/reminderService.ts b/src/services/reminderService.ts index fd9872e..eb73512 100644 --- a/src/services/reminderService.ts +++ b/src/services/reminderService.ts @@ -6,14 +6,13 @@ import { Client } from "discord.js"; import { getKeyStatus } from "../main"; import { getButtons } from "../discord/discordUI"; - // 現在鍵を借りているユーザーの情報(借りていない場合はnull) export let borrowerInfo: BorrowerInfo | null = null; /** * リマインダーメッセージを送信する関数 * 指定されたユーザーに鍵の返却を促すメッセージを送信する - * + * * @param client - Discordクライアント * @param userId - メッセージを送信するユーザーのDiscord ID * @param channelId - メッセージを送信するチャンネルのID @@ -86,7 +85,9 @@ export const sendReminderMessage = async ( }, minutesToMs(config.reminderTimeMinutes)); // 分をミリ秒に変換 borrowerInfo.timerId = timerId; - console.log(`次のリマインダーを${config.reminderTimeMinutes}分後にスケジュールしました。`); + console.log( + `次のリマインダーを${config.reminderTimeMinutes}分後にスケジュールしました。` + ); } } } catch (error) { @@ -108,12 +109,10 @@ export const clearReminderTimer = () => { /** * リマインダータイマーを再設定する関数 * リマインダー間隔が変更された時などに呼び出される - * + * * @param client - Discordクライアント */ -export const rescheduleReminderTimer = ( - client: Client -) => { +export const rescheduleReminderTimer = (client: Client) => { // 借りている人がいない、またはリマインダーがOFFの場合は何もしない if (!borrowerInfo || !config.isReminderEnabled) { return; @@ -129,10 +128,13 @@ export const rescheduleReminderTimer = ( const elapsedMinutes = msToMinutes(now - borrowerInfo.borrowedAt); // 次のリマインダーまでの時間を計算 - const nextReminderAt = (borrowerInfo.reminderCount + 1) * config.reminderTimeMinutes; + const nextReminderAt = + (borrowerInfo.reminderCount + 1) * config.reminderTimeMinutes; const remainingMinutes = nextReminderAt - elapsedMinutes; - console.log(`経過時間: ${Math.floor(elapsedMinutes)}分, 次のリマインダーまで: ${Math.floor(remainingMinutes)}分 (${borrowerInfo.reminderCount + 1}回目)`); + console.log( + `経過時間: ${Math.floor(elapsedMinutes)}分, 次のリマインダーまで: ${Math.floor(remainingMinutes)}分 (${borrowerInfo.reminderCount + 1}回目)` + ); // まだ次のリマインダー時間に達していない場合は再スケジュール if (remainingMinutes > 0) { @@ -145,15 +147,13 @@ export const rescheduleReminderTimer = ( }, minutesToMs(remainingMinutes)); borrowerInfo.timerId = timerId; - console.log(`リマインダーを再スケジュールしました。${Math.floor(remainingMinutes)}分後に通知します。`); + console.log( + `リマインダーを再スケジュールしました。${Math.floor(remainingMinutes)}分後に通知します。` + ); } else { // 既に時間が経過している場合は即座に送信 console.log(`既にリマインダー時間を経過しているため、即座に通知します。`); - sendReminderMessage( - client, - borrowerInfo.userId, - borrowerInfo.channelId - ); + sendReminderMessage(client, borrowerInfo.userId, borrowerInfo.channelId); } }; diff --git a/src/services/scheduledCheck.ts b/src/services/scheduledCheck.ts index 13a8d56..c10c5fc 100644 --- a/src/services/scheduledCheck.ts +++ b/src/services/scheduledCheck.ts @@ -12,12 +12,10 @@ let scheduledCheckTimerId: ReturnType | null = null; * 定時チェック関数 * 設定された時刻(デフォルト20時)に鍵が返却されていない場合、 * 借りているユーザーに通知を送信する - * + * * @param client - Discordクライアント */ -export const check20OClock = async ( - client: Client -) => { +export const check20OClock = async (client: Client) => { // 常に最新の鍵の状態を取得 const keyStatus = getKeyStatus(); // 定時チェック機能がOFFの場合は何もしない @@ -43,7 +41,10 @@ export const check20OClock = async ( .setTimestamp(); // 現在の鍵の状態に応じたボタンセットを取得 - const currentButtonSet = getButtons(keyStatus, config.isReminderEnabled); + const currentButtonSet = getButtons( + keyStatus, + config.isReminderEnabled + ); // メッセージを送信 await textChannel.send({ @@ -52,7 +53,9 @@ export const check20OClock = async ( components: [currentButtonSet], // ボタンも一緒に送信 }); - console.log(`定時チェック: ${borrowerInfo.username}に返却リマインダーを送信しました。`); + console.log( + `定時チェック: ${borrowerInfo.username}に返却リマインダーを送信しました。` + ); } } catch (error) { console.error("定時チェックメッセージの送信に失敗しました:", error); @@ -64,7 +67,7 @@ export const check20OClock = async ( /** * 次の定時チェックまでの時間をミリ秒で計算する関数 - * + * * @returns 次の定時チェックまでの時間(ミリ秒) */ export const getMillisecondsUntil20OClock = (): number => { @@ -72,19 +75,25 @@ export const getMillisecondsUntil20OClock = (): number => { const target = new Date(); target.setHours(config.checkHour, config.checkMinute, 0, 0); // 設定された時刻に設定 - console.log(`現在時刻: ${now.toLocaleString('ja-JP')}`); - console.log(`ターゲット時刻: ${target.toLocaleString('ja-JP')}`); - console.log(`now.getTime(): ${now.getTime()}, target.getTime(): ${target.getTime()}`); + console.log(`現在時刻: ${now.toLocaleString("ja-JP")}`); + console.log(`ターゲット時刻: ${target.toLocaleString("ja-JP")}`); + console.log( + `now.getTime(): ${now.getTime()}, target.getTime(): ${target.getTime()}` + ); // もし現在時刻が既に設定時刻を過ぎていたら、翌日の設定時刻に設定 if (now.getTime() >= target.getTime()) { - console.log(`${config.checkHour}時${config.checkMinute}分を過ぎているため、翌日の${config.checkHour}時${config.checkMinute}分に設定します`); + console.log( + `${config.checkHour}時${config.checkMinute}分を過ぎているため、翌日の${config.checkHour}時${config.checkMinute}分に設定します` + ); target.setDate(target.getDate() + 1); - console.log(`新しいターゲット時刻: ${target.toLocaleString('ja-JP')}`); + console.log(`新しいターゲット時刻: ${target.toLocaleString("ja-JP")}`); } const diff = target.getTime() - now.getTime(); - console.log(`時間差(ミリ秒): ${diff}, 分: ${Math.round(msToMinutes(diff))}`); + console.log( + `時間差(ミリ秒): ${diff}, 分: ${Math.round(msToMinutes(diff))}` + ); return diff; }; @@ -92,12 +101,10 @@ export const getMillisecondsUntil20OClock = (): number => { /** * 定時チェックをスケジュールする関数 * 設定された時刻に定期的にチェックを実行するようにタイマーを設定する - * + * * @param client - Discordクライアント */ -export const schedule20OClockCheck = ( - client: Client -) => { +export const schedule20OClockCheck = (client: Client) => { // 既存のタイマーをクリア if (scheduledCheckTimerId) { clearTimeout(scheduledCheckTimerId); @@ -108,7 +115,9 @@ export const schedule20OClockCheck = ( const scheduleNext = () => { const msUntil20 = getMillisecondsUntil20OClock(); - console.log(`次の定時チェックまで: ${Math.round(msUntil20 / 1000 / 60)}分 (${config.checkHour}時${config.checkMinute}分)`); + console.log( + `次の定時チェックまで: ${Math.round(msUntil20 / 1000 / 60)}分 (${config.checkHour}時${config.checkMinute}分)` + ); // タイマーを設定 scheduledCheckTimerId = setTimeout(() => { From 0c99d86ac59a6237c26a1916d8440af51ef87211 Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 21 Nov 2025 14:11:34 +0900 Subject: [PATCH 05/15] =?UTF-8?q?add:format=E3=82=B3=E3=83=9E=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=81=AE=E3=82=B7=E3=83=A7=E3=83=BC=E3=83=88=E3=82=AB?= =?UTF-8?q?=E3=83=83=E3=83=88fmt=E3=82=92=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index a793268..a1e0ec5 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "test": "echo \"Error: no test specified\" && exit 1", "build": "tsc", "start": "node dist/main.js", + "fmt": "prettier --write \"src/**/*.ts\"", "format": "prettier --write \"src/**/*.ts\"", "format:check": "prettier --check \"src/**/*.ts\"", "lint": "eslint \"src/**/*.ts\" --fix", From a044867d0c8045cb2dbdcc2de5dde8c8dd9ca119 Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 21 Nov 2025 14:32:05 +0900 Subject: [PATCH 06/15] =?UTF-8?q?fix:lint=E3=81=A7=E7=99=BA=E7=94=9F?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=82=92package.json=E3=81=A7type=E3=82=92module=E3=81=AB?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E3=81=93=E3=81=A8=E3=81=AB?= =?UTF-8?q?=E3=82=88=E3=82=8A=E8=A7=A3=E6=B1=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eslint.config.js | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 ++- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 eslint.config.js diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..9f0f37a --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,51 @@ +import eslint from '@eslint/js'; +import tseslint from '@typescript-eslint/eslint-plugin'; +import tsparser from '@typescript-eslint/parser'; +import prettier from 'eslint-config-prettier'; + +export default [ + eslint.configs.recommended, + { + files: ['src/**/*.ts'], + languageOptions: { + parser: tsparser, + parserOptions: { + ecmaVersion: 2021, + sourceType: 'module', + project: './tsconfig.json', + }, + globals: { + console: 'readonly', + process: 'readonly', + __dirname: 'readonly', + __filename: 'readonly', + Buffer: 'readonly', + setTimeout: 'readonly', + clearTimeout: 'readonly', + setInterval: 'readonly', + clearInterval: 'readonly', + NodeJS: 'readonly', + }, + }, + plugins: { + '@typescript-eslint': tseslint, + }, + rules: { + ...tseslint.configs.recommended.rules, + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + }, + ], + '@typescript-eslint/no-non-null-assertion': 'off', + 'no-console': 'off', + }, + }, + { + ignores: ['dist/**', 'node_modules/**', '*.js', '!eslint.config.js'], + }, + prettier, +]; diff --git a/package.json b/package.json index a1e0ec5..61f4fc9 100644 --- a/package.json +++ b/package.json @@ -14,13 +14,14 @@ "lint:check": "eslint \"src/**/*.ts\"", "typecheck": "tsc --noEmit" }, + "type": "module", "engines": { "node": "24.x" }, "keywords": [], "author": "", "license": "ISC", -"devDependencies": { + "devDependencies": { "@typescript-eslint/eslint-plugin": "^8.46.4", "@typescript-eslint/parser": "^8.46.4", "eslint": "^9.4.0", From a96c6fce2c90f20e5bb0c0fe36aff1a33a6dc3f3 Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 21 Nov 2025 16:35:03 +0900 Subject: [PATCH 07/15] =?UTF-8?q?fix:=20PR=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=81=AE=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - package.jsonのtype: moduleを削除(CommonJS出力のため不要) - @eslint/jsをdevDependenciesに追加 - 古い.eslintrc.jsonを削除 - eslint.config.jsをCommonJS形式に変更 --- .eslintrc.json | 37 ------------------------------------- eslint.config.js | 10 +++++----- package-lock.json | 1 + package.json | 2 +- 4 files changed, 7 insertions(+), 43 deletions(-) delete mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 8891758..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "env": { - "node": true, - "es2021": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "prettier" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 2021, - "sourceType": "module", - "project": "./tsconfig.json" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "@typescript-eslint/no-explicit-any": "warn", - "@typescript-eslint/no-unused-vars": [ - "warn", - { - "argsIgnorePattern": "^_", - "varsIgnorePattern": "^_" - } - ], - "@typescript-eslint/no-non-null-assertion": "off", // issue #7解決後にwarnに変更予定 - "no-console": "off" - }, - "ignorePatterns": [ - "dist", - "node_modules", - "*.js" - ] -} diff --git a/eslint.config.js b/eslint.config.js index 9f0f37a..93959f7 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,9 +1,9 @@ -import eslint from '@eslint/js'; -import tseslint from '@typescript-eslint/eslint-plugin'; -import tsparser from '@typescript-eslint/parser'; -import prettier from 'eslint-config-prettier'; +const eslint = require('@eslint/js'); +const tseslint = require('@typescript-eslint/eslint-plugin'); +const tsparser = require('@typescript-eslint/parser'); +const prettier = require('eslint-config-prettier'); -export default [ +module.exports = [ eslint.configs.recommended, { files: ['src/**/*.ts'], diff --git a/package-lock.json b/package-lock.json index fe26b0d..4bc2cc3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "ts-node": "^10.9.2" }, "devDependencies": { + "@eslint/js": "^9.4.0", "@typescript-eslint/eslint-plugin": "^8.46.4", "@typescript-eslint/parser": "^8.46.4", "eslint": "^9.4.0", diff --git a/package.json b/package.json index 61f4fc9..9803c1e 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "lint:check": "eslint \"src/**/*.ts\"", "typecheck": "tsc --noEmit" }, - "type": "module", "engines": { "node": "24.x" }, @@ -22,6 +21,7 @@ "author": "", "license": "ISC", "devDependencies": { + "@eslint/js": "^9.4.0", "@typescript-eslint/eslint-plugin": "^8.46.4", "@typescript-eslint/parser": "^8.46.4", "eslint": "^9.4.0", From 53ad582737280cd2b9dca0ecbc5b85bbd4ccf5b4 Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 21 Nov 2025 16:41:09 +0900 Subject: [PATCH 08/15] =?UTF-8?q?add:=20CI=E3=81=ABDocker=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=83=BB=E8=B5=B7=E5=8B=95=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docker compose buildの成功を確認 - コンテナが正常に起動しDiscordログインまで到達することを確認 - TokenInvalidエラーが出ることで、コード自体は正常に動作していることを検証 --- .github/workflows/ci.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17e6276..32c4225 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,3 +38,18 @@ jobs: - name: Build run: npm run build + + - name: Docker build test + run: docker compose build + + - name: Create test settings.json + run: cp src/settings.json.sample src/settings.json + + - name: Docker run test (expect TokenInvalid error) + run: | + # コンテナを起動し、TokenInvalidエラーが出ることを確認 + # エラーコード1で終了するが、それは期待される動作なのでOR trueで成功扱いにする + timeout 15s docker compose up || EXIT_CODE=$? + docker compose down + # TokenInvalidエラーログが出力されているか確認 + docker compose logs 2>&1 | grep -q "TokenInvalid" && echo "✓ Docker container successfully started and reached Discord login" || (echo "✗ Container did not reach expected state" && exit 1) From 4585e8dce42d74d0ec1d4b86d4849abb8fa57312 Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 21 Nov 2025 16:45:26 +0900 Subject: [PATCH 09/15] =?UTF-8?q?fix:=20CI=E3=81=AEDocker=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docker compose logsではなく、upの出力を直接ファイルに保存 - set +eでエラーを一時的に無視し、終了コードを取得 - ログを表示してデバッグしやすくする - grepの結果で成功/失敗を明示的に判定 --- .github/workflows/ci.yml | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32c4225..75df3e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,8 +48,24 @@ jobs: - name: Docker run test (expect TokenInvalid error) run: | # コンテナを起動し、TokenInvalidエラーが出ることを確認 - # エラーコード1で終了するが、それは期待される動作なのでOR trueで成功扱いにする - timeout 15s docker compose up || EXIT_CODE=$? + set +e + timeout 15s docker compose up > docker-logs.txt 2>&1 + EXIT_CODE=$? + set -e + + # ログを表示 + echo "=== Docker logs ===" + cat docker-logs.txt + echo "==================" + + # コンテナを停止 docker compose down + # TokenInvalidエラーログが出力されているか確認 - docker compose logs 2>&1 | grep -q "TokenInvalid" && echo "✓ Docker container successfully started and reached Discord login" || (echo "✗ Container did not reach expected state" && exit 1) + if grep -q "TokenInvalid" docker-logs.txt; then + echo "✓ Docker container successfully started and reached Discord login" + exit 0 + else + echo "✗ Container did not reach expected state" + exit 1 + fi From 34b4d295e3a21afd94b036f5e5b6f616ee5ff1af Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 21 Nov 2025 17:53:30 +0900 Subject: [PATCH 10/15] =?UTF-8?q?fix:=20globals=E3=83=91=E3=83=83=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=A6?= =?UTF-8?q?Node.js=E3=82=B0=E3=83=AD=E3=83=BC=E3=83=90=E3=83=AB=E5=A4=89?= =?UTF-8?q?=E6=95=B0=E3=82=92=E5=AE=9A=E7=BE=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - globalsパッケージをdevDependenciesに追加 - eslint.config.jsでglobals.nodeを使用 - 手動で定義していたNode.jsグローバル変数をglobalsパッケージに置き換え - NodeJSは個別に追加(globals.nodeに含まれていないため) --- eslint.config.js | 11 ++--------- package-lock.json | 20 +++++++++++++++++--- package.json | 1 + 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 93959f7..eaace6c 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -2,6 +2,7 @@ const eslint = require('@eslint/js'); const tseslint = require('@typescript-eslint/eslint-plugin'); const tsparser = require('@typescript-eslint/parser'); const prettier = require('eslint-config-prettier'); +const globals = require('globals'); module.exports = [ eslint.configs.recommended, @@ -15,15 +16,7 @@ module.exports = [ project: './tsconfig.json', }, globals: { - console: 'readonly', - process: 'readonly', - __dirname: 'readonly', - __filename: 'readonly', - Buffer: 'readonly', - setTimeout: 'readonly', - clearTimeout: 'readonly', - setInterval: 'readonly', - clearInterval: 'readonly', + ...globals.node, NodeJS: 'readonly', }, }, diff --git a/package-lock.json b/package-lock.json index 4bc2cc3..4bd87f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-n": "^17.6.0", "eslint-plugin-promise": "^7.2.1", + "globals": "^16.5.0", "prettier": "^3.3.2", "ts-node": "^10.9.2", "ts-node-dev": "^2.0.0", @@ -300,6 +301,19 @@ "concat-map": "0.0.1" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2526,9 +2540,9 @@ } }, "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 9803c1e..6c28767 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-n": "^17.6.0", "eslint-plugin-promise": "^7.2.1", + "globals": "^16.5.0", "prettier": "^3.3.2", "ts-node": "^10.9.2", "ts-node-dev": "^2.0.0", From 438679a1cb86bae7bfbd18c4a8f5553f4dbcc9b8 Mon Sep 17 00:00:00 2001 From: mikuto Date: Fri, 21 Nov 2025 17:56:20 +0900 Subject: [PATCH 11/15] =?UTF-8?q?fix:=20recommended-type-checked=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - tseslint.configs.recommendedからflat/recommended-type-checkedに変更 - より厳格な型チェックを有効化 - no-unused-varsを無効化してTypeScript ESLint版を優先 --- eslint.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eslint.config.js b/eslint.config.js index eaace6c..b85dace 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -24,8 +24,9 @@ module.exports = [ '@typescript-eslint': tseslint, }, rules: { - ...tseslint.configs.recommended.rules, + ...tseslint.configs['flat/recommended-type-checked'].rules, '@typescript-eslint/no-explicit-any': 'warn', + 'no-unused-vars': 'off', // TypeScript ESLintのno-unused-varsを使うため無効化 '@typescript-eslint/no-unused-vars': [ 'warn', { From 3dea21fc359ec92b66dd23219ce0d97b0b713ff5 Mon Sep 17 00:00:00 2001 From: mikuto Date: Thu, 27 Nov 2025 13:05:31 +0900 Subject: [PATCH 12/15] =?UTF-8?q?delete:=20ci=E3=81=8B=E3=82=89lint?= =?UTF-8?q?=E3=82=92=E9=99=A4=E3=81=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 3 --- package.json | 2 -- 2 files changed, 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 75df3e3..18915b7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,9 +30,6 @@ jobs: - name: Format check run: npm run format:check - - name: Lint check - run: npm run lint:check - - name: Type check run: npm run typecheck diff --git a/package.json b/package.json index 6c28767..bbf5074 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,6 @@ "fmt": "prettier --write \"src/**/*.ts\"", "format": "prettier --write \"src/**/*.ts\"", "format:check": "prettier --check \"src/**/*.ts\"", - "lint": "eslint \"src/**/*.ts\" --fix", - "lint:check": "eslint \"src/**/*.ts\"", "typecheck": "tsc --noEmit" }, "engines": { From a7a71f1d4e8f52217ab1fec90c2199bbb99b0f20 Mon Sep 17 00:00:00 2001 From: mikuto Date: Thu, 27 Nov 2025 13:23:09 +0900 Subject: [PATCH 13/15] =?UTF-8?q?change:=20format=E3=81=AE=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .prettierrc.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.prettierrc.json b/.prettierrc.json index f059a42..d2c9cb4 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -5,5 +5,6 @@ "printWidth": 80, "tabWidth": 2, "useTabs": false, - "endOfLine": "lf" + "endOfLine": "lf", + "arrowParens": "avoid" } From d8e8bbf3867b6ae6e551670e5faabf617ba2c4c7 Mon Sep 17 00:00:00 2001 From: mikuto Date: Thu, 27 Nov 2025 13:27:19 +0900 Subject: [PATCH 14/15] =?UTF-8?q?fmt:=20=E3=83=95=E3=82=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9E=E3=83=83=E3=83=88=E3=81=AE=E5=AE=9F=E6=96=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/discord/commands.ts | 12 ++++++------ src/discord/discordUI.ts | 9 +++------ src/handlers/buttonHandlers.ts | 15 ++++++++++++--- src/handlers/handlerUtils.ts | 6 ++++-- src/main.ts | 2 +- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/discord/commands.ts b/src/discord/commands.ts index 5495189..93d1791 100644 --- a/src/discord/commands.ts +++ b/src/discord/commands.ts @@ -8,7 +8,7 @@ export const commands = [ new SlashCommandBuilder() .setName("borrow") .setDescription("鍵を借りる(オプション:リマインダー開始時間を分で指定)") - .addIntegerOption((option) => + .addIntegerOption(option => option .setName("delay-minutes") .setDescription("指定分後にリマインダー開始(指定なしはデフォルト)") @@ -27,7 +27,7 @@ export const commands = [ new SlashCommandBuilder() .setName("reminder-time") .setDescription("リマインダー送信時間を設定(分)") - .addIntegerOption((option) => + .addIntegerOption(option => option .setName("minutes") .setDescription("リマインダー送信までの時間(分)") @@ -39,7 +39,7 @@ export const commands = [ new SlashCommandBuilder() .setName("check-time") .setDescription("定時チェックの時刻を設定") - .addIntegerOption((option) => + .addIntegerOption(option => option .setName("hour") .setDescription("時(0-23)") @@ -47,7 +47,7 @@ export const commands = [ .setMinValue(0) .setMaxValue(23) ) - .addIntegerOption((option) => + .addIntegerOption(option => option .setName("minute") .setDescription("分(0-59)") @@ -63,7 +63,7 @@ export const commands = [ new SlashCommandBuilder() .setName("owner") .setDescription("鍵の持ち主を変更") - .addUserOption((option) => + .addUserOption(option => option.setName("user").setDescription("新しい持ち主").setRequired(true) ), -].map((command) => command.toJSON()); +].map(command => command.toJSON()); diff --git a/src/discord/discordUI.ts b/src/discord/discordUI.ts index b448137..e421edd 100644 --- a/src/discord/discordUI.ts +++ b/src/discord/discordUI.ts @@ -63,10 +63,7 @@ export const mapLabel: Map = new Map([ // 各状態で表示すべきボタンを管理 export const mapButtons: Map> = new Map([ // 返却済み状態: 「借りる」ボタンのみ表示 - [ - "RETURN", - new ActionRowBuilder().addComponents(borrowButton), - ], + ["RETURN", new ActionRowBuilder().addComponents(borrowButton)], // 開けた状態: 「閉める」ボタンのみ表示 ["OPEN", new ActionRowBuilder().addComponents(closeButton)], // 閉めた状態: 「返す」と「開ける」ボタンを表示(リマインダーボタンは動的に追加) @@ -74,8 +71,8 @@ export const mapButtons: Map> = new Map([ "CLOSE", !modeConsole ? new ActionRowBuilder() - .addComponents(returnButton) - .addComponents(openButton) + .addComponents(returnButton) + .addComponents(openButton) : new ActionRowBuilder().addComponents(returnButton), ], ]); diff --git a/src/handlers/buttonHandlers.ts b/src/handlers/buttonHandlers.ts index baf9fd1..96d0373 100644 --- a/src/handlers/buttonHandlers.ts +++ b/src/handlers/buttonHandlers.ts @@ -6,8 +6,17 @@ import { ButtonInteraction, Colors, EmbedBuilder } from "discord.js"; import { Key } from "../types"; import { isKey, minutesToMs } from "../utils"; -import { getUserInfo, saveBorrowerInfo, getReminderSettingMessage } from "./handlerUtils"; -import { mapLabel, mapOpers, mapPresence, getButtons } from "../discord/discordUI"; +import { + getUserInfo, + saveBorrowerInfo, + getReminderSettingMessage, +} from "./handlerUtils"; +import { + mapLabel, + mapOpers, + mapPresence, + getButtons, +} from "../discord/discordUI"; import { sendReminderMessage, clearReminderTimer, @@ -105,7 +114,7 @@ export const handleButtonInteraction = async ( embed.addFields({ name: "⏰ リマインダー設定", value: getReminderSettingMessage(), - inline: false + inline: false, }); } else if (btnCustomId === "CLOSE") { embed.setTitle("閉めました"); diff --git a/src/handlers/handlerUtils.ts b/src/handlers/handlerUtils.ts index a9dccdd..406b2d2 100644 --- a/src/handlers/handlerUtils.ts +++ b/src/handlers/handlerUtils.ts @@ -46,11 +46,13 @@ export const getReminderSettingMessage = (): string => { * @param embed - 埋め込みメッセージ * @returns 更新された埋め込みメッセージ */ -export const addReminderSettingsToEmbed = (embed: EmbedBuilder): EmbedBuilder => { +export const addReminderSettingsToEmbed = ( + embed: EmbedBuilder +): EmbedBuilder => { embed.addFields({ name: "⏰ リマインダー設定", value: getReminderSettingMessage(), - inline: false + inline: false, }); return embed; }; diff --git a/src/main.ts b/src/main.ts index 9181eca..50279a8 100644 --- a/src/main.ts +++ b/src/main.ts @@ -42,7 +42,7 @@ export const setKeyStatus = (newStatus: Key): void => { * ボットが起動した時のイベントハンドラー * 初期設定とスラッシュコマンドの登録を行う */ -client.once("ready", async (bot) => { +client.once("ready", async bot => { console.log("Ready!"); // client.userが存在することを確認 From c3d67a25e0d4e162712eb8111e419269484eec13 Mon Sep 17 00:00:00 2001 From: mikuto Date: Thu, 4 Dec 2025 17:48:32 +0900 Subject: [PATCH 15/15] delete:eslint --- eslint.config.js | 45 --------------------------------------------- package.json | 1 - 2 files changed, 46 deletions(-) delete mode 100644 eslint.config.js diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index b85dace..0000000 --- a/eslint.config.js +++ /dev/null @@ -1,45 +0,0 @@ -const eslint = require('@eslint/js'); -const tseslint = require('@typescript-eslint/eslint-plugin'); -const tsparser = require('@typescript-eslint/parser'); -const prettier = require('eslint-config-prettier'); -const globals = require('globals'); - -module.exports = [ - eslint.configs.recommended, - { - files: ['src/**/*.ts'], - languageOptions: { - parser: tsparser, - parserOptions: { - ecmaVersion: 2021, - sourceType: 'module', - project: './tsconfig.json', - }, - globals: { - ...globals.node, - NodeJS: 'readonly', - }, - }, - plugins: { - '@typescript-eslint': tseslint, - }, - rules: { - ...tseslint.configs['flat/recommended-type-checked'].rules, - '@typescript-eslint/no-explicit-any': 'warn', - 'no-unused-vars': 'off', // TypeScript ESLintのno-unused-varsを使うため無効化 - '@typescript-eslint/no-unused-vars': [ - 'warn', - { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', - }, - ], - '@typescript-eslint/no-non-null-assertion': 'off', - 'no-console': 'off', - }, - }, - { - ignores: ['dist/**', 'node_modules/**', '*.js', '!eslint.config.js'], - }, - prettier, -]; diff --git a/package.json b/package.json index bbf5074..abeb766 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "author": "", "license": "ISC", "devDependencies": { - "@eslint/js": "^9.4.0", "@typescript-eslint/eslint-plugin": "^8.46.4", "@typescript-eslint/parser": "^8.46.4", "eslint": "^9.4.0",