From 0dea5bb4fdbe37e39eb3e701673fda669bcd9008 Mon Sep 17 00:00:00 2001 From: Mihail Gribkov <61027276+Misha-133@users.noreply.github.com> Date: Fri, 23 Jan 2026 22:28:58 +0300 Subject: [PATCH] Add `BypassSlowmode` permission (#3228) --- .../Entities/Permissions/ChannelPermission.cs | 5 ++++ .../Permissions/ChannelPermissions.cs | 23 ++++++++++++------- .../Entities/Permissions/GuildPermission.cs | 5 ++++ .../Entities/Permissions/GuildPermissions.cs | 17 ++++++++++---- .../ChannelPermissionsTests.cs | 2 ++ .../GuildPermissionsTests.cs | 2 ++ 6 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs b/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs index 77dd84bf..e8b126cd 100644 --- a/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs +++ b/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs @@ -212,5 +212,10 @@ namespace Discord /// Allows pinning and unpinning messages. /// PinMessages = 1L << 51, + + /// + /// Allows bypassing slowmode restrictions. + /// + BypassSlowmode = 1L << 52, } } diff --git a/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs b/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs index 61509251..d209a254 100644 --- a/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs +++ b/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs @@ -18,17 +18,17 @@ namespace Discord /// /// Gets a that grants all permissions for text channels. /// - public static readonly ChannelPermissions Text = new(0b1110_110001_001111_110010_110011_111101_111111_111101_010001); + public static readonly ChannelPermissions Text = new(0b11110_110001_001111_110010_110011_111101_111111_111101_010001); /// /// Gets a that grants all permissions for voice channels. /// - public static readonly ChannelPermissions Voice = new(0b0111_110101_001010_001010_110011_111101_111111_111101_010001); + public static readonly ChannelPermissions Voice = new(0b10111_110101_001010_001010_110011_111101_111111_111101_010001); /// /// Gets a that grants all permissions for stage channels. /// - public static readonly ChannelPermissions Stage = new(0b0110_110100_000010_001110_010001_010101_111111_111001_010001); + public static readonly ChannelPermissions Stage = new(0b10110_110100_000010_001110_010001_010101_111111_111001_010001); /// /// Gets a that grants all permissions for category channels. @@ -160,6 +160,8 @@ namespace Discord public bool UseExternalSounds => Permissions.GetValue(RawValue, ChannelPermission.UseExternalSounds); /// If , a user can ping and unpin messages. public bool PinMessages => Permissions.GetValue(RawValue, ChannelPermission.PinMessages); + /// If , a user may bypass slowmode restrictions. + public bool BypassSlowmode => Permissions.GetValue(RawValue, ChannelPermission.BypassSlowmode); /// Creates a new with the provided packed value. public ChannelPermissions(ulong rawValue) { RawValue = rawValue; } @@ -203,7 +205,8 @@ namespace Discord bool? sendPolls = null, bool? useExternalApps = null, bool? useExternalSounds = null, - bool? pinMessages = null) + bool? pinMessages = null, + bool? bypassSlowmode = null) { ulong value = initialValue; @@ -246,6 +249,7 @@ namespace Discord Permissions.SetValue(ref value, useExternalApps, ChannelPermission.UseExternalApps); Permissions.SetValue(ref value, useExternalSounds, ChannelPermission.UseExternalSounds); Permissions.SetValue(ref value, pinMessages, ChannelPermission.PinMessages); + Permissions.SetValue(ref value, bypassSlowmode, ChannelPermission.BypassSlowmode); RawValue = value; } @@ -290,13 +294,14 @@ namespace Discord bool sendPolls = false, bool useExternalApps = false, bool useExternalSounds = false, - bool pinMessages = false) + bool pinMessages = false, + bool bypassSlowmode = false) : this(0, createInstantInvite, manageChannel, addReactions, viewChannel, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, readMessageHistory, mentionEveryone, useExternalEmojis, connect, speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, prioritySpeaker, stream, manageRoles, manageWebhooks, useApplicationCommands, requestToSpeak, manageThreads, createPublicThreads, createPrivateThreads, useExternalStickers, sendMessagesInThreads, startEmbeddedActivities, useSoundboard, createEvents, sendVoiceMessages, useClydeAI, setVoiceChannelStatus, sendPolls, useExternalApps, - useExternalSounds, pinMessages) + useExternalSounds, pinMessages, bypassSlowmode) { } /// Creates a new from this one, changing the provided non-null permissions. @@ -339,7 +344,8 @@ namespace Discord bool? sendPolls = null, bool? useExternalApps = null, bool? useExternalSounds = null, - bool? pinMessages = null) + bool? pinMessages = null, + bool? bypassSlowmode = null) => new ChannelPermissions(RawValue, createInstantInvite, manageChannel, @@ -379,7 +385,8 @@ namespace Discord sendPolls, useExternalApps, useExternalSounds, - pinMessages); + pinMessages, + bypassSlowmode); public bool Has(ChannelPermission permission) => Permissions.GetValue(RawValue, permission); diff --git a/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs b/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs index 1e8de09b..e2271182 100644 --- a/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs +++ b/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs @@ -307,5 +307,10 @@ namespace Discord /// Allows pinning and unpinning messages. /// PinMessages = 1L << 51, + + /// + /// Allows bypassing slowmode restrictions. + /// + BypassSlowmode = 1L << 52, } } diff --git a/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs b/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs index 226bba67..bdc2ebfe 100644 --- a/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs +++ b/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs @@ -126,6 +126,8 @@ namespace Discord public bool CreateEvents => Permissions.GetValue(RawValue, GuildPermission.CreateEvents); /// If , a user can ping and unpin messages. public bool PinMessages => Permissions.GetValue(RawValue, GuildPermission.PinMessages); + /// If , a user may bypass slowmode restrictions. + public bool BypassSlowmode => Permissions.GetValue(RawValue, GuildPermission.BypassSlowmode); /// Creates a new with the provided packed value. public GuildPermissions(ulong rawValue) { RawValue = rawValue; } @@ -185,7 +187,8 @@ namespace Discord bool? useExternalApps = null, bool? useExternalSounds = null, bool? createEvents = null, - bool? pinMessages = null) + bool? pinMessages = null, + bool? bypassSlowmode = null) { ulong value = initialValue; @@ -241,6 +244,7 @@ namespace Discord Permissions.SetValue(ref value, useExternalSounds, GuildPermission.UseExternalSounds); Permissions.SetValue(ref value, createEvents, GuildPermission.CreateEvents); Permissions.SetValue(ref value, pinMessages, GuildPermission.PinMessages); + Permissions.SetValue(ref value, bypassSlowmode, GuildPermission.BypassSlowmode); RawValue = value; } @@ -298,7 +302,8 @@ namespace Discord bool useExternalApps = false, bool useExternalSounds = false, bool createEvents = false, - bool pinMessages = false) + bool pinMessages = false, + bool bypassSlowmode = false) : this(0, createInstantInvite: createInstantInvite, manageRoles: manageRoles, @@ -351,7 +356,8 @@ namespace Discord useExternalApps: useExternalApps, useExternalSounds: useExternalSounds, createEvents: createEvents, - pinMessages: pinMessages) + pinMessages: pinMessages, + bypassSlowmode: bypassSlowmode) { } /// Creates a new from this one, changing the provided non-null permissions. @@ -407,14 +413,15 @@ namespace Discord bool? useExternalApps = null, bool? useExternalSounds = null, bool? createEvents = null, - bool? pinMessages = null) + bool? pinMessages = null, + bool? bypassSlowmode = null) => new GuildPermissions(RawValue, createInstantInvite, kickMembers, banMembers, administrator, manageChannels, manageGuild, addReactions, viewAuditLog, viewGuildInsights, viewChannel, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, readMessageHistory, mentionEveryone, useExternalEmojis, connect, speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, prioritySpeaker, stream, changeNickname, manageNicknames, manageRoles, manageWebhooks, manageEmojisAndStickers, useApplicationCommands, requestToSpeak, manageEvents, manageThreads, createPublicThreads, createPrivateThreads, useExternalStickers, sendMessagesInThreads, startEmbeddedActivities, moderateMembers, useSoundboard, viewMonetizationAnalytics, sendVoiceMessages, useClydeAI, createGuildExpressions, setVoiceChannelStatus, - sendPolls, useExternalApps, useExternalSounds, createEvents, pinMessages); + sendPolls, useExternalApps, useExternalSounds, createEvents, pinMessages, bypassSlowmode); /// /// Returns a value that indicates if a specific is enabled diff --git a/test/Discord.Net.Tests.Unit/ChannelPermissionsTests.cs b/test/Discord.Net.Tests.Unit/ChannelPermissionsTests.cs index e1287eb9..1092be35 100644 --- a/test/Discord.Net.Tests.Unit/ChannelPermissionsTests.cs +++ b/test/Discord.Net.Tests.Unit/ChannelPermissionsTests.cs @@ -98,6 +98,7 @@ namespace Discord AssertFlag(() => new ChannelPermissions(sendPolls: true), ChannelPermission.SendPolls); AssertFlag(() => new ChannelPermissions(useExternalApps: true), ChannelPermission.UseExternalApps); AssertFlag(() => new ChannelPermissions(pinMessages: true), ChannelPermission.PinMessages); + AssertFlag(() => new ChannelPermissions(bypassSlowmode: true), ChannelPermission.BypassSlowmode); } /// @@ -169,6 +170,7 @@ namespace Discord AssertUtil(ChannelPermission.UseExternalApps, x => x.UserExternalApps, (p, enable) => p.Modify(useExternalApps: enable)); AssertUtil(ChannelPermission.UseExternalSounds, x => x.UseExternalSounds, (p, enable) => p.Modify(useExternalSounds: enable)); AssertUtil(ChannelPermission.PinMessages, x => x.PinMessages, (p, enable) => p.Modify(pinMessages: enable)); + AssertUtil(ChannelPermission.BypassSlowmode, x => x.BypassSlowmode, (p, enable) => p.Modify(bypassSlowmode: enable)); } /// diff --git a/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs b/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs index 1af61d3a..07248cfa 100644 --- a/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs +++ b/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs @@ -110,6 +110,7 @@ namespace Discord AssertFlag(() => new GuildPermissions(useExternalSounds: true), GuildPermission.UseExternalSounds); AssertFlag(() => new GuildPermissions(createEvents: true), GuildPermission.CreateEvents); AssertFlag(() => new GuildPermissions(pinMessages: true), GuildPermission.PinMessages); + AssertFlag(() => new GuildPermissions(bypassSlowmode: true), GuildPermission.BypassSlowmode); } /// @@ -199,6 +200,7 @@ namespace Discord AssertUtil(GuildPermission.UseExternalSounds, x => x.UserExternalSounds, (p, enable) => p.Modify(useExternalSounds: enable)); AssertUtil(GuildPermission.CreateEvents, x => x.CreateEvents, (p, enable) => p.Modify(createEvents: enable)); AssertUtil(GuildPermission.PinMessages, x => x.PinMessages, (p, enable) => p.Modify(pinMessages: enable)); + AssertUtil(GuildPermission.BypassSlowmode, x => x.BypassSlowmode, (p, enable) => p.Modify(bypassSlowmode: enable)); } } }