From f7f29d5cc82cb04b0ff9f4a825074d56a505e347 Mon Sep 17 00:00:00 2001 From: Mihail Gribkov <61027276+Misha-133@users.noreply.github.com> Date: Mon, 10 Jun 2024 23:57:31 +0300 Subject: [PATCH] [Feature] Add UseExternalApps permission (#2941) --- .../Entities/Permissions/ChannelPermission.cs | 5 ++++ .../Permissions/ChannelPermissions.cs | 23 ++++++++++++------- .../Entities/Permissions/GuildPermission.cs | 5 ++++ .../Entities/Permissions/GuildPermissions.cs | 17 ++++++++++---- .../ChannelPermissionsTests.cs | 6 +++-- .../GuildPermissionsTests.cs | 4 +++- 6 files changed, 44 insertions(+), 16 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs b/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs index 22a71a9b..01602b4d 100644 --- a/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs +++ b/src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs @@ -197,5 +197,10 @@ namespace Discord /// Allows sending polls. /// SendPolls = 1L << 49, + + /// + /// Allows user-installed apps to send public responses. + /// + UseExternalApps = 1L << 50, } } diff --git a/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs b/src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs index 879c79eb..b861b4bf 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(0b10_110001_001111_110010_110011_111101_111111_111101_010001); + public static readonly ChannelPermissions Text = new(0b110_110001_001111_110010_110011_111101_111111_111101_010001); /// /// Gets a that grants all permissions for voice channels. /// - public static readonly ChannelPermissions Voice = new(0b11_110001_001010_001010_110011_111101_111111_111101_010001); + public static readonly ChannelPermissions Voice = new(0b111_110001_001010_001010_110011_111101_111111_111101_010001); /// /// Gets a that grants all permissions for stage channels. /// - public static readonly ChannelPermissions Stage = new(0b10_110000_000010_001110_010001_010101_111111_111001_010001); + public static readonly ChannelPermissions Stage = new(0b110_110000_000010_001110_010001_010101_111111_111001_010001); /// /// Gets a that grants all permissions for category channels. @@ -154,6 +154,8 @@ namespace Discord public bool SetVoiceChannelStatus => Permissions.GetValue(RawValue, ChannelPermission.SetVoiceChannelStatus); /// If , a user can send polls. public bool SendPolls => Permissions.GetValue(RawValue, ChannelPermission.SendPolls); + /// If , a user-installed application can send public responses. + public bool UserExternalApps => Permissions.GetValue(RawValue, ChannelPermission.UseExternalApps); /// Creates a new with the provided packed value. public ChannelPermissions(ulong rawValue) { RawValue = rawValue; } @@ -194,7 +196,8 @@ namespace Discord bool? sendVoiceMessages = null, bool? useClydeAI = null, bool? setVoiceChannelStatus = null, - bool? sendPolls = null) + bool? sendPolls = null, + bool? useExternalApps = null) { ulong value = initialValue; @@ -234,6 +237,7 @@ namespace Discord Permissions.SetValue(ref value, useClydeAI, ChannelPermission.UseClydeAI); Permissions.SetValue(ref value, setVoiceChannelStatus, ChannelPermission.SetVoiceChannelStatus); Permissions.SetValue(ref value, sendPolls, ChannelPermission.SendPolls); + Permissions.SetValue(ref value, useExternalApps, ChannelPermission.UseExternalApps); RawValue = value; } @@ -275,12 +279,13 @@ namespace Discord bool sendVoiceMessages = false, bool useClydeAI = false, bool setVoiceChannelStatus = false, - bool sendPolls = false) + bool sendPolls = false, + bool useExternalApps = 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) + startEmbeddedActivities, useSoundboard, createEvents, sendVoiceMessages, useClydeAI, setVoiceChannelStatus, sendPolls, useExternalApps) { } /// Creates a new from this one, changing the provided non-null permissions. @@ -320,7 +325,8 @@ namespace Discord bool? sendVoiceMessages = null, bool? useClydeAI = null, bool? setVoiceChannelStatus = null, - bool? sendPolls = null) + bool? sendPolls = null, + bool? useExternalApps = null) => new ChannelPermissions(RawValue, createInstantInvite, manageChannel, @@ -357,7 +363,8 @@ namespace Discord sendVoiceMessages, useClydeAI, setVoiceChannelStatus, - sendPolls); + sendPolls, + useExternalApps); 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 79b3a4f9..9b5b0cda 100644 --- a/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs +++ b/src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs @@ -287,5 +287,10 @@ namespace Discord /// Allows sending polls. /// SendPolls = 1L << 49, + + /// + /// Allows user-installed apps to send public responses. + /// + UseExternalApps = 1L << 50, } } diff --git a/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs b/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs index 2ef5dcf7..666441cb 100644 --- a/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs +++ b/src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs @@ -118,6 +118,8 @@ namespace Discord public bool SetVoiceChannelStatus => Permissions.GetValue(RawValue, GuildPermission.SetVoiceChannelStatus); /// If , a user can send polls. public bool SendPolls => Permissions.GetValue(RawValue, GuildPermission.SendPolls); + /// If , a user-installed application can send public responses. + public bool UserExternalApps => Permissions.GetValue(RawValue, GuildPermission.UseExternalApps); /// Creates a new with the provided packed value. @@ -174,7 +176,8 @@ namespace Discord bool? useClydeAI = null, bool? createGuildExpressions = null, bool? setVoiceChannelStatus = null, - bool? sendPolls = null) + bool? sendPolls = null, + bool? useExternalApps = null) { ulong value = initialValue; @@ -226,6 +229,7 @@ namespace Discord Permissions.SetValue(ref value, createGuildExpressions, GuildPermission.CreateGuildExpressions); Permissions.SetValue(ref value, setVoiceChannelStatus, GuildPermission.SetVoiceChannelStatus); Permissions.SetValue(ref value, sendPolls, GuildPermission.SendPolls); + Permissions.SetValue(ref value, useExternalApps, GuildPermission.UseExternalApps); RawValue = value; } @@ -279,7 +283,8 @@ namespace Discord bool useClydeAI = false, bool createGuildExpressions = false, bool setVoiceChannelStatus = false, - bool sendPolls = false) + bool sendPolls = false, + bool useExternalApps = false) : this(0, createInstantInvite: createInstantInvite, manageRoles: manageRoles, @@ -328,7 +333,8 @@ namespace Discord useClydeAI: useClydeAI, createGuildExpressions: createGuildExpressions, setVoiceChannelStatus: setVoiceChannelStatus, - sendPolls: sendPolls) + sendPolls: sendPolls, + useExternalApps: useExternalApps) { } /// Creates a new from this one, changing the provided non-null permissions. @@ -380,14 +386,15 @@ namespace Discord bool? useClydeAI = null, bool? createGuildExpressions = null, bool? setVoiceChannelStatus = null, - bool? sendPolls = null) + bool? sendPolls = null, + bool? useExternalApps = 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); + sendPolls, useExternalApps); /// /// 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 58cc4f8a..e47af0d4 100644 --- a/test/Discord.Net.Tests.Unit/ChannelPermissionsTests.cs +++ b/test/Discord.Net.Tests.Unit/ChannelPermissionsTests.cs @@ -47,7 +47,7 @@ namespace Discord } /// - /// Tests the behavior of the constructor for each + /// Tests the behavior of the constructor for each /// of it's flags. /// [Fact] @@ -96,10 +96,11 @@ namespace Discord AssertFlag(() => new ChannelPermissions(useClydeAI: true), ChannelPermission.UseClydeAI); AssertFlag(() => new ChannelPermissions(setVoiceChannelStatus: true), ChannelPermission.SetVoiceChannelStatus); AssertFlag(() => new ChannelPermissions(sendPolls: true), ChannelPermission.SendPolls); + AssertFlag(() => new ChannelPermissions(useExternalApps: true), ChannelPermission.UseExternalApps); } /// - /// Tests the behavior of + /// Tests the behavior of /// with each of the parameters. /// [Fact] @@ -164,6 +165,7 @@ namespace Discord AssertUtil(ChannelPermission.UseClydeAI, x => x.UseClydeAI, (p, enable) => p.Modify(useClydeAI: enable)); AssertUtil(ChannelPermission.SetVoiceChannelStatus, x => x.SetVoiceChannelStatus, (p, enable) => p.Modify(setVoiceChannelStatus: enable)); AssertUtil(ChannelPermission.SendPolls, x => x.SendPolls, (p, enable) => p.Modify(sendPolls: enable)); + AssertUtil(ChannelPermission.UseExternalApps, x => x.UserExternalApps, (p, enable) => p.Modify(useExternalApps: enable)); } /// diff --git a/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs b/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs index 8085f1bf..a35950dd 100644 --- a/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs +++ b/test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs @@ -107,10 +107,11 @@ namespace Discord AssertFlag(() => new GuildPermissions(createGuildExpressions: true), GuildPermission.CreateGuildExpressions); AssertFlag(() => new GuildPermissions(setVoiceChannelStatus: true), GuildPermission.SetVoiceChannelStatus); AssertFlag(() => new GuildPermissions(sendPolls: true), GuildPermission.SendPolls); + AssertFlag(() => new GuildPermissions(useExternalApps: true), GuildPermission.UseExternalApps); } /// - /// Tests the behavior of + /// Tests the behavior of /// with each of the parameters. /// [Fact] @@ -192,6 +193,7 @@ namespace Discord AssertUtil(GuildPermission.CreateGuildExpressions, x => x.CreateGuildExpressions, (p, enable) => p.Modify(createGuildExpressions: enable)); AssertUtil(GuildPermission.SetVoiceChannelStatus, x => x.SetVoiceChannelStatus, (p, enable) => p.Modify(setVoiceChannelStatus: enable)); AssertUtil(GuildPermission.SendPolls, x => x.SendPolls, (p, enable) => p.Modify(sendPolls: enable)); + AssertUtil(GuildPermission.UseExternalApps, x => x.UserExternalApps, (p, enable) => p.Modify(useExternalApps: enable)); } } }