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.
This commit is contained in:
parent
7a04f2c520
commit
5d464edd4d
3 changed files with 63 additions and 39 deletions
|
|
@ -58,6 +58,7 @@ ENV basic_Username='' \
|
||||||
discord_ClientToken='' \
|
discord_ClientToken='' \
|
||||||
discord_AllowDiscordCommands='false' \
|
discord_AllowDiscordCommands='false' \
|
||||||
discord_hideChatterName='false' \
|
discord_hideChatterName='false' \
|
||||||
|
discord_ClearChatOnConnect='true' \
|
||||||
events_Enabled='false' \
|
events_Enabled='false' \
|
||||||
events_GroupMemberJoins='false' \
|
events_GroupMemberJoins='false' \
|
||||||
events_GroupMemberLeaves='false' \
|
events_GroupMemberLeaves='false' \
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,15 @@ namespace SecondBotEvents.Config
|
||||||
settings.Add("InteractionHttpTarget");
|
settings.Add("InteractionHttpTarget");
|
||||||
settings.Add("InteractionChannelNumber");
|
settings.Add("InteractionChannelNumber");
|
||||||
settings.Add("hideChatterName");
|
settings.Add("hideChatterName");
|
||||||
|
settings.Add("ClearChatOnConnect");
|
||||||
settings.Add("HideStatusOutput");
|
settings.Add("HideStatusOutput");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool GetClearChatOnConnect()
|
||||||
|
{
|
||||||
|
return ReadSettingAsBool("ClearChatOnConnect", true);
|
||||||
|
}
|
||||||
|
|
||||||
public bool GetEnabled()
|
public bool GetEnabled()
|
||||||
{
|
{
|
||||||
return ReadSettingAsBool("Enabled");
|
return ReadSettingAsBool("Enabled");
|
||||||
|
|
|
||||||
|
|
@ -726,10 +726,14 @@ namespace SecondBotEvents.Services
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(channel.Name != "commands")
|
if(myConfig.GetClearChatOnConnect() == true)
|
||||||
{
|
{
|
||||||
CleanChannel(channel);
|
if (channel.Name != "commands")
|
||||||
|
{
|
||||||
|
CleanChannel(channel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WantedTextChannels.Remove(channel.Name);
|
WantedTextChannels.Remove(channel.Name);
|
||||||
if (ChannelMap.ContainsKey(channel.Name) == true)
|
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<IMessage> messages = await channel.GetMessagesAsync(100, CacheMode.AllowDownload).FlattenAsync();
|
Task.Run(async() =>
|
||||||
IEnumerable<IMessage> filtered = messages.Where(x => (DateTimeOffset.UtcNow - x.Timestamp).TotalDays <= 14);
|
|
||||||
if(filtered.Count() == 0)
|
|
||||||
{
|
{
|
||||||
return;
|
IEnumerable<IMessage> messages = await channel.GetMessagesAsync(100, CacheMode.AllowDownload).FlattenAsync();
|
||||||
}
|
|
||||||
await channel.DeleteMessagesAsync(filtered);
|
// 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()
|
protected string StatusPrefill()
|
||||||
|
|
@ -1174,94 +1191,94 @@ namespace SecondBotEvents.Services
|
||||||
switch (flag)
|
switch (flag)
|
||||||
{
|
{
|
||||||
case "CreateInstantInvite":
|
case "CreateInstantInvite":
|
||||||
NewPerms = NewPerms.Modify(flagValue);
|
NewPerms = NewPerms.Modify(createInstantInvite: flagValue);
|
||||||
break;
|
break;
|
||||||
case "KickMembers":
|
case "KickMembers":
|
||||||
NewPerms = NewPerms.Modify(null, flagValue);
|
NewPerms = NewPerms.Modify(kickMembers: flagValue);
|
||||||
break;
|
break;
|
||||||
case "BanMembers":
|
case "BanMembers":
|
||||||
NewPerms = NewPerms.Modify(null, null, flagValue);
|
NewPerms = NewPerms.Modify(banMembers: flagValue);
|
||||||
break;
|
break;
|
||||||
case "Administrator":
|
case "Administrator":
|
||||||
NewPerms = NewPerms.Modify(null, null, null, flagValue);
|
NewPerms = NewPerms.Modify(administrator: flagValue);
|
||||||
break;
|
break;
|
||||||
case "ManageChannels":
|
case "ManageChannels":
|
||||||
NewPerms = NewPerms.Modify(null, null, null, null, flagValue);
|
NewPerms = NewPerms.Modify(manageChannels: flagValue);
|
||||||
break;
|
break;
|
||||||
case "ManageGuild":
|
case "ManageGuild":
|
||||||
NewPerms = NewPerms.Modify(null, null, null, null, null, flagValue);
|
NewPerms = NewPerms.Modify(manageGuild: flagValue);
|
||||||
break;
|
break;
|
||||||
case "AddReactions":
|
case "AddReactions":
|
||||||
NewPerms = NewPerms.Modify(null, null, null, null, null, null, flagValue);
|
NewPerms = NewPerms.Modify(addReactions: flagValue);
|
||||||
break;
|
break;
|
||||||
case "ViewAuditLog":
|
case "ViewAuditLog":
|
||||||
NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, flagValue);
|
NewPerms = NewPerms.Modify(viewAuditLog: flagValue);
|
||||||
break;
|
break;
|
||||||
case "SendTTSMessages":
|
case "SendTTSMessages":
|
||||||
NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, flagValue);
|
NewPerms = NewPerms.Modify(sendTTSMessages: flagValue);
|
||||||
break;
|
break;
|
||||||
case "AttachFiles":
|
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;
|
break;
|
||||||
case "ReadMessageHistory":
|
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;
|
break;
|
||||||
case "MentionEveryone":
|
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;
|
break;
|
||||||
case "UseExternalEmojis":
|
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;
|
break;
|
||||||
case "Connect":
|
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;
|
break;
|
||||||
case "Speak":
|
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;
|
break;
|
||||||
case "MuteMembers":
|
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;
|
break;
|
||||||
case "UseVAD":
|
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;
|
break;
|
||||||
case "MoveMembers":
|
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;
|
break;
|
||||||
case "EmbedLinks":
|
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;
|
break;
|
||||||
case "PrioritySpeaker":
|
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;
|
break;
|
||||||
case "Stream":
|
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;
|
break;
|
||||||
case "ChangeNickname":
|
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;
|
break;
|
||||||
case "ManageNicknames":
|
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;
|
break;
|
||||||
case "ManageRoles":
|
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;
|
break;
|
||||||
case "DeafenMembers":
|
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;
|
break;
|
||||||
case "ManageMessages":
|
case "ManageMessages":
|
||||||
NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, null, null, flagValue);
|
NewPerms = NewPerms.Modify(manageMessages: flagValue);
|
||||||
break;
|
break;
|
||||||
case "ViewChannel":
|
case "ViewChannel":
|
||||||
NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, flagValue);
|
NewPerms = NewPerms.Modify(viewChannel: flagValue);
|
||||||
break;
|
break;
|
||||||
case "SendMessages":
|
case "SendMessages":
|
||||||
NewPerms = NewPerms.Modify(null, null, null, null, null, null, null, null, null, null, flagValue);
|
NewPerms = NewPerms.Modify(sendMessages: flagValue);
|
||||||
break;
|
break;
|
||||||
case "ManageWebhooks":
|
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;
|
break;
|
||||||
case "ManageEmojisAndStickers":
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue