diff --git a/DiscordBot/DiscordBot.csproj b/DiscordBot/DiscordBot.csproj
index c789792..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
@@ -73,7 +73,7 @@
-
+
diff --git a/DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs b/DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs
new file mode 100644
index 0000000..295063f
--- /dev/null
+++ b/DiscordBot/Features/BlogsManagement/BlogChannelPermissionsOptions.cs
@@ -0,0 +1,36 @@
+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? 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/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..022873b 100644
--- a/DiscordBot/Features/BlogsManagement/Services/BlogChannelManager.cs
+++ b/DiscordBot/Features/BlogsManagement/Services/BlogChannelManager.cs
@@ -83,23 +83,20 @@ 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;
},
cancellationToken.ToRequestOptions());
this._log.LogTrace("Sorting channels");
- await Task.Delay(TimeSpan.FromSeconds(1));
+ await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken).ConfigureAwait(false);
await this._sorter.SortChannelsAsync(category, cancellationToken).ConfigureAwait(false);
this._log.LogDebug("Channel {ChannelName} ({ChannelID}) created", result.Name, result.Id);
@@ -118,5 +115,44 @@ 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(
+ viewChannel: AsPermValue(options.ViewChannel),
+ manageChannel: AsPermValue(options.ManageChannel),
+ manageRoles: AsPermValue(options.ManagePermissions),
+ manageWebhooks: AsPermValue(options.ManageWebhooks),
+ createInstantInvite: AsPermValue(options.CreateInvite),
+ sendMessages: AsPermValue(options.SendMessages),
+ sendMessagesInThreads: AsPermValue(options.SendMessagesInThreads),
+ createPublicThreads: AsPermValue(options.CreatePublicThreads),
+ createPrivateThreads: AsPermValue(options.CreatePrivateThreads),
+ embedLinks: AsPermValue(options.EmbedLinks),
+ attachFiles: AsPermValue(options.AttachFiles),
+ addReactions: AsPermValue(options.AddReactions),
+ useExternalEmojis: AsPermValue(options.UseExternalEmojis),
+ useExternalStickers: AsPermValue(options.UseExternalStickers),
+ mentionEveryone: AsPermValue(options.MentionEveryone),
+ manageMessages: AsPermValue(options.ManageMessages),
+ manageThreads: AsPermValue(options.ManageThreads),
+ readMessageHistory: AsPermValue(options.ReadMessageHistory),
+ sendTTSMessages: AsPermValue(options.SendTTSMessages),
+ useApplicationCommands: AsPermValue(options.UseApplicationCommands),
+ startEmbeddedActivities: AsPermValue(options.UseActivities));
+
+ 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