From a9f64234f47d4f3f6af8292beaaea881949b6fad Mon Sep 17 00:00:00 2001 From: TehGM Date: Wed, 20 Sep 2023 19:13:36 +0200 Subject: [PATCH 1/3] Allow configuring blog channel permission overrides --- .../BlogChannelPermissionsOptions.cs | 23 +++++++++++ .../BlogsManagement/BlogsManagementOptions.cs | 4 ++ .../Services/BlogChannelManager.cs | 41 +++++++++++++++---- DiscordBot/appsettings.Development.json | 24 ++++++++++- DiscordBot/appsettings.Production.json | 14 +++++++ DiscordBot/appsettings.json | 11 ++++- 6 files changed, 106 insertions(+), 11 deletions(-) create mode 100644 DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs diff --git a/DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs b/DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs new file mode 100644 index 0000000..529321f --- /dev/null +++ b/DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs @@ -0,0 +1,23 @@ +using Discord; + +namespace DevSubmarine.DiscordBot.BlogsManagement +{ + public class BlogChannelPermissionsOptions + { + public ulong TargetID { get; set; } + public PermissionTarget TargetType { get; set; } = PermissionTarget.User; + public PermissionValues Permissions { get; set; } = new PermissionValues(); + + public class PermissionValues + { + public bool? SendMessages { get; set; } + public bool? ManageMessages { get; set; } + public bool? ManageWebhooks { get; set; } + public bool? UseApplicationCommands { get; set; } + public bool? ViewChannel { get; set; } + public bool? EmbedLinks { get; set; } + public bool? AddReactions { get; set; } + public bool? UseExternalEmojis { get; set; } + } + } +} diff --git a/DiscordBot/Features/BlogsManagement/BlogsManagementOptions.cs b/DiscordBot/Features/BlogsManagement/BlogsManagementOptions.cs index e529290..31b3a48 100644 --- a/DiscordBot/Features/BlogsManagement/BlogsManagementOptions.cs +++ b/DiscordBot/Features/BlogsManagement/BlogsManagementOptions.cs @@ -20,5 +20,9 @@ public class BlogsManagementOptions /// Words that cannot be contained in blog channel name. /// This can be used to forbid certain words, such as swears or whatever. public IEnumerable ForbiddenChannelNameWords { get; set; } + + public BlogChannelPermissionsOptions.PermissionValues EveryonePermissions { get; set; } + public BlogChannelPermissionsOptions.PermissionValues OwnerPermissions { get; set; } + public IEnumerable AdditionalPermissions { get; set; } } } diff --git a/DiscordBot/Features/BlogsManagement/Services/BlogChannelManager.cs b/DiscordBot/Features/BlogsManagement/Services/BlogChannelManager.cs index e5e37cd..76b1320 100644 --- a/DiscordBot/Features/BlogsManagement/Services/BlogChannelManager.cs +++ b/DiscordBot/Features/BlogsManagement/Services/BlogChannelManager.cs @@ -83,16 +83,13 @@ public async Task CreateBlogChannel(string name, IEnumerable perms = new List(category.PermissionOverwrites); props.PermissionOverwrites = perms; - perms.Add(new Overwrite(guild.EveryoneRole.Id, PermissionTarget.Role, - categoryPerms.Modify(sendMessages: PermValue.Deny))); + perms.Add(new Overwrite(guild.EveryoneRole.Id, PermissionTarget.Role, ModifyWith(categoryPerms, this._options.EveryonePermissions))); + foreach (ulong uid in userIDs) - { - perms.Add(new Overwrite(uid, PermissionTarget.User, categoryPerms.Modify( - sendMessages: PermValue.Allow, - manageMessages: PermValue.Allow, - manageWebhooks: PermValue.Allow - ))); - } + perms.Add(new Overwrite(uid, PermissionTarget.User, ModifyWith(categoryPerms, this._options.OwnerPermissions))); + + foreach (BlogChannelPermissionsOptions additionalPerms in this._options.AdditionalPermissions ?? Enumerable.Empty()) + perms.Add(new Overwrite(additionalPerms.TargetID, additionalPerms.TargetType, ModifyWith(categoryPerms, additionalPerms.Permissions))); props.IsNsfw = properties.NSFW; }, @@ -118,5 +115,31 @@ public Task EditBlogChannel(IGuildChannel channel, BlogChannelProperties propert }, cancellationToken.ToRequestOptions()); } + + private static OverwritePermissions ModifyWith(OverwritePermissions permissions, BlogChannelPermissionsOptions.PermissionValues options) + { + if (options == null) + return permissions; + + return permissions.Modify( + sendMessages: AsPermValue(options.SendMessages), + manageMessages: AsPermValue(options.ManageMessages), + manageWebhooks: AsPermValue(options.ManageWebhooks), + useApplicationCommands: AsPermValue(options.UseApplicationCommands), + viewChannel: AsPermValue(options.ViewChannel), + embedLinks: AsPermValue(options.EmbedLinks), + addReactions: AsPermValue(options.AddReactions), + useExternalEmojis: AsPermValue(options.UseExternalEmojis)); + + PermValue? AsPermValue(bool? value) + { + return value switch + { + true => PermValue.Allow, + false => PermValue.Deny, + _ => null + }; + } + } } } diff --git a/DiscordBot/appsettings.Development.json b/DiscordBot/appsettings.Development.json index df9fbde..9c8bbfd 100644 --- a/DiscordBot/appsettings.Development.json +++ b/DiscordBot/appsettings.Development.json @@ -20,7 +20,29 @@ 986279566563770408 ], "ActivityScanningRate": "0.00:05:30", - "MaxBlogInactivityTime": "0.00:01:00" + "MaxBlogInactivityTime": "0.00:01:00", + "AdditionalPermissions": [ + { + "TargetID": 447139136604733440, + "TargetType": "User", + "Permissions": { + "SendMessages": true, + "ViewChannel": true, + "ManageMessages": true, + "EmbedLinks": true, + "AddReactions": true, + "UseExternalEmojis": false + } + }, + { + "TargetID": 983722959359315988, + "TargetType": "Role", + "Permissions": { + "SendMessages": true, + "UseExternalEmojis": false + } + } + ] }, "Birthdays": { "AutoPostChannelID": 997905078121943130 diff --git a/DiscordBot/appsettings.Production.json b/DiscordBot/appsettings.Production.json index ada81fe..28ddbc7 100644 --- a/DiscordBot/appsettings.Production.json +++ b/DiscordBot/appsettings.Production.json @@ -24,6 +24,20 @@ "InactiveBlogsCategoryID": 788353984762347551, "IgnoredChannelsIDs": [ 526756609528168448 + ], + "AdditionalPermissions": [ + { + "TargetID": 437618149505105920, + "TargetType": "User", + "Permissions": { + "SendMessages": true, + "ViewChannel": true, + "ManageMessages": true, + "EmbedLinks": true, + "AddReactions": true, + "UseExternalEmojis": true + } + } ] }, "Birthdays": { diff --git a/DiscordBot/appsettings.json b/DiscordBot/appsettings.json index cc051e8..d949cd5 100644 --- a/DiscordBot/appsettings.json +++ b/DiscordBot/appsettings.json @@ -30,7 +30,16 @@ "whore", "bitch", "shit" - ] + ], + "EveryonePermissions": { + "SendMessages": false + }, + "OwnerPermissions": { + "SendMessages": true, + "ManageMessages": true, + "ManageWebhooks": true, + "UseApplicationCommands": true + } }, "Birthdays": { "AutoPostDaysAhead": 1 From cedb8f5fafd837a51a19a439f8a7fde2663a5597 Mon Sep 17 00:00:00 2001 From: TehGM Date: Wed, 20 Sep 2023 19:38:22 +0200 Subject: [PATCH 2/3] Expand possible custom permissions selection --- DiscordBot/DiscordBot.csproj | 2 +- .../BlogChannelPermissionsOptions.cs | 21 +++++++++++++--- .../Services/BlogChannelManager.cs | 25 ++++++++++++++----- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/DiscordBot/DiscordBot.csproj b/DiscordBot/DiscordBot.csproj index c789792..73b1206 100644 --- a/DiscordBot/DiscordBot.csproj +++ b/DiscordBot/DiscordBot.csproj @@ -73,7 +73,7 @@ - + diff --git a/DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs b/DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs index 529321f..295063f 100644 --- a/DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs +++ b/DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs @@ -10,14 +10,27 @@ public class BlogChannelPermissionsOptions public class PermissionValues { - public bool? SendMessages { get; set; } - public bool? ManageMessages { get; set; } - public bool? ManageWebhooks { get; set; } - public bool? UseApplicationCommands { get; set; } public bool? ViewChannel { get; set; } + public bool? ManageChannel { get; set; } + public bool? ManagePermissions { get; set; } + public bool? ManageWebhooks { get; set; } + public bool? CreateInvite { get; set; } + public bool? SendMessages { get; set; } + public bool? SendMessagesInThreads { get; set; } + public bool? CreatePublicThreads { get; set; } + public bool? CreatePrivateThreads { get; set; } public bool? EmbedLinks { get; set; } + public bool? AttachFiles { get; set; } public bool? AddReactions { get; set; } public bool? UseExternalEmojis { get; set; } + public bool? UseExternalStickers { get; set; } + public bool? MentionEveryone { get; set; } + public bool? ManageMessages { get; set; } + public bool? ManageThreads { get; set; } + public bool? ReadMessageHistory { get; set; } + public bool? SendTTSMessages { get; set; } + public bool? UseApplicationCommands { get; set; } + public bool? UseActivities { get; set; } } } } diff --git a/DiscordBot/Features/BlogsManagement/Services/BlogChannelManager.cs b/DiscordBot/Features/BlogsManagement/Services/BlogChannelManager.cs index 76b1320..022873b 100644 --- a/DiscordBot/Features/BlogsManagement/Services/BlogChannelManager.cs +++ b/DiscordBot/Features/BlogsManagement/Services/BlogChannelManager.cs @@ -96,7 +96,7 @@ public async Task CreateBlogChannel(string name, IEnumerable Date: Wed, 20 Sep 2023 19:41:46 +0200 Subject: [PATCH 3/3] Bump version --- DiscordBot/DiscordBot.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DiscordBot/DiscordBot.csproj b/DiscordBot/DiscordBot.csproj index 73b1206..d25e02f 100644 --- a/DiscordBot/DiscordBot.csproj +++ b/DiscordBot/DiscordBot.csproj @@ -15,7 +15,7 @@ https://github.com/DevSubmarine/DiscordBot git bot; discord; devsub; devsubmarine - 1.4.0 + 1.4.1