From 449886095db2258f9bd7c582c338d0658bd038b4 Mon Sep 17 00:00:00 2001 From: ZRunner Date: Tue, 13 May 2025 21:59:07 +0200 Subject: [PATCH 1/7] feat(config): add quickrss_max_number --- src/database/guild-config/guild-config-options.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/database/guild-config/guild-config-options.json b/src/database/guild-config/guild-config-options.json index 2958840..320ddeb 100644 --- a/src/database/guild-config/guild-config-options.json +++ b/src/database/guild-config/guild-config-options.json @@ -40,6 +40,13 @@ "default": 10, "is_listed": false }, + "quickrss_max_number": { + "type": "int", + "min": 0, + "max": null, + "default": 3, + "is_listed": false + }, "streamers_max_number": { "type": "int", "min": 0, From f7c1596558b1b255a4b200a0c4f0ed2e4e1437f6 Mon Sep 17 00:00:00 2001 From: ZRunner Date: Thu, 12 Jun 2025 08:38:01 +0200 Subject: [PATCH 2/7] feat(deps): update d.js --- package-lock.json | 96 ++++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 51 insertions(+), 47 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6a53ce0..1132d07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "compression": "^1.7.4", "console-stamp": "^3.1.1", "cors": "^2.8.5", - "discord.js": "^14.18.0", + "discord.js": "^14.19.0", "dotenv": "^16.3.1", "express": "^5.0.1", "express-rate-limit": "^7.4.0", @@ -55,15 +55,15 @@ } }, "node_modules/@discordjs/builders": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.10.1.tgz", - "integrity": "sha512-OWo1fY4ztL1/M/DUyRPShB4d/EzVfuUvPTRRHRIt/YxBrUYSz0a+JicD5F5zHFoNs2oTuWavxCOVFV1UljHTng==", + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.11.2.tgz", + "integrity": "sha512-F1WTABdd8/R9D1icJzajC4IuLyyS8f3rTOz66JsSI3pKvpCAtsMBweu8cyNYsIyvcrKAVn9EPK+Psoymq+XC0A==", "license": "Apache-2.0", "dependencies": { - "@discordjs/formatters": "^0.6.0", + "@discordjs/formatters": "^0.6.1", "@discordjs/util": "^1.1.1", "@sapphire/shapeshift": "^4.0.0", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3" @@ -85,12 +85,12 @@ } }, "node_modules/@discordjs/formatters": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.0.tgz", - "integrity": "sha512-YIruKw4UILt/ivO4uISmrGq2GdMY6EkoTtD0oS0GvkJFRZbTSdPhzYiUILbJ/QslsvC9H9nTgGgnarnIl4jMfw==", + "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.114" + "discord-api-types": "^0.38.1" }, "engines": { "node": ">=16.11.0" @@ -100,9 +100,9 @@ } }, "node_modules/@discordjs/rest": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.4.3.tgz", - "integrity": "sha512-+SO4RKvWsM+y8uFHgYQrcTl/3+cY02uQOH7/7bKbVZsTfrfpoE62o5p+mmV+s7FVhTX82/kQUGGbu4YlV60RtA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.5.0.tgz", + "integrity": "sha512-PWhchxTzpn9EV3vvPRpwS0EE2rNYB9pvzDU/eLLW3mByJl0ZHZjHI2/wA8EbH2gRMQV7nu+0FoDF84oiPl8VAQ==", "license": "Apache-2.0", "dependencies": { "@discordjs/collection": "^2.1.1", @@ -110,7 +110,7 @@ "@sapphire/async-queue": "^1.5.3", "@sapphire/snowflake": "^3.5.3", "@vladfrangu/async_event_emitter": "^2.4.6", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.1" @@ -147,18 +147,18 @@ } }, "node_modules/@discordjs/ws": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.1.tgz", - "integrity": "sha512-PBvenhZG56a6tMWF/f4P6f4GxZKJTBG95n7aiGSPTnodmz4N5g60t79rSIAq7ywMbv8A4jFtexMruH+oe51aQQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.2.tgz", + "integrity": "sha512-dyfq7yn0wO0IYeYOs3z79I6/HumhmKISzFL0Z+007zQJMtAFGtt3AEoq1nuLXtcunUE5YYYQqgKvybXukAK8/w==", "license": "Apache-2.0", "dependencies": { "@discordjs/collection": "^2.1.0", - "@discordjs/rest": "^2.4.3", + "@discordjs/rest": "^2.5.0", "@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.37.119", + "discord-api-types": "^0.38.1", "tslib": "^2.6.2", "ws": "^8.17.0" }, @@ -612,9 +612,9 @@ } }, "node_modules/@types/ws": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", - "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", + "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": "*" @@ -813,9 +813,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -1236,9 +1236,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -1709,27 +1709,31 @@ } }, "node_modules/discord-api-types": { - "version": "0.37.119", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.119.tgz", - "integrity": "sha512-WasbGFXEB+VQWXlo6IpW3oUv73Yuau1Ig4AZF/m13tXcTKnMpc/mHjpztIlz4+BM9FG9BHQkEXiPto3bKduQUg==", - "license": "MIT" + "version": "0.38.11", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.11.tgz", + "integrity": "sha512-XN0qhcQpetkyb/49hcDHuoeUPsQqOkb17wbV/t48gUkoEDi4ajhsxqugGcxvcN17BBtI9FPPWEgzv6IhQmCwyw==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] }, "node_modules/discord.js": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.18.0.tgz", - "integrity": "sha512-SvU5kVUvwunQhN2/+0t55QW/1EHfB1lp0TtLZUSXVHDmyHTrdOj5LRKdR0zLcybaA15F+NtdWuWmGOX9lE+CAw==", + "version": "14.19.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.19.3.tgz", + "integrity": "sha512-lncTRk0k+8Q5D3nThnODBR8fR8x2fM798o8Vsr40Krx0DjPwpZCuxxTcFMrXMQVOqM1QB9wqWgaXPg3TbmlHqA==", "license": "Apache-2.0", "dependencies": { - "@discordjs/builders": "^1.10.1", + "@discordjs/builders": "^1.11.2", "@discordjs/collection": "1.5.3", - "@discordjs/formatters": "^0.6.0", - "@discordjs/rest": "^2.4.3", + "@discordjs/formatters": "^0.6.1", + "@discordjs/rest": "^2.5.0", "@discordjs/util": "^1.1.1", - "@discordjs/ws": "^1.2.1", + "@discordjs/ws": "^1.2.2", "@sapphire/snowflake": "3.5.3", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", + "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.1" }, @@ -3090,9 +3094,9 @@ "license": "ISC" }, "node_modules/magic-bytes.js": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", - "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==", + "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": { @@ -4657,9 +4661,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index 4ba7cbc..1ac8792 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "compression": "^1.7.4", "console-stamp": "^3.1.1", "cors": "^2.8.5", - "discord.js": "^14.18.0", + "discord.js": "^14.19.0", "dotenv": "^16.3.1", "express": "^5.0.1", "express-rate-limit": "^7.4.0", From cc8f5d257f1aa4dd854d1e2e501ad8a414170c00 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Jul 2025 07:04:30 +0000 Subject: [PATCH 3/7] build(deps): bump on-headers, compression and morgan Bumps [on-headers](https://github.com/jshttp/on-headers) to 1.1.0 and updates ancestor dependencies [on-headers](https://github.com/jshttp/on-headers), [compression](https://github.com/expressjs/compression) and [morgan](https://github.com/expressjs/morgan). These dependencies need to be updated together. Updates `on-headers` from 1.0.2 to 1.1.0 - [Release notes](https://github.com/jshttp/on-headers/releases) - [Changelog](https://github.com/jshttp/on-headers/blob/master/HISTORY.md) - [Commits](https://github.com/jshttp/on-headers/compare/v1.0.2...v1.1.0) Updates `compression` from 1.7.5 to 1.8.1 - [Release notes](https://github.com/expressjs/compression/releases) - [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/compression/compare/1.7.5...v1.8.1) Updates `morgan` from 1.10.0 to 1.10.1 - [Release notes](https://github.com/expressjs/morgan/releases) - [Changelog](https://github.com/expressjs/morgan/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/morgan/compare/1.10.0...1.10.1) --- updated-dependencies: - dependency-name: on-headers dependency-version: 1.1.0 dependency-type: indirect - dependency-name: compression dependency-version: 1.8.1 dependency-type: direct:production - dependency-name: morgan dependency-version: 1.10.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package-lock.json | 26 +++++++++++++------------- package.json | 4 ++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1132d07..b26ffdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "GPL-3.0", "dependencies": { "cache-manager": "^5.4.0", - "compression": "^1.7.4", + "compression": "^1.8.1", "console-stamp": "^3.1.1", "cors": "^2.8.5", "discord.js": "^14.19.0", @@ -20,7 +20,7 @@ "json-bigint": "^1.0.0", "jsonwebtoken": "^9.0.1", "mariadb": "^3.2.0", - "morgan": "^1.10.0", + "morgan": "^1.10.1", "rss-parser": "github:ZRunner/rss-parser", "typescript-eslint": "^7.1.1", "typia": "^7.0.0" @@ -1507,16 +1507,16 @@ } }, "node_modules/compression": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", - "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", - "on-headers": "~1.0.2", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" }, @@ -3263,16 +3263,16 @@ } }, "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", "license": "MIT", "dependencies": { "basic-auth": "~2.0.1", "debug": "2.6.9", "depd": "~2.0.0", "on-finished": "~2.3.0", - "on-headers": "~1.0.2" + "on-headers": "~1.1.0" }, "engines": { "node": ">= 0.8.0" @@ -3438,9 +3438,9 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "license": "MIT", "engines": { "node": ">= 0.8" diff --git a/package.json b/package.json index 1ac8792..7f16af0 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ }, "dependencies": { "cache-manager": "^5.4.0", - "compression": "^1.7.4", + "compression": "^1.8.1", "console-stamp": "^3.1.1", "cors": "^2.8.5", "discord.js": "^14.19.0", @@ -48,7 +48,7 @@ "json-bigint": "^1.0.0", "jsonwebtoken": "^9.0.1", "mariadb": "^3.2.0", - "morgan": "^1.10.0", + "morgan": "^1.10.1", "rss-parser": "github:ZRunner/rss-parser", "typescript-eslint": "^7.1.1", "typia": "^7.0.0" From 75bb44b38bfd02cb5c6381cb8e207c34411e15ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 26 Jul 2025 16:43:26 +0000 Subject: [PATCH 4/7] build(deps): bump undici and discord.js Bumps [undici](https://github.com/nodejs/undici) to 6.21.3 and updates ancestor dependency [discord.js](https://github.com/discordjs/discord.js/tree/HEAD/packages/discord.js). These dependencies need to be updated together. Updates `undici` from 6.21.1 to 6.21.3 - [Release notes](https://github.com/nodejs/undici/releases) - [Commits](https://github.com/nodejs/undici/compare/v6.21.1...v6.21.3) Updates `discord.js` from 14.19.3 to 14.21.0 - [Release notes](https://github.com/discordjs/discord.js/releases) - [Changelog](https://github.com/discordjs/discord.js/blob/14.21.0/packages/discord.js/CHANGELOG.md) - [Commits](https://github.com/discordjs/discord.js/commits/14.21.0/packages/discord.js) --- updated-dependencies: - dependency-name: undici dependency-version: 6.21.3 dependency-type: indirect - dependency-name: discord.js dependency-version: 14.21.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package-lock.json | 42 +++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index b26ffdf..067cdb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "compression": "^1.8.1", "console-stamp": "^3.1.1", "cors": "^2.8.5", - "discord.js": "^14.19.0", + "discord.js": "^14.21.0", "dotenv": "^16.3.1", "express": "^5.0.1", "express-rate-limit": "^7.4.0", @@ -100,9 +100,9 @@ } }, "node_modules/@discordjs/rest": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.5.0.tgz", - "integrity": "sha512-PWhchxTzpn9EV3vvPRpwS0EE2rNYB9pvzDU/eLLW3mByJl0ZHZjHI2/wA8EbH2gRMQV7nu+0FoDF84oiPl8VAQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.5.1.tgz", + "integrity": "sha512-Tg9840IneBcbrAjcGaQzHUJWFNq1MMWZjTdjJ0WS/89IffaNKc++iOvffucPxQTF/gviO9+9r8kEPea1X5J2Dw==", "license": "Apache-2.0", "dependencies": { "@discordjs/collection": "^2.1.1", @@ -113,7 +113,7 @@ "discord-api-types": "^0.38.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", - "undici": "6.21.1" + "undici": "6.21.3" }, "engines": { "node": ">=18" @@ -147,13 +147,13 @@ } }, "node_modules/@discordjs/ws": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.2.tgz", - "integrity": "sha512-dyfq7yn0wO0IYeYOs3z79I6/HumhmKISzFL0Z+007zQJMtAFGtt3AEoq1nuLXtcunUE5YYYQqgKvybXukAK8/w==", + "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.0", + "@discordjs/rest": "^2.5.1", "@discordjs/util": "^1.1.0", "@sapphire/async-queue": "^1.5.2", "@types/ws": "^8.5.10", @@ -1718,24 +1718,24 @@ ] }, "node_modules/discord.js": { - "version": "14.19.3", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.19.3.tgz", - "integrity": "sha512-lncTRk0k+8Q5D3nThnODBR8fR8x2fM798o8Vsr40Krx0DjPwpZCuxxTcFMrXMQVOqM1QB9wqWgaXPg3TbmlHqA==", + "version": "14.21.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.21.0.tgz", + "integrity": "sha512-U5w41cEmcnSfwKYlLv5RJjB8Joa+QJyRwIJz5i/eg+v2Qvv6EYpCRhN9I2Rlf0900LuqSDg8edakUATrDZQncQ==", "license": "Apache-2.0", "dependencies": { "@discordjs/builders": "^1.11.2", "@discordjs/collection": "1.5.3", "@discordjs/formatters": "^0.6.1", - "@discordjs/rest": "^2.5.0", + "@discordjs/rest": "^2.5.1", "@discordjs/util": "^1.1.1", - "@discordjs/ws": "^1.2.2", + "@discordjs/ws": "^1.2.3", "@sapphire/snowflake": "3.5.3", "discord-api-types": "^0.38.1", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", - "undici": "6.21.1" + "undici": "6.21.3" }, "engines": { "node": ">=18" @@ -4544,9 +4544,9 @@ "license": "MIT" }, "node_modules/undici": { - "version": "6.21.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz", - "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==", + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", "license": "MIT", "engines": { "node": ">=18.17" @@ -4661,9 +4661,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "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" diff --git a/package.json b/package.json index 7f16af0..4847ace 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "compression": "^1.8.1", "console-stamp": "^3.1.1", "cors": "^2.8.5", - "discord.js": "^14.19.0", + "discord.js": "^14.21.0", "dotenv": "^16.3.1", "express": "^5.0.1", "express-rate-limit": "^7.4.0", From 5b8e44ac5e274cce22bcc450cf7b1732bba29e3f Mon Sep 17 00:00:00 2001 From: ZRunner Date: Sun, 7 Sep 2025 13:57:01 +0200 Subject: [PATCH 5/7] fix(deps): audit fix --- package-lock.json | 94 ++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 54 deletions(-) diff --git a/package-lock.json b/package-lock.json index 067cdb1..0cc9a62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -321,6 +321,39 @@ "deprecated": "Use @eslint/object-schema instead", "license": "BSD-3-Clause" }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz", + "integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.6.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -1366,9 +1399,9 @@ } }, "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", "license": "MIT" }, "node_modules/chokidar": { @@ -2163,32 +2196,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "license": "MIT" }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2726,16 +2733,16 @@ } }, "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", "license": "MIT", "dependencies": { + "@inquirer/external-editor": "^1.0.0", "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", - "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", @@ -3510,15 +3517,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -4308,18 +4306,6 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "license": "MIT" }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", From 856c8aa5ebfac70c75d9e9ef8cb1363fd05c6baa Mon Sep 17 00:00:00 2001 From: ZRunner Date: Sun, 7 Sep 2025 14:25:36 +0200 Subject: [PATCH 6/7] feat(rss): add image_alt + fix data check --- src/database/models/rss.ts | 30 +++++++++++++-------------- src/modules/discord/controler.ts | 4 ++-- src/modules/discord/types/guilds.d.ts | 17 +++++++-------- src/rss/modules/parsed-entry.ts | 1 + src/rss/modules/web-rss.ts | 27 ++++++++++++++++-------- src/rss/modules/youtube-rss.ts | 1 + 6 files changed, 44 insertions(+), 36 deletions(-) diff --git a/src/database/models/rss.ts b/src/database/models/rss.ts index cb976c0..e227fad 100644 --- a/src/database/models/rss.ts +++ b/src/database/models/rss.ts @@ -25,13 +25,13 @@ export interface RssFeedForCreation { roles: string[]; useEmbed: boolean; embed: { - authorText?: string; + author_text?: string; title?: string; - footerText?: string; + footer_text?: string; color?: number; - showDateInFooter?: boolean; - enableLinkInTitle?: boolean; - imageLocation?: "thumbnail" | "banner" | "none"; + show_date_in_footer?: boolean; + enable_link_in_title?: boolean; + image_location?: "thumbnail" | "banner" | "none"; }; silentMention: boolean; enabled: boolean; @@ -44,13 +44,13 @@ export interface RssFeedForEdition { roles: string[]; useEmbed: boolean; embed: { - authorText?: string; + author_text?: string; title?: string; - footerText?: string; + footer_text?: string; color?: number; - showDateInFooter?: boolean; - enableLinkInTitle?: boolean; - imageLocation?: "thumbnail" | "banner" | "none"; + show_date_in_footer?: boolean; + enable_link_in_title?: boolean; + image_location?: "thumbnail" | "banner" | "none"; }; silentMention: boolean; enabled: boolean; @@ -66,13 +66,13 @@ export interface DBRssFeed { roles: bigint[]; useEmbed: boolean; embed: { - authorText?: string; + author_text?: string; title?: string; - footerText?: string; + footer_text?: string; color?: number; - showDateInFooter?: boolean; - enableLinkInTitle?: boolean; - imageLocation?: "thumbnail" | "banner" | "none"; + show_date_in_footer?: boolean; + enable_link_in_title?: boolean; + image_location?: "thumbnail" | "banner" | "none"; }; silentMention: boolean; recentErrors: number; diff --git a/src/modules/discord/controler.ts b/src/modules/discord/controler.ts index fec5580..491ae06 100644 --- a/src/modules/discord/controler.ts +++ b/src/modules/discord/controler.ts @@ -1,7 +1,7 @@ import { ChannelType, GuildBasedChannel } from "discord.js"; import { NextFunction, Request, Response } from "express"; import { SqlError } from "mariadb"; -import { is } from "typia"; +import { equals, is } from "typia"; import DiscordClient from "../../bot/client"; import Database from "../../database/db"; @@ -664,7 +664,7 @@ export async function editRssFeed(req: Request, res: Response) { } // check data validity const data = req.body; - if (!is(data)) { + if (!is(data) || !equals(data.embed)) { res._err = "Invalid data"; res.status(400).send(res._err); return; diff --git a/src/modules/discord/types/guilds.d.ts b/src/modules/discord/types/guilds.d.ts index 3bc1ded..e0866af 100644 --- a/src/modules/discord/types/guilds.d.ts +++ b/src/modules/discord/types/guilds.d.ts @@ -38,24 +38,21 @@ interface RoleRewardsPUTData { level: string; } -interface __RssFeedPUT_Common { +interface RssFeedPUTData { + id: string; channelId: string; structure: string; roles: string[]; useEmbed: boolean; embed: { - authorText?: string; + author_text?: string; title?: string; - footerText?: string; + footer_text?: string; color?: number; - showDateInFooter?: boolean; - enableLinkInTitle?: boolean; - imageLocation?: "thumbnail" | "banner" | "none"; + show_date_in_footer?: boolean; + enable_link_in_title?: boolean; + image_location?: "thumbnail" | "banner" | "none"; }; silentMention: boolean; enabled: boolean; -} - -interface RssFeedPUTData extends __RssFeedPUT_Common { - id: string; } \ No newline at end of file diff --git a/src/rss/modules/parsed-entry.ts b/src/rss/modules/parsed-entry.ts index c9b7ed2..9365394 100644 --- a/src/rss/modules/parsed-entry.ts +++ b/src/rss/modules/parsed-entry.ts @@ -6,6 +6,7 @@ export interface ParsedEntry { author: string | null; channel: string | null; image: string | null; + imageAlt: string | null; postText: string | null; postDescription: string | null; } diff --git a/src/rss/modules/web-rss.ts b/src/rss/modules/web-rss.ts index 161166f..d1d6399 100644 --- a/src/rss/modules/web-rss.ts +++ b/src/rss/modules/web-rss.ts @@ -14,6 +14,17 @@ export default class WebRss { })), }); + private imageUrlRegex = new RegExp( + [ + "(http(s?):)", + "([/|.\\w\\s-])*", + "\\.(?:jpe?g|gif|png|webp)", + ].join(""), + "i" + ); + + private imageAltRegex = new RegExp(/]*?(?:title="([^"]+)"|alt="([^"]+)")[^>]*?>/, "i"); + async getLastPost(url: string): Promise { const feed = await this.getFeed(url); if (!feed) { @@ -63,6 +74,7 @@ export default class WebRss { author: entry.creator || entry.author || feed.title || null, channel: feed.title || null, image: entry.mediaThumbnail?.url || this.extractImageFromEnclosure(entry) || this.extractFirstImageFromContent(entry.content || "") || null, + imageAlt: this.extractFirstImageAltFromContent(entry.content || "") || null, postText: entry.contentSnippet || null, postDescription: entry.summary || null, }; @@ -76,14 +88,11 @@ export default class WebRss { } private extractFirstImageFromContent(content: string): string | null { - const exp = new RegExp( - [ - "(http(s?):)", - "([/|.\\w\\s-])*", - "\\.(?:jpe?g|gif|png|webp)", - ].join(""), - "i" - ); - return content.match(exp)?.[0] || null; + return content.match(this.imageUrlRegex)?.[0] || null; + } + + private extractFirstImageAltFromContent(content: string): string | null { + const match = content.match(this.imageAltRegex); + return match?.[1] || match?.[2] || null; } } \ No newline at end of file diff --git a/src/rss/modules/youtube-rss.ts b/src/rss/modules/youtube-rss.ts index 62777ec..c356684 100644 --- a/src/rss/modules/youtube-rss.ts +++ b/src/rss/modules/youtube-rss.ts @@ -141,6 +141,7 @@ export default class YouTubeRss { author: entry.author!, channel: entry.author!, image: entry.mediaThumbnail?.url || null, + imageAlt: null, postText: entry.contentSnippet || null, postDescription: null, }; From ebbf3710dce6f28d24dd16886a6e1e805dd7e893 Mon Sep 17 00:00:00 2001 From: ZRunner Date: Sun, 7 Sep 2025 15:32:45 +0200 Subject: [PATCH 7/7] feat(deps): bump version to 1.6.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0cc9a62..3d8030c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "axobot-api", - "version": "1.5.2", + "version": "1.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "axobot-api", - "version": "1.5.2", + "version": "1.6.0", "license": "GPL-3.0", "dependencies": { "cache-manager": "^5.4.0", diff --git a/package.json b/package.json index 4847ace..ca7d7d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "axobot-api", - "version": "1.5.2", + "version": "1.6.0", "description": "A TypeScript API for the Axobot Discord bot", "main": "index.js", "scripts": {