From 22d6d7e8362c62a3a9eef108d191dbc95a7a326f Mon Sep 17 00:00:00 2001 From: darius Date: Sat, 18 May 2024 23:28:30 +0200 Subject: [PATCH] delete to infinite --- .github/workflows/deploy-docs.yml | 2 - commands/commands.go | 2 +- handlers/deleteCommand.go | 95 +++++++++++++++++++++++-------- 3 files changed, 71 insertions(+), 28 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 7063ab4..0192838 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -3,10 +3,8 @@ name: build and deploy portfolio on: push: branches: [ "master" ] - paths: ['Writerside/**'] pull_request: branches: [ "master" ] - paths: ['Writerside/**'] jobs: diff --git a/commands/commands.go b/commands/commands.go index b6c6dbd..420bc76 100644 --- a/commands/commands.go +++ b/commands/commands.go @@ -30,7 +30,7 @@ var Commands = []*discordgo.ApplicationCommand{ { Type: discordgo.ApplicationCommandOptionString, Name: "amount", - Description: "max 100", + Description: "how many to delete", Required: true, }, { diff --git a/handlers/deleteCommand.go b/handlers/deleteCommand.go index e24f0a3..0a1c38f 100644 --- a/handlers/deleteCommand.go +++ b/handlers/deleteCommand.go @@ -3,48 +3,93 @@ package handlers import ( "github.com/bwmarrin/discordgo" "kleincordBot/services" + "math" "strconv" + "sync" + "time" ) func DeleteCommand(data discordgo.ApplicationCommandInteractionData, s *discordgo.Session, i *discordgo.InteractionCreate) { + var messages []*discordgo.Message + var Allmessages []*discordgo.Message + var messagesToDelete []string + var wg sync.WaitGroup + var beforeID = "" + amount, _ := strconv.Atoi(data.Options[0].Value.(string)) - if amount > 100 { - amount = 100 - } - messages, err := s.ChannelMessages(i.ChannelID, amount, "", "", "") - if err != nil { - return - } - err = s.InteractionRespond( + modulo := amount % 20 + + loops := math.Floor(float64(amount-modulo) / 20) + + err := s.InteractionRespond( i.Interaction, &discordgo.InteractionResponse{ Type: discordgo.InteractionResponseDeferredChannelMessageWithSource, Data: &discordgo.InteractionResponseData{ - Content: "deleting " + strconv.Itoa(len(messages)) + " messages", + Content: "deleting messages", }, }, ) if err != nil { - // Handle the error } - for _, message := range messages { - var Webhooks []*discordgo.Webhook - Webhooks, err = s.ChannelWebhooks(i.ChannelID) - OnlyWebhook, _ := strconv.ParseBool(data.Options[1].Value.(string)) - if OnlyWebhook { - for _, Webhook := range Webhooks { - if message.Author.ID == Webhook.ID { - s.ChannelMessageDelete(i.ChannelID, message.ID) - println(message.Content + " deleted") - } - } - } else { - s.ChannelMessageDelete(i.ChannelID, message.ID) - println(message.Content + " deleted") + + for x := 0; x < int(loops); x++ { + messages, err = s.ChannelMessages(i.ChannelID, 20, beforeID, "", "") + if err != nil { + services.HandleError(err, s) + } + Allmessages = append(Allmessages, messages...) + if len(messages) > 0 { + beforeID = messages[len(messages)-1].ID } } + if modulo > 0 { + messages, err = s.ChannelMessages(i.ChannelID, modulo, beforeID, "", "") + if err != nil { + services.HandleError(err, s) + } + Allmessages = append(Allmessages, messages...) + if len(messages) > 0 { + beforeID = messages[len(messages)-1].ID + } + } + + for _, message := range Allmessages { + wg.Add(1) + go func(message *discordgo.Message, i *discordgo.InteractionCreate, data discordgo.ApplicationCommandInteractionData, s *discordgo.Session) { + var Webhooks []*discordgo.Webhook + Webhooks, err = s.ChannelWebhooks(i.ChannelID) + OnlyWebhook, _ := strconv.ParseBool(data.Options[1].Value.(string)) + if OnlyWebhook { + for _, Webhook := range Webhooks { + if message.Author.ID == Webhook.ID { + if time.Now().After(message.Timestamp.Add((24 * time.Hour) * 14)) { + s.ChannelMessageDelete(i.ChannelID, message.ID) + } else { + messagesToDelete = append(messagesToDelete, message.ID) + } + println(message.Content + " deleted") + } + } + } else { + if time.Now().After(message.Timestamp.Add((24 * time.Hour) * 14)) { + s.ChannelMessageDelete(i.ChannelID, message.ID) + } else { + messagesToDelete = append(messagesToDelete, message.ID) + } + println(message.Content + " deleted") + } + wg.Done() + }(message, i, data, s) + } + wg.Wait() + err = s.ChannelMessagesBulkDelete(i.ChannelID, messagesToDelete) + if err != nil { + services.HandleError(err, s) + } + _, err = s.FollowupMessageCreate(i.Interaction, true, &discordgo.WebhookParams{ - Content: strconv.Itoa(len(messages)) + " Message deleted", + Content: strconv.Itoa(len(Allmessages)) + " Message deleted", }) if err != nil { services.HandleError(err, s)