Compare commits

..

No commits in common. "225c673fb97cf5c55f89fd977f9ea45c6e4ebd97" and "387d897ee0ac6ac455f5197aa7d9f1c2a01d1d91" have entirely different histories.

27 changed files with 240 additions and 274 deletions

View file

@ -68,7 +68,7 @@
"highlight.js": "11.8.0", "highlight.js": "11.8.0",
"html-minifier-terser": "^7.2.0", "html-minifier-terser": "^7.2.0",
"moment": "2.22.2", "moment": "2.22.2",
"puppeteer-core": "^23.4.0", "puppeteer-core": "^23.3.1",
"standalone-electron-types": "^1.0.0", "standalone-electron-types": "^1.0.0",
"stylelint": "^16.9.0", "stylelint": "^16.9.0",
"stylelint-config-standard": "^36.0.1", "stylelint-config-standard": "^36.0.1",
@ -77,7 +77,7 @@
"tsx": "^4.19.1", "tsx": "^4.19.1",
"type-fest": "^4.26.1", "type-fest": "^4.26.1",
"typescript": "^5.6.2", "typescript": "^5.6.2",
"typescript-eslint": "^8.6.0", "typescript-eslint": "^8.5.0",
"typescript-transform-paths": "^3.5.1", "typescript-transform-paths": "^3.5.1",
"zip-local": "^0.3.5" "zip-local": "^0.3.5"
}, },
@ -85,7 +85,6 @@
"pnpm": { "pnpm": {
"patchedDependencies": { "patchedDependencies": {
"@stylistic/eslint-plugin@2.8.0": "patches/@stylistic__eslint-plugin@2.8.0.patch", "@stylistic/eslint-plugin@2.8.0": "patches/@stylistic__eslint-plugin@2.8.0.patch",
"@typescript-eslint/eslint-plugin@8.6.0": "patches/@typescript-eslint__eslint-plugin@8.6.0.patch",
"eslint-plugin-path-alias@2.1.0": "patches/eslint-plugin-path-alias@2.1.0.patch", "eslint-plugin-path-alias@2.1.0": "patches/eslint-plugin-path-alias@2.1.0.patch",
"eslint@9.10.0": "patches/eslint@9.10.0.patch", "eslint@9.10.0": "patches/eslint@9.10.0.patch",
"standalone-electron-types@1.0.0": "patches/standalone-electron-types@1.0.0.patch", "standalone-electron-types@1.0.0": "patches/standalone-electron-types@1.0.0.patch",

View file

@ -32,7 +32,7 @@
"@stylistic/eslint-plugin": "^2.8.0", "@stylistic/eslint-plugin": "^2.8.0",
"@types/node": "^20.16.5", "@types/node": "^20.16.5",
"@types/semver": "^7.5.8", "@types/semver": "^7.5.8",
"@typescript-eslint/typescript-estree": "^8.6.0", "@typescript-eslint/typescript-estree": "^8.5.0",
"eslint": "^9.10.0", "eslint": "^9.10.0",
"eslint-plugin-check-file": "^2.8.0", "eslint-plugin-check-file": "^2.8.0",
"eslint-plugin-import-x": "^4.2.1", "eslint-plugin-import-x": "^4.2.1",
@ -40,11 +40,11 @@
"eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-unicorn": "^55.0.0", "eslint-plugin-unicorn": "^55.0.0",
"eslint-plugin-unused-imports": "^4.1.4", "eslint-plugin-unused-imports": "^4.1.4",
"puppeteer-core": "^23.4.0", "puppeteer-core": "^23.3.1",
"semver": "^7.6.3", "semver": "^7.6.3",
"tsx": "^4.19.1", "tsx": "^4.19.1",
"type-fest": "^4.26.1", "type-fest": "^4.26.1",
"typescript": "^5.6.2", "typescript": "^5.6.2",
"typescript-eslint": "^8.6.0" "typescript-eslint": "^8.5.0"
} }
} }

View file

@ -53,7 +53,6 @@ export declare class UserRecord<
isNonUserBot(): boolean; isNonUserBot(): boolean;
isPhoneVerified(): boolean; isPhoneVerified(): boolean;
isPomelo(): boolean; isPomelo(): boolean;
isProvisional(): boolean;
isSystemUser(): boolean; isSystemUser(): boolean;
isVerifiedBot(): boolean; isVerifiedBot(): boolean;
removeGuildAvatarHash(guildId: string): this; removeGuildAvatarHash(guildId: string): this;

File diff suppressed because one or more lines are too long

View file

@ -1,72 +0,0 @@
diff --git a/dist/rules/class-literal-property-style.js b/dist/rules/class-literal-property-style.js
index 2454cd853753408dca5335cf7cf7eccbd28d5255..c8c0aef6ef8fa1ce8beafeed06e68ebf88c3ec87 100644
--- a/dist/rules/class-literal-property-style.js
+++ b/dist/rules/class-literal-property-style.js
@@ -79,8 +79,7 @@ exports.default = (0, util_1.createRule)({
function excludeAssignedProperty(node) {
if ((0, util_1.isAssignee)(node)) {
const { excludeSet } = propertiesInfoStack[propertiesInfoStack.length - 1];
- const name = (0, util_1.getStaticStringValue)(node.property) ??
- context.sourceCode.getText(node.property);
+ const name = (0, util_1.getStaticMemberAccessValue)(node, context);
if (name) {
excludeSet.add(name);
}
diff --git a/dist/rules/class-methods-use-this.js b/dist/rules/class-methods-use-this.js
index 6d4a871cb4f6f57b97c338a472ea77dc10841706..acaa45fde2a8a9a2f9702cc80737c1b0bcc078ee 100644
--- a/dist/rules/class-methods-use-this.js
+++ b/dist/rules/class-methods-use-this.js
@@ -121,7 +121,7 @@ exports.default = (0, util_1.createRule)({
}
const hashIfNeeded = node.key.type === utils_1.AST_NODE_TYPES.PrivateIdentifier ? '#' : '';
const name = (0, util_1.getStaticMemberAccessValue)(node, context);
- return !exceptMethods.has(hashIfNeeded + (name ?? ''));
+ return (typeof name !== 'string' || !exceptMethods.has(hashIfNeeded + name));
}
/**
* Checks if we are leaving a function that is a method, and reports if 'this' has not been used.
diff --git a/dist/util/isArrayMethodCallWithPredicate.js b/dist/util/isArrayMethodCallWithPredicate.js
index eba71334f16a931ee51e9ad6d11cf4bba3c41a75..73a4044660d223450c54a9f9939631ad71562c05 100644
--- a/dist/util/isArrayMethodCallWithPredicate.js
+++ b/dist/util/isArrayMethodCallWithPredicate.js
@@ -42,7 +42,7 @@ function isArrayMethodCallWithPredicate(context, services, node) {
return false;
}
const staticAccessValue = (0, misc_1.getStaticMemberAccessValue)(node.callee, context);
- if (!staticAccessValue || !ARRAY_PREDICATE_FUNCTIONS.has(staticAccessValue)) {
+ if (!ARRAY_PREDICATE_FUNCTIONS.has(staticAccessValue)) {
return false;
}
const checker = services.program.getTypeChecker();
diff --git a/dist/util/misc.js b/dist/util/misc.js
index 4b4d937ee0f1c6bd51de3d5c7fb931648642abf6..826dcee437f9df7d81168bd5229c79a769692d89 100644
--- a/dist/util/misc.js
+++ b/dist/util/misc.js
@@ -198,13 +198,21 @@ function isParenlessArrowFunction(node, sourceCode) {
}
function getStaticMemberAccessValue(node, { sourceCode }) {
const key = node.type === utils_1.AST_NODE_TYPES.MemberExpression ? node.property : node.key;
- if (!node.computed) {
- return key.type === utils_1.AST_NODE_TYPES.Literal
- ? `${key.value}`
- : key.name;
+ const { type } = key;
+ if (type === utils_1.AST_NODE_TYPES.Literal) {
+ return String(key.value);
}
- const value = (0, astUtils_1.getStaticValue)(key, sourceCode.getScope(node))?.value;
- return value == null ? undefined : `${value}`;
+ if (!node.computed &&
+ (type === utils_1.AST_NODE_TYPES.Identifier ||
+ type === utils_1.AST_NODE_TYPES.PrivateIdentifier)) {
+ return key.name;
+ }
+ const result = (0, astUtils_1.getStaticValue)(key, sourceCode.getScope(node));
+ if (!result) {
+ return undefined;
+ }
+ const { value } = result;
+ return typeof value === 'symbol' ? value : String(value);
}
/**
* Answers whether the member expression looks like

View file

@ -27,9 +27,6 @@ patchedDependencies:
'@stylistic/eslint-plugin@2.8.0': '@stylistic/eslint-plugin@2.8.0':
hash: hgabz23qzpdlfvbmkgegp3so3q hash: hgabz23qzpdlfvbmkgegp3so3q
path: patches/@stylistic__eslint-plugin@2.8.0.patch path: patches/@stylistic__eslint-plugin@2.8.0.patch
'@typescript-eslint/eslint-plugin@8.6.0':
hash: rf3fsbgjxv7ylxpzkcvrp4lpfq
path: patches/@typescript-eslint__eslint-plugin@8.6.0.patch
eslint-plugin-path-alias@2.1.0: eslint-plugin-path-alias@2.1.0:
hash: japuwsqfkulviwgkm4kd2oi3ky hash: japuwsqfkulviwgkm4kd2oi3ky
path: patches/eslint-plugin-path-alias@2.1.0.patch path: patches/eslint-plugin-path-alias@2.1.0.patch
@ -131,7 +128,7 @@ importers:
version: 12.1.1(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) version: 12.1.1(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
eslint-plugin-unused-imports: eslint-plugin-unused-imports:
specifier: ^4.1.4 specifier: ^4.1.4
version: 4.1.4(@typescript-eslint/eslint-plugin@8.6.0(patch_hash=rf3fsbgjxv7ylxpzkcvrp4lpfq)(@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) version: 4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
highlight.js: highlight.js:
specifier: 11.8.0 specifier: 11.8.0
version: 11.8.0 version: 11.8.0
@ -142,8 +139,8 @@ importers:
specifier: 2.22.2 specifier: 2.22.2
version: 2.22.2 version: 2.22.2
puppeteer-core: puppeteer-core:
specifier: ^23.4.0 specifier: ^23.3.1
version: 23.4.0 version: 23.3.1
standalone-electron-types: standalone-electron-types:
specifier: ^1.0.0 specifier: ^1.0.0
version: 1.0.0(patch_hash=cvychuhjtbzvtowhc2efrgpqjq) version: 1.0.0(patch_hash=cvychuhjtbzvtowhc2efrgpqjq)
@ -169,8 +166,8 @@ importers:
specifier: ^5.6.2 specifier: ^5.6.2
version: 5.6.2 version: 5.6.2
typescript-eslint: typescript-eslint:
specifier: ^8.6.0 specifier: ^8.5.0
version: 8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2) version: 8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
typescript-transform-paths: typescript-transform-paths:
specifier: ^3.5.1 specifier: ^3.5.1
version: 3.5.1(patch_hash=67beklx2y5qvw7iy3wqqxjhwr4)(typescript@5.6.2) version: 3.5.1(patch_hash=67beklx2y5qvw7iy3wqqxjhwr4)(typescript@5.6.2)
@ -212,7 +209,7 @@ importers:
specifier: ^7.5.8 specifier: ^7.5.8
version: 7.5.8 version: 7.5.8
'@typescript-eslint/typescript-estree': '@typescript-eslint/typescript-estree':
specifier: ^8.6.0 specifier: ^8.5.0
version: 8.6.0(typescript@5.6.2) version: 8.6.0(typescript@5.6.2)
eslint: eslint:
specifier: ^9.10.0 specifier: ^9.10.0
@ -234,10 +231,10 @@ importers:
version: 55.0.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) version: 55.0.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
eslint-plugin-unused-imports: eslint-plugin-unused-imports:
specifier: ^4.1.4 specifier: ^4.1.4
version: 4.1.4(@typescript-eslint/eslint-plugin@8.6.0(patch_hash=rf3fsbgjxv7ylxpzkcvrp4lpfq)(@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) version: 4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
puppeteer-core: puppeteer-core:
specifier: ^23.4.0 specifier: ^23.3.1
version: 23.4.0 version: 23.3.1
semver: semver:
specifier: ^7.6.3 specifier: ^7.6.3
version: 7.6.3 version: 7.6.3
@ -251,8 +248,8 @@ importers:
specifier: ^5.6.2 specifier: ^5.6.2
version: 5.6.2 version: 5.6.2
typescript-eslint: typescript-eslint:
specifier: ^8.6.0 specifier: ^8.5.0
version: 8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2) version: 8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
packages/vencord-types: packages/vencord-types:
dependencies: dependencies:
@ -720,6 +717,17 @@ packages:
'@types/yazl@2.4.5': '@types/yazl@2.4.5':
resolution: {integrity: sha512-qpmPfx32HS7vlGJf7EsoM9qJnLZhXJBf1KH0hzfdc+D794rljQWh4H0I/UrZy+6Nhqn0l2jdBZXBGZtR1vnHqw==} resolution: {integrity: sha512-qpmPfx32HS7vlGJf7EsoM9qJnLZhXJBf1KH0hzfdc+D794rljQWh4H0I/UrZy+6Nhqn0l2jdBZXBGZtR1vnHqw==}
'@typescript-eslint/eslint-plugin@8.5.0':
resolution: {integrity: sha512-lHS5hvz33iUFQKuPFGheAB84LwcJ60G8vKnEhnfcK1l8kGVLro2SFYW6K0/tj8FUhRJ0VHyg1oAfg50QGbPPHw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
'@typescript-eslint/eslint-plugin@8.6.0': '@typescript-eslint/eslint-plugin@8.6.0':
resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==} resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -731,6 +739,16 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/parser@8.5.0':
resolution: {integrity: sha512-gF77eNv0Xz2UJg/NbpWJ0kqAm35UMsvZf1GHj8D9MRFTj/V3tAciIWXfmPLsAAF/vUlpWPvUDyH1jjsr0cMVWw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
'@typescript-eslint/parser@8.6.0': '@typescript-eslint/parser@8.6.0':
resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==} resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -741,10 +759,23 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/scope-manager@8.5.0':
resolution: {integrity: sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/scope-manager@8.6.0': '@typescript-eslint/scope-manager@8.6.0':
resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==} resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.5.0':
resolution: {integrity: sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
'@typescript-eslint/type-utils@8.6.0': '@typescript-eslint/type-utils@8.6.0':
resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==} resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -754,10 +785,23 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/types@8.5.0':
resolution: {integrity: sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/types@8.6.0': '@typescript-eslint/types@8.6.0':
resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==} resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.5.0':
resolution: {integrity: sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
'@typescript-eslint/typescript-estree@8.6.0': '@typescript-eslint/typescript-estree@8.6.0':
resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==} resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -767,12 +811,22 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/utils@8.5.0':
resolution: {integrity: sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
'@typescript-eslint/utils@8.6.0': '@typescript-eslint/utils@8.6.0':
resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==} resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
'@typescript-eslint/visitor-keys@8.5.0':
resolution: {integrity: sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/visitor-keys@8.6.0': '@typescript-eslint/visitor-keys@8.6.0':
resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==} resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -1093,8 +1147,8 @@ packages:
resolution: {integrity: sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==} resolution: {integrity: sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==}
engines: {node: '>= 0.6.0'} engines: {node: '>= 0.6.0'}
devtools-protocol@0.0.1342118: devtools-protocol@0.0.1330662:
resolution: {integrity: sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==} resolution: {integrity: sha512-pzh6YQ8zZfz3iKlCvgzVCu22NdpZ8hNmwU6WnQjNVquh0A9iVosPtNLWDwaWVGyrntQlltPFztTMK5Cg6lfCuw==}
diff@7.0.0: diff@7.0.0:
resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==}
@ -1953,8 +2007,8 @@ packages:
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
engines: {node: '>=6'} engines: {node: '>=6'}
puppeteer-core@23.4.0: puppeteer-core@23.3.1:
resolution: {integrity: sha512-fqkIP5FOcb38jfBj/OcBz1wFaI9nk40uQKSORvnXws6wCbep2dg8yxZ3ddJxBIfQsxoiEOvnrykFinUScrB/ew==} resolution: {integrity: sha512-m5gTpITEqqpSgAvPUI/Ch9igh5sNJV+BVVbqQMzqirRDVHDCkLGHaydEQZx2NZvSXdwCFrIV///cpSlX/uD0Sg==}
engines: {node: '>=18'} engines: {node: '>=18'}
q@1.5.1: q@1.5.1:
@ -2293,8 +2347,8 @@ packages:
typed-query-selector@2.12.0: typed-query-selector@2.12.0:
resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==}
typescript-eslint@8.6.0: typescript-eslint@8.5.0:
resolution: {integrity: sha512-eEhhlxCEpCd4helh3AO1hk0UP2MvbRi9CtIAJTVPQjuSXOOO2jsEacNi4UdcJzZJbeuVg1gMhtZ8UYb+NFYPrA==} resolution: {integrity: sha512-uD+XxEoSIvqtm4KE97etm32Tn5MfaZWgWfMMREStLxR6JzvHkc2Tkj7zhTEK5XmtpTmKHNnG8Sot6qDfhHtR1Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@ -2780,7 +2834,44 @@ snapshots:
dependencies: dependencies:
'@types/node': 20.16.5 '@types/node': 20.16.5
'@typescript-eslint/eslint-plugin@8.6.0(patch_hash=rf3fsbgjxv7ylxpzkcvrp4lpfq)(@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)': '@typescript-eslint/eslint-plugin@8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)':
dependencies:
'@eslint-community/regexpp': 4.11.0
'@typescript-eslint/parser': 8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
'@typescript-eslint/scope-manager': 8.5.0
'@typescript-eslint/type-utils': 8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
'@typescript-eslint/utils': 8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.5.0
eslint: 9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)':
dependencies:
'@eslint-community/regexpp': 4.11.0
'@typescript-eslint/parser': 8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
'@typescript-eslint/scope-manager': 8.6.0
'@typescript-eslint/type-utils': 8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
'@typescript-eslint/utils': 8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.6.0
eslint: 9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
optional: true
'@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.11.0 '@eslint-community/regexpp': 4.11.0
'@typescript-eslint/parser': 8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2) '@typescript-eslint/parser': 8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
@ -2797,6 +2888,20 @@ snapshots:
typescript: 5.6.2 typescript: 5.6.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
optional: true
'@typescript-eslint/parser@8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.5.0
'@typescript-eslint/types': 8.5.0
'@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.5.0
debug: 4.3.7
eslint: 9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)': '@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)':
dependencies: dependencies:
@ -2810,12 +2915,30 @@ snapshots:
typescript: 5.6.2 typescript: 5.6.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
optional: true
'@typescript-eslint/scope-manager@8.5.0':
dependencies:
'@typescript-eslint/types': 8.5.0
'@typescript-eslint/visitor-keys': 8.5.0
'@typescript-eslint/scope-manager@8.6.0': '@typescript-eslint/scope-manager@8.6.0':
dependencies: dependencies:
'@typescript-eslint/types': 8.6.0 '@typescript-eslint/types': 8.6.0
'@typescript-eslint/visitor-keys': 8.6.0 '@typescript-eslint/visitor-keys': 8.6.0
'@typescript-eslint/type-utils@8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)':
dependencies:
'@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.2)
'@typescript-eslint/utils': 8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
debug: 4.3.7
ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- eslint
- supports-color
'@typescript-eslint/type-utils@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)': '@typescript-eslint/type-utils@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)':
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
@ -2827,9 +2950,27 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- eslint - eslint
- supports-color - supports-color
optional: true
'@typescript-eslint/types@8.5.0': {}
'@typescript-eslint/types@8.6.0': {} '@typescript-eslint/types@8.6.0': {}
'@typescript-eslint/typescript-estree@8.5.0(typescript@5.6.2)':
dependencies:
'@typescript-eslint/types': 8.5.0
'@typescript-eslint/visitor-keys': 8.5.0
debug: 4.3.7
fast-glob: 3.3.2
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.6.3
ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2)': '@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2)':
dependencies: dependencies:
'@typescript-eslint/types': 8.6.0 '@typescript-eslint/types': 8.6.0
@ -2845,6 +2986,17 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
'@typescript-eslint/scope-manager': 8.5.0
'@typescript-eslint/types': 8.5.0
'@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.2)
eslint: 9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/utils@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)': '@typescript-eslint/utils@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
@ -2856,6 +3008,11 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
'@typescript-eslint/visitor-keys@8.5.0':
dependencies:
'@typescript-eslint/types': 8.5.0
eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@8.6.0': '@typescript-eslint/visitor-keys@8.6.0':
dependencies: dependencies:
'@typescript-eslint/types': 8.6.0 '@typescript-eslint/types': 8.6.0
@ -3037,9 +3194,9 @@ snapshots:
ansi-styles: 4.3.0 ansi-styles: 4.3.0
supports-color: 7.2.0 supports-color: 7.2.0
chromium-bidi@0.6.5(devtools-protocol@0.0.1342118): chromium-bidi@0.6.5(devtools-protocol@0.0.1330662):
dependencies: dependencies:
devtools-protocol: 0.0.1342118 devtools-protocol: 0.0.1330662
mitt: 3.0.1 mitt: 3.0.1
urlpattern-polyfill: 10.0.0 urlpattern-polyfill: 10.0.0
zod: 3.23.8 zod: 3.23.8
@ -3165,7 +3322,7 @@ snapshots:
dependency-graph@0.9.0: {} dependency-graph@0.9.0: {}
devtools-protocol@0.0.1342118: {} devtools-protocol@0.0.1330662: {}
diff@7.0.0: {} diff@7.0.0: {}
@ -3338,11 +3495,17 @@ snapshots:
semver: 7.6.3 semver: 7.6.3
strip-indent: 3.0.0 strip-indent: 3.0.0
eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.6.0(patch_hash=rf3fsbgjxv7ylxpzkcvrp4lpfq)(@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)):
dependencies: dependencies:
eslint: 9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint: 9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)
optionalDependencies: optionalDependencies:
'@typescript-eslint/eslint-plugin': 8.6.0(patch_hash=rf3fsbgjxv7ylxpzkcvrp4lpfq)(@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2) '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)):
dependencies:
eslint: 9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)
optionalDependencies:
'@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
eslint-scope@8.0.2: eslint-scope@8.0.2:
dependencies: dependencies:
@ -4086,12 +4249,12 @@ snapshots:
punycode@2.1.1: {} punycode@2.1.1: {}
puppeteer-core@23.4.0: puppeteer-core@23.3.1:
dependencies: dependencies:
'@puppeteer/browsers': 2.4.0 '@puppeteer/browsers': 2.4.0
chromium-bidi: 0.6.5(devtools-protocol@0.0.1342118) chromium-bidi: 0.6.5(devtools-protocol@0.0.1330662)
debug: 4.3.7 debug: 4.3.7
devtools-protocol: 0.0.1342118 devtools-protocol: 0.0.1330662
typed-query-selector: 2.12.0 typed-query-selector: 2.12.0
ws: 8.18.0 ws: 8.18.0
transitivePeerDependencies: transitivePeerDependencies:
@ -4476,11 +4639,11 @@ snapshots:
typed-query-selector@2.12.0: {} typed-query-selector@2.12.0: {}
typescript-eslint@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2): typescript-eslint@8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2):
dependencies: dependencies:
'@typescript-eslint/eslint-plugin': 8.6.0(patch_hash=rf3fsbgjxv7ylxpzkcvrp4lpfq)(@typescript-eslint/parser@8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2) '@typescript-eslint/eslint-plugin': 8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2))(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
'@typescript-eslint/parser': 8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2) '@typescript-eslint/parser': 8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
'@typescript-eslint/utils': 8.6.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2) '@typescript-eslint/utils': 8.5.0(eslint@9.10.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.6.2)
optionalDependencies: optionalDependencies:
typescript: 5.6.2 typescript: 5.6.2
transitivePeerDependencies: transitivePeerDependencies:

View file

@ -297,10 +297,10 @@ export default function PluginSettings() {
if (!pluginFilter(p)) continue; if (!pluginFilter(p)) continue;
const isRequired = p.required || p.isDependency || depMap[p.name]?.some(d => settings.plugins[d]!.enabled); const isRequired = p.required || depMap[p.name]?.some(d => settings.plugins[d]!.enabled);
if (isRequired) { if (isRequired) {
const tooltipText = p.required || !depMap[p.name] const tooltipText = p.required
? "This plugin is required for Vencord to function." ? "This plugin is required for Vencord to function."
: makeDependencyList(depMap[p.name]?.filter(d => settings.plugins[d]!.enabled)); : makeDependencyList(depMap[p.name]?.filter(d => settings.plugins[d]!.enabled));

View file

@ -143,7 +143,7 @@ export default definePlugin({
required: true, required: true,
description: "Helps us provide support to you", description: "Helps us provide support to you",
authors: [Devs.Ven], authors: [Devs.Ven],
dependencies: ["UserSettingsAPI", "MessageAccessoriesAPI"], dependencies: ["CommandsAPI", "UserSettingsAPI", "MessageAccessoriesAPI"],
settings, settings,

View file

@ -19,8 +19,8 @@ interface ActivityButton {
export interface TrackData { export interface TrackData {
name: string; name: string;
album?: string; album: string;
artist?: string; artist: string;
appleMusicLink?: string; appleMusicLink?: string;
songLink?: string; songLink?: string;
@ -28,8 +28,8 @@ export interface TrackData {
albumArtwork?: string; albumArtwork?: string;
artistArtwork?: string; artistArtwork?: string;
playerPosition?: number; playerPosition: number;
duration?: number; duration: number;
} }
const enum AssetImageType { const enum AssetImageType {
@ -126,8 +126,8 @@ const settings = definePluginSettings({
function customFormat(formatStr: string, data: TrackData) { function customFormat(formatStr: string, data: TrackData) {
return formatStr return formatStr
.replaceAll("{name}", data.name) .replaceAll("{name}", data.name)
.replaceAll("{album}", data.album ?? "") .replaceAll("{album}", data.album)
.replaceAll("{artist}", data.artist ?? ""); .replaceAll("{artist}", data.artist);
} }
async function getImageAsset(type: AssetImageType, data: TrackData) { async function getImageAsset(type: AssetImageType, data: TrackData) {
@ -184,16 +184,14 @@ export default definePlugin({
const assets: ActivityAssets = {}; const assets: ActivityAssets = {};
const isRadio = Number.isNaN(trackData.duration) && (trackData.playerPosition === 0);
if (settings.store.largeImageType !== AssetImageType.Disabled) { if (settings.store.largeImageType !== AssetImageType.Disabled) {
assets.large_image = largeImageAsset; assets.large_image = largeImageAsset;
if (!isRadio) assets.large_text = customFormat(settings.store.largeTextString, trackData); assets.large_text = customFormat(settings.store.largeTextString, trackData);
} }
if (settings.store.smallImageType !== AssetImageType.Disabled) { if (settings.store.smallImageType !== AssetImageType.Disabled) {
assets.small_image = smallImageAsset; assets.small_image = smallImageAsset;
if (!isRadio) assets.small_text = customFormat(settings.store.smallTextString, trackData); assets.small_text = customFormat(settings.store.smallTextString, trackData);
} }
const buttons: ActivityButton[] = []; const buttons: ActivityButton[] = [];
@ -221,17 +219,17 @@ export default definePlugin({
name: customFormat(settings.store.nameString, trackData), name: customFormat(settings.store.nameString, trackData),
details: customFormat(settings.store.detailsString, trackData), details: customFormat(settings.store.detailsString, trackData),
state: isRadio ? undefined : customFormat(settings.store.stateString, trackData), state: customFormat(settings.store.stateString, trackData),
timestamps: (trackData.playerPosition && trackData.duration && settings.store.enableTimestamps) ? { timestamps: (settings.store.enableTimestamps ? {
start: Date.now() - (trackData.playerPosition * 1000), start: Date.now() - (trackData.playerPosition * 1000),
end: Date.now() - (trackData.playerPosition * 1000) + (trackData.duration * 1000), end: Date.now() - (trackData.playerPosition * 1000) + (trackData.duration * 1000),
} : undefined, } : undefined),
assets, assets,
buttons: !isRadio && buttons.length ? buttons.map(v => v.label) : undefined, buttons: buttons.length ? buttons.map(v => v.label) : undefined,
metadata: !isRadio && buttons.length ? { button_urls: buttons.map(v => v.url) } : undefined, metadata: { button_urls: buttons.length ? buttons.map(v => v.url) : undefined },
type: settings.store.activityType, type: settings.store.activityType,
flags: ActivityFlags.INSTANCE, flags: ActivityFlags.INSTANCE,

View file

@ -1,68 +0,0 @@
/*
* Vencord, a Discord client mod
* Copyright (c) 2024 Vendicated and contributors
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import { openPluginModal } from "@components/PluginSettings/PluginModal";
import { isObjectEmpty } from "@utils/misc";
import { AlertActionCreators, i18n, Menu, useMemo, useState } from "@webpack/common";
import Plugins from "~plugins";
function onRestartNeeded() {
AlertActionCreators.show({
title: "Restart required",
body: <p>You have changed settings that require a restart.</p>,
confirmText: "Restart now",
cancelText: "Later!",
onConfirm: () => { location.reload(); }
});
}
export default function PluginsSubmenu() {
const sortedPlugins = useMemo(() => Object.values(Plugins)
.sort((a, b) => a.name.localeCompare(b.name)), []);
const [query, setQuery] = useState("");
const search = query.toLowerCase();
const include = (p: typeof Plugins[keyof typeof Plugins]) => (
Vencord.Plugins.isPluginEnabled(p.name)
&& p.options && !isObjectEmpty(p.options)
&& (
p.name.toLowerCase().includes(search)
|| p.description.toLowerCase().includes(search)
|| p.tags?.some(t => t.toLowerCase().includes(search))
)
);
const plugins = sortedPlugins.filter(include);
return (
<>
<Menu.MenuControlItem
id="vc-plugins-search"
control={(props: any, ref: any) => (
<Menu.MenuSearchControl
{...props}
query={query}
onChange={setQuery}
ref={ref}
placeholder={i18n.Messages.SEARCH}
/>
)}
/>
{!!plugins.length && <Menu.MenuSeparator />}
{plugins.map(p => (
<Menu.MenuItem
key={p.name}
id={p.name}
label={p.name}
action={() => { openPluginModal(p, onRestartNeeded); }}
/>
))}
</>
);
}

View file

@ -13,9 +13,7 @@ import { waitFor } from "@webpack";
import { ComponentDispatch, FocusLock, i18n, Menu, useEffect, useRef } from "@webpack/common"; import { ComponentDispatch, FocusLock, i18n, Menu, useEffect, useRef } from "@webpack/common";
import type { HTMLAttributes, ReactElement } from "react"; import type { HTMLAttributes, ReactElement } from "react";
import PluginsSubmenu from "./PluginsSubmenu"; type SettingsEntry = { section: string; label: string; };
interface SettingsEntry { section: string; label: string; }
const cl = classNameFactory(""); const cl = classNameFactory("");
let Classes: Record<string, string>; let Classes: Record<string, string>;
@ -120,21 +118,13 @@ export default definePlugin({
}, },
{ // Settings cog context menu { // Settings cog context menu
find: "Messages.USER_SETTINGS_ACTIONS_MENU_LABEL", find: "Messages.USER_SETTINGS_ACTIONS_MENU_LABEL",
replacement: [ replacement: {
{
match: /(EXPERIMENTS:.+?)(\(0,\i.\i\)\(\))(?=\.filter\(\i=>\{let\{section:\i\}=)/, match: /(EXPERIMENTS:.+?)(\(0,\i.\i\)\(\))(?=\.filter\(\i=>\{let\{section:\i\}=)/,
replace: "$1$self.wrapMenu($2)" replace: "$1$self.wrapMenu($2)"
},
{
match: /case \i\.\i\.DEVELOPER_OPTIONS:return \i;/,
replace: "$&case 'VencordPlugins':return $self.PluginsSubmenu();"
} }
] }
},
], ],
PluginsSubmenu,
// This is the very outer layer of the entire ui, so we can't wrap this in an ErrorBoundary // This is the very outer layer of the entire ui, so we can't wrap this in an ErrorBoundary
// without possibly also catching unrelated errors of children. // without possibly also catching unrelated errors of children.
// //

View file

@ -126,7 +126,7 @@ export default definePlugin({
} }
}, },
{ {
find: '"_handleLocalVideoDisabled: ', find: '"Handling ping: "',
predicate: () => settings.store.disableNoisyLoggers, predicate: () => settings.store.disableNoisyLoggers,
replacement: { replacement: {
match: /new \i\.\i\("RTCConnection\("\.concat.+?\)\)(?=,)/, match: /new \i\.\i\("RTCConnection\("\.concat.+?\)\)(?=,)/,

View file

@ -23,13 +23,12 @@ import { ErrorCard } from "@components/ErrorCard";
import { Devs } from "@utils/constants"; import { Devs } from "@utils/constants";
import { Margins } from "@utils/margins"; import { Margins } from "@utils/margins";
import definePlugin, { OptionType } from "@utils/types"; import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy, findLazy } from "@webpack"; import { findByPropsLazy } from "@webpack";
import { Forms } from "@webpack/common"; import { Forms } from "@webpack/common";
import hideBugReport from "./hideBugReport.css?managed"; import hideBugReport from "./hideBugReport.css?managed";
const KbdStyles: Record<string, string> = findByPropsLazy("key", "combo"); const KbdStyles: Record<string, string> = findByPropsLazy("key", "combo");
const BugReporterExperiment = findLazy(m => m?.definition?.id === "2024-09_bug_reporter");
const settings = definePluginSettings({ const settings = definePluginSettings({
toolbarDevMenu: { toolbarDevMenu: {
@ -79,8 +78,8 @@ export default definePlugin({
{ {
find: "toolbar:function", find: "toolbar:function",
replacement: { replacement: {
match: /hasBugReporterAccess:(\i)/, match: /\i\.isStaff\(\)/,
replace: "_hasBugReporterAccess:$1=true" replace: "true"
}, },
predicate: () => settings.store.toolbarDevMenu predicate: () => settings.store.toolbarDevMenu
}, },
@ -92,21 +91,10 @@ export default definePlugin({
match: /\i\.isDM\(\)\|\|\i\.isThread\(\)/, match: /\i\.isDM\(\)\|\|\i\.isThread\(\)/,
replace: "false", replace: "false",
} }
},
// enable option to always record clips even if you are not streaming
{
find: "isDecoupledGameClippingEnabled(){",
replacement: {
match: /\i\.isStaff\(\)/,
replace: "true"
}
} }
], ],
start() { start() { enableStyle(hideBugReport); },
if (!BugReporterExperiment.getCurrentConfig().hasBugReporterAccess)
enableStyle(hideBugReport);
},
stop() { disableStyle(hideBugReport); }, stop() { disableStyle(hideBugReport); },
settingsAboutComponent() { settingsAboutComponent() {

View file

@ -25,6 +25,7 @@ export default definePlugin({
name: "FriendInvites", name: "FriendInvites",
description: "Create and manage friend invite links via slash commands (/create friend invite, /view friend invites, /revoke friend invites).", description: "Create and manage friend invite links via slash commands (/create friend invite, /view friend invites, /revoke friend invites).",
authors: [Devs.afn, Devs.Dziurwa], authors: [Devs.afn, Devs.Dziurwa],
dependencies: ["CommandsAPI"],
commands: [ commands: [
{ {
name: "create friend invite", name: "create friend invite",

View file

@ -105,11 +105,6 @@ for (const p of pluginsValues) if (isPluginEnabled(p.name)) {
settings[d]!.enabled = true; settings[d]!.enabled = true;
dep.isDependency = true; dep.isDependency = true;
}); });
if (p.commands?.length) {
Plugins.CommandsAPI!.isDependency = true;
settings.CommandsAPI!.enabled = true;
}
} }
for (const p of pluginsValues) { for (const p of pluginsValues) {

View file

@ -86,6 +86,7 @@ export default definePlugin({
default: true default: true
} }
}, },
dependencies: ["CommandsAPI"],
async start() { async start() {
for (const tag of await getTags()) for (const tag of await getTags())

View file

@ -33,6 +33,7 @@ export default definePlugin({
name: "MoreCommands", name: "MoreCommands",
description: "echo, lenny, mock", description: "echo, lenny, mock",
authors: [Devs.Arjix, Devs.echo, Devs.Samu], authors: [Devs.Arjix, Devs.echo, Devs.Samu],
dependencies: ["CommandsAPI"],
commands: [ commands: [
{ {
name: "echo", name: "echo",

View file

@ -24,6 +24,7 @@ export default definePlugin({
name: "MoreKaomoji", name: "MoreKaomoji",
description: "Adds more Kaomoji to discord. ヽ(´▽`)/", description: "Adds more Kaomoji to discord. ヽ(´▽`)/",
authors: [Devs.JacobTm], authors: [Devs.JacobTm],
dependencies: ["CommandsAPI"],
commands: [ commands: [
{ name: "dissatisfaction", description: " " }, { name: "dissatisfaction", description: " " },
{ name: "smug", description: "ಠ_ಠ" }, { name: "smug", description: "ಠ_ಠ" },

View file

@ -89,6 +89,7 @@ export default definePlugin({
name: "petpet", name: "petpet",
description: "Adds a /petpet slash command to create headpet gifs from any image", description: "Adds a /petpet slash command to create headpet gifs from any image",
authors: [Devs.Ven], authors: [Devs.Ven],
dependencies: ["CommandsAPI"],
commands: [ commands: [
{ {
inputType: ApplicationCommandInputType.BUILT_IN, inputType: ApplicationCommandInputType.BUILT_IN,

View file

@ -91,7 +91,7 @@ export default definePlugin({
} }
}, },
{ {
find: ".PANEL,interactionType:", find: ".PANEL,isInteractionSource:",
replacement: { replacement: {
match: /{profileType:\i\.\i\.PANEL,children:\[/, match: /{profileType:\i\.\i\.PANEL,children:\[/,
replace: "$&$self.BiteSizeReviewsButton({user:arguments[0].user})," replace: "$&$self.BiteSizeReviewsButton({user:arguments[0].user}),"

View file

@ -91,7 +91,7 @@ export default definePlugin({
name: "SilentTyping", name: "SilentTyping",
authors: [Devs.Ven, Devs.Rini, Devs.ImBanana], authors: [Devs.Ven, Devs.Rini, Devs.ImBanana],
description: "Hide that you are typing", description: "Hide that you are typing",
dependencies: ["ChatInputButtonAPI"], dependencies: ["CommandsAPI", "ChatInputButtonAPI"],
settings, settings,
contextMenus: { contextMenus: {
"textarea-context": ChatBarContextCheckbox "textarea-context": ChatBarContextCheckbox

View file

@ -79,6 +79,7 @@ export default definePlugin({
name: "SpotifyShareCommands", name: "SpotifyShareCommands",
description: "Share your current Spotify track, album or artist via slash command (/track, /album, /artist)", description: "Share your current Spotify track, album or artist via slash command (/track, /album, /artist)",
authors: [Devs.katlyn], authors: [Devs.katlyn],
dependencies: ["CommandsAPI"],
commands: [ commands: [
{ {
name: "track", name: "track",

View file

@ -74,13 +74,13 @@ export interface PluginDef {
stop?: () => void; stop?: () => void;
patches?: Omit<Patch, "plugin">[]; patches?: Omit<Patch, "plugin">[];
/** /**
* List of commands that your plugin wants to register * List of commands. If you specify these, you must add CommandsAPI to dependencies
*/ */
commands?: Command[]; commands?: Command[];
/** /**
* A list of other plugins that your plugin depends on. * A list of other plugins that your plugin depends on.
* These will automatically be enabled and loaded before your plugin * These will automatically be enabled and loaded before your plugin
* Generally these will be API plugins * Common examples are CommandsAPI, MessageEventsAPI...
*/ */
dependencies?: string[]; dependencies?: string[];
/** /**

View file

@ -29,9 +29,6 @@ export let Forms = {} as {
FormText: t.FormText; FormText: t.FormText;
}; };
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
export let Icons = {} as t.Icons;
export let Card: t.Card; export let Card: t.Card;
export let Button: t.Button; export let Button: t.Button;
export let Switch: t.Switch; export let Switch: t.Switch;
@ -90,5 +87,4 @@ waitFor(["FormItem", "Button"], m => {
Heading Heading
} = m); } = m);
Forms = m; Forms = m;
Icons = m;
}); });

View file

@ -19,8 +19,6 @@
import type { Theme } from "@vencord/discord-types"; import type { Theme } from "@vencord/discord-types";
import type { ComponentType, CSSProperties, FunctionComponent, HtmlHTMLAttributes, HTMLProps, JSX, Key, KeyboardEvent, MouseEvent, PropsWithChildren, PropsWithRef, ReactNode, Ref, RefObject } from "react"; import type { ComponentType, CSSProperties, FunctionComponent, HtmlHTMLAttributes, HTMLProps, JSX, Key, KeyboardEvent, MouseEvent, PropsWithChildren, PropsWithRef, ReactNode, Ref, RefObject } from "react";
import type { IconNames } from "./iconNames";
export type TextVariant = "heading-sm/normal" | "heading-sm/medium" | "heading-sm/semibold" | "heading-sm/bold" | "heading-md/normal" | "heading-md/medium" | "heading-md/semibold" | "heading-md/bold" | "heading-lg/normal" | "heading-lg/medium" | "heading-lg/semibold" | "heading-lg/bold" | "heading-xl/normal" | "heading-xl/medium" | "heading-xl/bold" | "heading-xxl/normal" | "heading-xxl/medium" | "heading-xxl/bold" | "eyebrow" | "heading-deprecated-14/normal" | "heading-deprecated-14/medium" | "heading-deprecated-14/bold" | "text-xxs/normal" | "text-xxs/medium" | "text-xxs/semibold" | "text-xxs/bold" | "text-xs/normal" | "text-xs/medium" | "text-xs/semibold" | "text-xs/bold" | "text-sm/normal" | "text-sm/medium" | "text-sm/semibold" | "text-sm/bold" | "text-md/normal" | "text-md/medium" | "text-md/semibold" | "text-md/bold" | "text-lg/normal" | "text-lg/medium" | "text-lg/semibold" | "text-lg/bold" | "display-sm" | "display-md" | "display-lg" | "code"; export type TextVariant = "heading-sm/normal" | "heading-sm/medium" | "heading-sm/semibold" | "heading-sm/bold" | "heading-md/normal" | "heading-md/medium" | "heading-md/semibold" | "heading-md/bold" | "heading-lg/normal" | "heading-lg/medium" | "heading-lg/semibold" | "heading-lg/bold" | "heading-xl/normal" | "heading-xl/medium" | "heading-xl/bold" | "heading-xxl/normal" | "heading-xxl/medium" | "heading-xxl/bold" | "eyebrow" | "heading-deprecated-14/normal" | "heading-deprecated-14/medium" | "heading-deprecated-14/bold" | "text-xxs/normal" | "text-xxs/medium" | "text-xxs/semibold" | "text-xxs/bold" | "text-xs/normal" | "text-xs/medium" | "text-xs/semibold" | "text-xs/bold" | "text-sm/normal" | "text-sm/medium" | "text-sm/semibold" | "text-sm/bold" | "text-md/normal" | "text-md/medium" | "text-md/semibold" | "text-md/bold" | "text-lg/normal" | "text-lg/medium" | "text-lg/semibold" | "text-lg/bold" | "display-sm" | "display-md" | "display-lg" | "code";
export type FormTextTypes = Record<"DEFAULT" | "INPUT_PLACEHOLDER" | "DESCRIPTION" | "LABEL_BOLD" | "LABEL_SELECTED" | "LABEL_DESCRIPTOR" | "ERROR" | "SUCCESS", string>; export type FormTextTypes = Record<"DEFAULT" | "INPUT_PLACEHOLDER" | "DESCRIPTION" | "LABEL_BOLD" | "LABEL_SELECTED" | "LABEL_DESCRIPTOR" | "ERROR" | "SUCCESS", string>;
export type HeadingTag = `h${1 | 2 | 3 | 4 | 5 | 6}`; export type HeadingTag = `h${1 | 2 | 3 | 4 | 5 | 6}`;
@ -71,7 +69,7 @@ export type FormText = ComponentType<PropsWithChildren<{
}> & TextProps> & { Types: FormTextTypes; }; }> & TextProps> & { Types: FormTextTypes; };
export type Tooltip = ComponentType<{ export type Tooltip = ComponentType<{
text: ReactNode | ComponentType; text: ReactNode;
children: FunctionComponent<{ children: FunctionComponent<{
onClick: () => void; onClick: () => void;
onMouseEnter: () => void; onMouseEnter: () => void;
@ -493,13 +491,6 @@ export type FocusLock = ComponentType<PropsWithChildren<{
containerRef: RefObject<HTMLElement>; containerRef: RefObject<HTMLElement>;
}>>; }>>;
export type Icon = ComponentType<JSX.IntrinsicElements["svg"] & {
size?: string;
colorClass?: string;
} & Record<string, any>>;
export type Icons = Record<IconNames, Icon>;
export interface Tokens { export interface Tokens {
colors: Record<string, { colors: Record<string, {
css: string; css: string;

File diff suppressed because one or more lines are too long

View file

@ -72,11 +72,6 @@ export interface Menu {
onChange: (value: number) => void; onChange: (value: number) => void;
renderValue?: (value: number) => string; renderValue?: (value: number) => string;
}>; }>;
MenuSearchControl: RC<{
query: string;
onChange: (query: string) => void;
placeholder?: string;
}>;
} }
export interface ContextMenuApi { export interface ContextMenuApi {