diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 963e09714..21b588069 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -43,5 +43,8 @@ If you'd like to create another package under the `@discordjs` organization run pnpm run create-package [package-description] ``` -This will create new package directory under `packages/` with the required configuration files. You can -begin to make changes within the `src/` directory. It may also be required to update the CODEOWNERS file. +This will create new package directory under `packages/` with the required configuration files. You may begin +to make changes within the `src/` directory. You may also need to: + +- Update workflows that utilize packages +- Update the CODEOWNERS file diff --git a/.github/workflows/deprecate-version.yml b/.github/workflows/deprecate-version.yml new file mode 100644 index 000000000..cf66ebd6d --- /dev/null +++ b/.github/workflows/deprecate-version.yml @@ -0,0 +1,50 @@ +name: Deprecate version +on: + workflow_dispatch: + inputs: + package: + description: Package + required: true + type: choice + options: + - '@discordjs/brokers' + - '@discordjs/builders' + - '@discordjs/collection' + - '@discordjs/core' + - create-discord-bot + - '@discordjs/formatters' + - discord.js + - '@discordjs/next' + - '@discordjs/proxy' + - '@discordjs/rest' + - '@discordjs/util' + - '@discordjs/voice' + - '@discordjs/ws' + version: + description: Version(s) + required: true + type: string + message: + description: Deprecation message + required: false + type: string +jobs: + deprecate: + runs-on: ubuntu-latest + if: github.repository_owner == 'discordjs' + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install Node.js v18 + uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Install dependencies + uses: ./packages/actions/src/pnpmCache + + - name: Deprecate + run: pnpm exec npm-deprecate --name "${{inputs.version}}" --message "${{inputs.message || 'This version is deprecated. Please use a newer version.'}}" --package ${{inputs.package}} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} diff --git a/.github/workflows/npm-auto-deprecate.yml b/.github/workflows/npm-auto-deprecate.yml deleted file mode 100644 index f88e17c32..000000000 --- a/.github/workflows/npm-auto-deprecate.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: npm auto deprecate -on: - schedule: - - cron: '0 1 * * *' - workflow_dispatch: -jobs: - npm-auto-deprecate: - name: npm auto deprecate - runs-on: ubuntu-latest - if: github.repository_owner == 'discordjs' - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install node.js v18 - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: Install dependencies - uses: ./packages/actions/src/pnpmCache - - - name: Deprecate versions - run: 'pnpm exec npm-deprecate --name "*dev*" --package @discordjs/brokers @discordjs/builders @discordjs/collection @discordjs/core @discordjs/formatters discord.js @discordjs/next @discordjs/proxy @discordjs/rest @discordjs/util @discordjs/voice @discordjs/ws' - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} diff --git a/.github/workflows/publish-dev.yml b/.github/workflows/publish-dev.yml index 298146c0d..1f2b8693b 100644 --- a/.github/workflows/publish-dev.yml +++ b/.github/workflows/publish-dev.yml @@ -63,3 +63,8 @@ jobs: pnpm --filter=${{ matrix.package }} publish --no-git-checks --tag dev || true env: NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} + + - name: Deprecate prior development releases + run: pnpm exec npm-deprecate --name "*dev*" --message "This version is deprecated. Please use a newer version." --package ${{ matrix.package }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 88782cb29..1bf4abe49 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -36,4 +36,4 @@ jobs: run: | pnpm --filter=${{ steps.extract-tag.outputs.subpackage == 'true' && '@discordjs/' || '' }}${{ steps.extract-tag.outputs.package }} publish env: - NPM_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} diff --git a/packages/discord.js/src/managers/CategoryChannelChildManager.js b/packages/discord.js/src/managers/CategoryChannelChildManager.js index de16df0dc..c7e21c478 100644 --- a/packages/discord.js/src/managers/CategoryChannelChildManager.js +++ b/packages/discord.js/src/managers/CategoryChannelChildManager.js @@ -50,6 +50,8 @@ class CategoryChannelChildManager extends DataManager { * @property {number} [rateLimitPerUser] The rate limit per user (slowmode) for the new channel in seconds * @property {string} [rtcRegion] The specific region of the new channel. * @property {VideoQualityMode} [videoQualityMode] The camera video quality mode of the voice channel + * @property {number} [defaultThreadRateLimitPerUser] The initial rate limit per user (slowmode) + * to set on newly created threads in a channel. * @property {GuildForumTagData[]} [availableTags] The tags that can be used in this channel (forum only). * @property {DefaultReactionEmoji} [defaultReactionEmoji] * The emoji to show in the add reaction button on a thread in a guild forum channel. diff --git a/packages/discord.js/src/managers/GuildChannelManager.js b/packages/discord.js/src/managers/GuildChannelManager.js index 920fb0bab..535d1034c 100644 --- a/packages/discord.js/src/managers/GuildChannelManager.js +++ b/packages/discord.js/src/managers/GuildChannelManager.js @@ -157,6 +157,7 @@ class GuildChannelManager extends CachedManager { rateLimitPerUser, rtcRegion, videoQualityMode, + defaultThreadRateLimitPerUser, availableTags, defaultReactionEmoji, defaultAutoArchiveDuration, @@ -181,6 +182,7 @@ class GuildChannelManager extends CachedManager { rate_limit_per_user: rateLimitPerUser, rtc_region: rtcRegion, video_quality_mode: videoQualityMode, + default_thread_rate_limit_per_user: defaultThreadRateLimitPerUser, available_tags: availableTags?.map(availableTag => transformGuildForumTag(availableTag)), default_reaction_emoji: defaultReactionEmoji && transformGuildDefaultReaction(defaultReactionEmoji), default_auto_archive_duration: defaultAutoArchiveDuration, diff --git a/packages/discord.js/src/structures/BaseGuildTextChannel.js b/packages/discord.js/src/structures/BaseGuildTextChannel.js index f7d9d6988..9b8490ecc 100644 --- a/packages/discord.js/src/structures/BaseGuildTextChannel.js +++ b/packages/discord.js/src/structures/BaseGuildTextChannel.js @@ -74,6 +74,16 @@ class BaseGuildTextChannel extends GuildChannel { this.defaultAutoArchiveDuration = data.default_auto_archive_duration; } + if ('default_thread_rate_limit_per_user' in data) { + /** + * The initial rate limit per user (slowmode) to set on newly created threads in a channel. + * @type {?number} + */ + this.defaultThreadRateLimitPerUser = data.default_thread_rate_limit_per_user; + } else { + this.defaultThreadRateLimitPerUser ??= null; + } + if ('messages' in data) { for (const message of data.messages) this.messages._add(message); } diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index ff98527e2..1a8028410 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -636,6 +636,7 @@ export class BaseGuildEmoji extends Emoji { export class BaseGuildTextChannel extends TextBasedChannelMixin(GuildChannel, true) { protected constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean); public defaultAutoArchiveDuration?: ThreadAutoArchiveDuration; + public defaultThreadRateLimitPerUser: number | null; public rateLimitPerUser: number | null; public nsfw: boolean; public threads: GuildTextThreadManager; @@ -4823,6 +4824,7 @@ export interface CategoryCreateChannelOptions { position?: number; rtcRegion?: string; videoQualityMode?: VideoQualityMode; + defaultThreadRateLimitPerUser?: number; availableTags?: GuildForumTagData[]; defaultReactionEmoji?: DefaultReactionEmoji; defaultAutoArchiveDuration?: ThreadAutoArchiveDuration;