From 5d464edd4d846bc44fecbfef62e83b6c6d16776e Mon Sep 17 00:00:00 2001 From: Madpeter <57852827+Madpeterz@users.noreply.github.com> Date: Sun, 5 Oct 2025 11:01:54 +0100 Subject: [PATCH] Add ClearChatOnConnect option and improve channel cleaning Introduces a new Discord config option 'ClearChatOnConnect' to control whether channels are cleaned on connect. Refactors channel cleaning logic to handle bulk and individual message deletion based on message age, and updates permission modification calls for clarity and maintainability. --- Dockerfile | 1 + SecondBotEvents/Config/DiscordConfig.cs | 6 ++ SecondBotEvents/Services/DiscordService.cs | 95 +++++++++++++--------- 3 files changed, 63 insertions(+), 39 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6025f1a..116a962 100644 --- a/Dockerfile +++ b/Dockerfile @@ -58,6 +58,7 @@ ENV basic_Username='' \ discord_ClientToken='' \ discord_AllowDiscordCommands='false' \ discord_hideChatterName='false' \ + discord_ClearChatOnConnect='true' \ events_Enabled='false' \ events_GroupMemberJoins='false' \ events_GroupMemberLeaves='false' \ diff --git a/SecondBotEvents/Config/DiscordConfig.cs b/SecondBotEvents/Config/DiscordConfig.cs index 5e92d7b..363d1ab 100644 --- a/SecondBotEvents/Config/DiscordConfig.cs +++ b/SecondBotEvents/Config/DiscordConfig.cs @@ -18,9 +18,15 @@ namespace SecondBotEvents.Config settings.Add("InteractionHttpTarget"); settings.Add("InteractionChannelNumber"); settings.Add("hideChatterName"); + settings.Add("ClearChatOnConnect"); settings.Add("HideStatusOutput"); } + public bool GetClearChatOnConnect() + { + return ReadSettingAsBool("ClearChatOnConnect", true); + } + public bool GetEnabled() { return ReadSettingAsBool("Enabled"); diff --git a/SecondBotEvents/Services/DiscordService.cs b/SecondBotEvents/Services/DiscordService.cs index c09046a..1c54c64 100644 --- a/SecondBotEvents/Services/DiscordService.cs +++ b/SecondBotEvents/Services/DiscordService.cs @@ -726,10 +726,14 @@ namespace SecondBotEvents.Services { continue; } - if(channel.Name != "commands") + if(myConfig.GetClearChatOnConnect() == true) { - CleanChannel(channel); + if (channel.Name != "commands") + { + CleanChannel(channel); + } } + WantedTextChannels.Remove(channel.Name); if (ChannelMap.ContainsKey(channel.Name) == true) { @@ -1024,15 +1028,28 @@ namespace SecondBotEvents.Services } } - protected async void CleanChannel(ITextChannel channel) + protected void CleanChannel(ITextChannel channel) { - IEnumerable messages = await channel.GetMessagesAsync(100, CacheMode.AllowDownload).FlattenAsync(); - IEnumerable filtered = messages.Where(x => (DateTimeOffset.UtcNow - x.Timestamp).TotalDays <= 14); - if(filtered.Count() == 0) + Task.Run(async() => { - return; - } - await channel.DeleteMessagesAsync(filtered); + IEnumerable messages = await channel.GetMessagesAsync(100, CacheMode.AllowDownload).FlattenAsync(); + + // Bulk delete messages newer than 14 days + var bulkDeletable = messages.Where(x => (DateTimeOffset.UtcNow - x.Timestamp).TotalDays <= 14).ToList(); + if (bulkDeletable.Count > 0) + { + await channel.DeleteMessagesAsync(bulkDeletable); + } + + // Individually delete messages older than 14 days + messages = messages.Where(x => (DateTimeOffset.UtcNow - x.Timestamp).TotalDays > 14).ToList(); + foreach (var msg in messages) + { + await msg.DeleteAsync(); + // Optionally, add a small delay to avoid rate limits + await Task.Delay(500); + } + }).ConfigureAwait(false); } protected string StatusPrefill() @@ -1174,94 +1191,94 @@ namespace SecondBotEvents.Services switch (flag) { case "CreateInstantInvite": - NewPerms = NewPerms.Modify(flagValue); + NewPerms = NewPerms.Modify(createInstantInvite: flagValue); break; case "KickMembers": - NewPerms = NewPerms.Modify(null, flagValue); + NewPerms = NewPerms.Modify(kickMembers: flagValue); break; case "BanMembers": - NewPerms = NewPerms.Modify(null, null, flagValue); + NewPerms = NewPerms.Modify(banMembers: flagValue); break; case "Administrator": - NewPerms = NewPerms.Modify(null, null, null, flagValue); + NewPerms = NewPerms.Modify(administrator: flagValue); break; case "ManageChannels": - NewPerms = NewPerms.Modify(null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(manageChannels: flagValue); break; case "ManageGuild": - NewPerms = NewPerms.Modify(null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(manageGuild: flagValue); break; case "AddReactions": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(addReactions: flagValue); break; case "ViewAuditLog": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(viewAuditLog: flagValue); break; case "SendTTSMessages": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(sendTTSMessages: flagValue); break; case "AttachFiles": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(attachFiles: flagValue); break; case "ReadMessageHistory": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(readMessageHistory: flagValue); break; case "MentionEveryone": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(mentionEveryone: flagValue); break; case "UseExternalEmojis": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(useExternalEmojis: flagValue); break; case "Connect": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(connect: flagValue); break; case "Speak": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(speak: flagValue); break; case "MuteMembers": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(muteMembers: flagValue); break; case "UseVAD": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(useVoiceActivation: flagValue); break; case "MoveMembers": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(moveMembers: flagValue); break; case "EmbedLinks": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(embedLinks: flagValue); break; case "PrioritySpeaker": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(prioritySpeaker: flagValue); break; case "Stream": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(stream: flagValue); break; case "ChangeNickname": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(changeNickname: flagValue); break; case "ManageNicknames": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(manageNicknames: flagValue); break; case "ManageRoles": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(manageRoles: flagValue); break; case "DeafenMembers": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(deafenMembers: flagValue); break; case "ManageMessages": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(manageMessages: flagValue); break; case "ViewChannel": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(viewChannel: flagValue); break; case "SendMessages": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(sendMessages: flagValue); break; case "ManageWebhooks": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(manageWebhooks: flagValue); break; case "ManageEmojisAndStickers": - NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, flagValue); + NewPerms = NewPerms.Modify(manageEmojisAndStickers: flagValue); break; default: break;