From 79582ee951fa042d3eb3ab753ebfa405bf05e6aa Mon Sep 17 00:00:00 2001 From: Wolfstar Date: Wed, 7 Oct 2026 18:11:55 +0200 Subject: [PATCH] chore: update changelog and release --- .changeset/cache-voice-channel-info.md | 5 ---- .../gateway-category-children-poll-voters.md | 7 ----- .changeset/gateway-fetch-soundboard-sounds.md | 7 ----- .changeset/gateway-guild-manager-methods.md | 7 ----- .changeset/gateway-ready-after-resume.md | 5 ---- .changeset/gateway-voice-channel-info.md | 7 ----- .changeset/guild-managers.md | 5 ---- .changeset/scheduled-tasks-wait-for-ready.md | 5 ---- packages/plugin-broker/CHANGELOG.md | 7 +++++ packages/plugin-broker/package.json | 2 +- packages/plugin-cache/CHANGELOG.md | 6 ++++ packages/plugin-cache/package.json | 2 +- packages/plugin-gateway/CHANGELOG.md | 28 +++++++++++++++++++ packages/plugin-gateway/package.json | 2 +- packages/plugin-scheduled-tasks/CHANGELOG.md | 6 ++++ packages/plugin-scheduled-tasks/package.json | 2 +- 16 files changed, 51 insertions(+), 52 deletions(-) delete mode 100644 .changeset/cache-voice-channel-info.md delete mode 100644 .changeset/gateway-category-children-poll-voters.md delete mode 100644 .changeset/gateway-fetch-soundboard-sounds.md delete mode 100644 .changeset/gateway-guild-manager-methods.md delete mode 100644 .changeset/gateway-ready-after-resume.md delete mode 100644 .changeset/gateway-voice-channel-info.md delete mode 100644 .changeset/guild-managers.md delete mode 100644 .changeset/scheduled-tasks-wait-for-ready.md diff --git a/.changeset/cache-voice-channel-info.md b/.changeset/cache-voice-channel-info.md deleted file mode 100644 index 0c8c424a..00000000 --- a/.changeset/cache-voice-channel-info.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@wolfstar/plugin-cache": minor ---- - -Cache the status and start time of voice channels: `VOICE_CHANNEL_STATUS_UPDATE`, `VOICE_CHANNEL_START_TIME_UPDATE` and `CHANNEL_INFO` patch the `status` and `voice_start_time` of a cached channel, and leave an uncached one uncached. diff --git a/.changeset/gateway-category-children-poll-voters.md b/.changeset/gateway-category-children-poll-voters.md deleted file mode 100644 index 87a92370..00000000 --- a/.changeset/gateway-category-children-poll-voters.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@wolfstar/plugin-gateway": minor ---- - -Add `category.children` and `answer.voters` to `@wolfstar/plugin-gateway`, after discord.js. `category.children` is a `CategoryChannelChildManager`: its `cache` lists the cached channels of the category (a promise with an asynchronous cache), `create()` makes a channel inside it, and `resolve()`/`resolveId()` look one up. `answer.voters` is a `PollAnswerVoterManager` whose `fetch()` lists the users who voted for the answer; `fetchVoters()` now goes through it. - -Unlike discord.js, `children.cache` is read from the channel store on each access, so a store that cannot enumerate its entries throws `CacheNotIterable`, and `create()` rejects a category as the channel type. `answer.voters` has no `cache`. diff --git a/.changeset/gateway-fetch-soundboard-sounds.md b/.changeset/gateway-fetch-soundboard-sounds.md deleted file mode 100644 index 04cf5b81..00000000 --- a/.changeset/gateway-fetch-soundboard-sounds.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@wolfstar/plugin-gateway": minor ---- - -Add `GuildManager#fetchSoundboardSounds(guildIds, options?)` to `@wolfstar/plugin-gateway`, which requests the soundboard sounds of several guilds over the gateway (opcode 31) like discord.js, caches them, and resolves with a `Collection` of each guild's sounds. It sends one request per shard and waits for the `SOUNDBOARD_SOUNDS` reply of every guild, rejecting with the new `GuildSoundboardSoundsTimeoutError` (listing the guilds still missing) when they take longer than `time` (10 seconds by default, restarted by each reply). - -The replies carry no nonce, so only the process that sent the request resolves it, and a reply arriving after the timeout is only cached. diff --git a/.changeset/gateway-guild-manager-methods.md b/.changeset/gateway-guild-manager-methods.md deleted file mode 100644 index dedee955..00000000 --- a/.changeset/gateway-guild-manager-methods.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@wolfstar/plugin-gateway": minor ---- - -Add small manager methods of discord.js to `@wolfstar/plugin-gateway`: `DataManager#valueOf()` (the manager's cache), `GuildEmojiManager#resolveIdentifier()`, `GuildManager#widgetImageURL(guild, style?)` and `GuildChannelManager#channelCountWithoutThreads`. - -Unlike discord.js, `resolveIdentifier` throws for a value it cannot resolve instead of returning `null` (an uncached emoji ID still answers `null`), and `channelCountWithoutThreads` throws `CacheNotIterable` when the channel store cannot enumerate its entries. diff --git a/.changeset/gateway-ready-after-resume.md b/.changeset/gateway-ready-after-resume.md deleted file mode 100644 index ad1a91c7..00000000 --- a/.changeset/gateway-ready-after-resume.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@wolfstar/plugin-gateway": patch ---- - -Fix `GatewayClient` never becoming ready when its shards resume a stored session (`sessionStore`). A shard that resumes gets `RESUMED` and no `READY`, so `clientReady` was never emitted, `isClientReady()` stayed `false` and `client.user` stayed `null`. The client now restores `client.user` from the cache, or from `GET /users/@me` when the cache does not hold it, and emits `clientReady` once every shard is ready, whether it got there through `READY` or `RESUMED`. A failed restore is reported through `error` and does not hold `clientReady` back. diff --git a/.changeset/gateway-voice-channel-info.md b/.changeset/gateway-voice-channel-info.md deleted file mode 100644 index 3518ec12..00000000 --- a/.changeset/gateway-voice-channel-info.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@wolfstar/plugin-gateway": minor ---- - -Add the status and start time of voice channels to `@wolfstar/plugin-gateway`, after discord.js. `VoiceChannel` gets `status`, `voiceStartTimestamp` and `voiceStartAt` (all `null` until Discord sends them) and `setStatus()`. The new `voiceChannelStatusUpdate` and `voiceChannelStartTimeUpdate` events carry the channel before and after, and `client.channels.requestInfo()` (also `guild.requestChannelInfo()`) asks a guild's shard for the info over the gateway, resolving once the `channelInfo` reply is cached or rejecting with a `GuildChannelInfoTimeoutError`. - -Requests for one guild run one after the other, because Discord's reply has no nonce, and only the process that sent a request resolves it. A `GUILD_CREATE` resets both fields to `null`. diff --git a/.changeset/guild-managers.md b/.changeset/guild-managers.md deleted file mode 100644 index fe980ba6..00000000 --- a/.changeset/guild-managers.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@wolfstar/plugin-gateway": minor ---- - -Add the managers of a guild, whose cache is keyed by the entity's ID alone, like discord.js: `guild.members`, `guild.roles`, `guild.voiceStates` and `guild.presences`, also reachable as `client.guilds.members(guildId)`, `roles(guildId)`, `voiceStates(guildId)` and `presences(guildId)`. `guild.members.cache.get(userId)` replaces `client.members.cache.get(client.members.resolveKey(guildId, userId))`, which keeps working. Each manager has the methods of the client's one with the guild's ID filled in (`guild.members.kick(userId)`, `guild.roles.create(options)`, ...), and `channel.messages` and `thread.members` gain the same `cache`. `guild.members.me` is a getter, like discord.js's. They are the client's managers themselves, built with a guild's ID as an optional second argument and typed `GuildMemberManager`, `RoleManager`, `VoiceStateManager` and `PresenceManager`: the classes gain an `InGuild` type parameter (`false` by default, so existing code is unaffected) and a `guildId` property. On the client's manager `me` is now a property holding the function rather than a prototype method, called the same way (`client.members.me(guildId)`). diff --git a/.changeset/scheduled-tasks-wait-for-ready.md b/.changeset/scheduled-tasks-wait-for-ready.md deleted file mode 100644 index 9c26ee9a..00000000 --- a/.changeset/scheduled-tasks-wait-for-ready.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@wolfstar/plugin-scheduled-tasks": minor ---- - -Add a readiness gate for tasks that need the app to be up. Give the plugin a `ready` callback (with optional `readyTimeout` and `readyDelay`) and set `waitForReady: true` on the tasks that need it: when a job is taken before the app is ready it waits, and if the timeout passes it is moved back to `delayed` instead of failed, so it costs no attempt and emits no `scheduledTaskError`. The new `scheduledTaskNotReady` event (`ScheduledTaskEvents.ScheduledTaskNotReady`) reports it, and `ScheduledTaskHandler#waitForReady()` lets a task wait by hand. `ScheduledTaskHandler#run` takes an optional second argument with the BullMQ job and token. diff --git a/packages/plugin-broker/CHANGELOG.md b/packages/plugin-broker/CHANGELOG.md index cc3c7286..e06ba941 100644 --- a/packages/plugin-broker/CHANGELOG.md +++ b/packages/plugin-broker/CHANGELOG.md @@ -1,5 +1,12 @@ # @wolfstar/plugin-broker +## 0.5.1 + +### Patch Changes + +- Updated dependencies [[`4748f09`](https://github.com/wolfstar-project/plugins/commit/4748f09609e664fad9eede140da141d9f5efa1cc)]: + - @wolfstar/plugin-cache@0.7.0 + ## 0.5.0 ### Minor Changes diff --git a/packages/plugin-broker/package.json b/packages/plugin-broker/package.json index 0f506832..a93160cf 100644 --- a/packages/plugin-broker/package.json +++ b/packages/plugin-broker/package.json @@ -1,6 +1,6 @@ { "name": "@wolfstar/plugin-broker", - "version": "0.5.0", + "version": "0.5.1", "description": "Plugin for @wolfstar/http-framework distributing gateway events across processes over Redis Streams, with at-least-once delivery", "keywords": [ "broker", diff --git a/packages/plugin-cache/CHANGELOG.md b/packages/plugin-cache/CHANGELOG.md index 9bd929c1..ae8e782c 100644 --- a/packages/plugin-cache/CHANGELOG.md +++ b/packages/plugin-cache/CHANGELOG.md @@ -1,5 +1,11 @@ # @wolfstar/plugin-cache +## 0.7.0 + +### Minor Changes + +- [#223](https://github.com/wolfstar-project/plugins/pull/223) [`4748f09`](https://github.com/wolfstar-project/plugins/commit/4748f09609e664fad9eede140da141d9f5efa1cc) - Cache the status and start time of voice channels: `VOICE_CHANNEL_STATUS_UPDATE`, `VOICE_CHANNEL_START_TIME_UPDATE` and `CHANNEL_INFO` patch the `status` and `voice_start_time` of a cached channel, and leave an uncached one uncached. + ## 0.6.0 ### Minor Changes diff --git a/packages/plugin-cache/package.json b/packages/plugin-cache/package.json index a00f17e2..98288b28 100644 --- a/packages/plugin-cache/package.json +++ b/packages/plugin-cache/package.json @@ -1,6 +1,6 @@ { "name": "@wolfstar/plugin-cache", - "version": "0.6.0", + "version": "0.7.0", "description": "Pluggable, storage-agnostic Discord entity cache (in-memory and Redis, with optional compression) for @wolfstar/plugin-gateway", "keywords": [ "cache", diff --git a/packages/plugin-gateway/CHANGELOG.md b/packages/plugin-gateway/CHANGELOG.md index 2ee9e287..e80fb391 100644 --- a/packages/plugin-gateway/CHANGELOG.md +++ b/packages/plugin-gateway/CHANGELOG.md @@ -1,5 +1,33 @@ # @wolfstar/plugin-gateway +## 0.12.0 + +### Minor Changes + +- [#222](https://github.com/wolfstar-project/plugins/pull/222) [`ff72647`](https://github.com/wolfstar-project/plugins/commit/ff72647f1f5935d64988276084fc30037e854e13) - Add `category.children` and `answer.voters` to `@wolfstar/plugin-gateway`, after discord.js. `category.children` is a `CategoryChannelChildManager`: its `cache` lists the cached channels of the category (a promise with an asynchronous cache), `create()` makes a channel inside it, and `resolve()`/`resolveId()` look one up. `answer.voters` is a `PollAnswerVoterManager` whose `fetch()` lists the users who voted for the answer; `fetchVoters()` now goes through it. + + Unlike discord.js, `children.cache` is read from the channel store on each access, so a store that cannot enumerate its entries throws `CacheNotIterable`, and `create()` rejects a category as the channel type. `answer.voters` has no `cache`. + +- [#226](https://github.com/wolfstar-project/plugins/pull/226) [`9eff0b0`](https://github.com/wolfstar-project/plugins/commit/9eff0b0cf7a53c0da115fabfa219b1edad2a1d15) - Add `GuildManager#fetchSoundboardSounds(guildIds, options?)` to `@wolfstar/plugin-gateway`, which requests the soundboard sounds of several guilds over the gateway (opcode 31) like discord.js, caches them, and resolves with a `Collection` of each guild's sounds. It sends one request per shard and waits for the `SOUNDBOARD_SOUNDS` reply of every guild, rejecting with the new `GuildSoundboardSoundsTimeoutError` (listing the guilds still missing) when they take longer than `time` (10 seconds by default, restarted by each reply). + + The replies carry no nonce, so only the process that sent the request resolves it, and a reply arriving after the timeout is only cached. + +- [#221](https://github.com/wolfstar-project/plugins/pull/221) [`3a209a4`](https://github.com/wolfstar-project/plugins/commit/3a209a4f63a1886831d7e20d2aba800f26ffa90d) - Add small manager methods of discord.js to `@wolfstar/plugin-gateway`: `DataManager#valueOf()` (the manager's cache), `GuildEmojiManager#resolveIdentifier()`, `GuildManager#widgetImageURL(guild, style?)` and `GuildChannelManager#channelCountWithoutThreads`. + + Unlike discord.js, `resolveIdentifier` throws for a value it cannot resolve instead of returning `null` (an uncached emoji ID still answers `null`), and `channelCountWithoutThreads` throws `CacheNotIterable` when the channel store cannot enumerate its entries. + +- [#223](https://github.com/wolfstar-project/plugins/pull/223) [`4748f09`](https://github.com/wolfstar-project/plugins/commit/4748f09609e664fad9eede140da141d9f5efa1cc) - Add the status and start time of voice channels to `@wolfstar/plugin-gateway`, after discord.js. `VoiceChannel` gets `status`, `voiceStartTimestamp` and `voiceStartAt` (all `null` until Discord sends them) and `setStatus()`. The new `voiceChannelStatusUpdate` and `voiceChannelStartTimeUpdate` events carry the channel before and after, and `client.channels.requestInfo()` (also `guild.requestChannelInfo()`) asks a guild's shard for the info over the gateway, resolving once the `channelInfo` reply is cached or rejecting with a `GuildChannelInfoTimeoutError`. + + Requests for one guild run one after the other, because Discord's reply has no nonce, and only the process that sent a request resolves it. A `GUILD_CREATE` resets both fields to `null`. + +- [#219](https://github.com/wolfstar-project/plugins/pull/219) [`3954f0f`](https://github.com/wolfstar-project/plugins/commit/3954f0f5b527b1a6aab2b33a6bc95b2ce3aa9ab1) - Add the managers of a guild, whose cache is keyed by the entity's ID alone, like discord.js: `guild.members`, `guild.roles`, `guild.voiceStates` and `guild.presences`, also reachable as `client.guilds.members(guildId)`, `roles(guildId)`, `voiceStates(guildId)` and `presences(guildId)`. `guild.members.cache.get(userId)` replaces `client.members.cache.get(client.members.resolveKey(guildId, userId))`, which keeps working. Each manager has the methods of the client's one with the guild's ID filled in (`guild.members.kick(userId)`, `guild.roles.create(options)`, ...), and `channel.messages` and `thread.members` gain the same `cache`. `guild.members.me` is a getter, like discord.js's. They are the client's managers themselves, built with a guild's ID as an optional second argument and typed `GuildMemberManager`, `RoleManager`, `VoiceStateManager` and `PresenceManager`: the classes gain an `InGuild` type parameter (`false` by default, so existing code is unaffected) and a `guildId` property. On the client's manager `me` is now a property holding the function rather than a prototype method, called the same way (`client.members.me(guildId)`). + +### Patch Changes + +- [#225](https://github.com/wolfstar-project/plugins/pull/225) [`cd3dcda`](https://github.com/wolfstar-project/plugins/commit/cd3dcda2fff021d63091faeb3ada2545585bfae4) - Fix `GatewayClient` never becoming ready when its shards resume a stored session (`sessionStore`). A shard that resumes gets `RESUMED` and no `READY`, so `clientReady` was never emitted, `isClientReady()` stayed `false` and `client.user` stayed `null`. The client now restores `client.user` from the cache, or from `GET /users/@me` when the cache does not hold it, and emits `clientReady` once every shard is ready, whether it got there through `READY` or `RESUMED`. A failed restore is reported through `error` and does not hold `clientReady` back. +- Updated dependencies [[`4748f09`](https://github.com/wolfstar-project/plugins/commit/4748f09609e664fad9eede140da141d9f5efa1cc)]: + - @wolfstar/plugin-cache@0.7.0 + ## 0.11.0 ### Minor Changes diff --git a/packages/plugin-gateway/package.json b/packages/plugin-gateway/package.json index 96c1a049..0e75fc17 100644 --- a/packages/plugin-gateway/package.json +++ b/packages/plugin-gateway/package.json @@ -1,6 +1,6 @@ { "name": "@wolfstar/plugin-gateway", - "version": "0.11.0", + "version": "0.12.0", "description": "Gateway (WebSocket) support for @wolfstar/http-framework: a GatewayClient emitting Structures, backed by a pluggable cache", "keywords": [ "discord", diff --git a/packages/plugin-scheduled-tasks/CHANGELOG.md b/packages/plugin-scheduled-tasks/CHANGELOG.md index 178667f3..5502fd48 100644 --- a/packages/plugin-scheduled-tasks/CHANGELOG.md +++ b/packages/plugin-scheduled-tasks/CHANGELOG.md @@ -1,5 +1,11 @@ # @wolfstar/plugin-scheduled-tasks +## 0.2.0 + +### Minor Changes + +- [#228](https://github.com/wolfstar-project/plugins/pull/228) [`1ba434b`](https://github.com/wolfstar-project/plugins/commit/1ba434b613be41023bfe986684bc39fdcfc71751) - Add a readiness gate for tasks that need the app to be up. Give the plugin a `ready` callback (with optional `readyTimeout` and `readyDelay`) and set `waitForReady: true` on the tasks that need it: when a job is taken before the app is ready it waits, and if the timeout passes it is moved back to `delayed` instead of failed, so it costs no attempt and emits no `scheduledTaskError`. The new `scheduledTaskNotReady` event (`ScheduledTaskEvents.ScheduledTaskNotReady`) reports it, and `ScheduledTaskHandler#waitForReady()` lets a task wait by hand. `ScheduledTaskHandler#run` takes an optional second argument with the BullMQ job and token. + ## 0.1.0 ### Minor Changes diff --git a/packages/plugin-scheduled-tasks/package.json b/packages/plugin-scheduled-tasks/package.json index 5c9f1a29..fc8ed955 100644 --- a/packages/plugin-scheduled-tasks/package.json +++ b/packages/plugin-scheduled-tasks/package.json @@ -1,6 +1,6 @@ { "name": "@wolfstar/plugin-scheduled-tasks", - "version": "0.1.0", + "version": "0.2.0", "description": "Plugin for @wolfstar/http-framework to schedule one-off and repeated tasks, backed by BullMQ", "keywords": [ "bullmq",