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;