performance optimize + logic fix

This commit is contained in:
darius 2024-05-18 23:57:23 +02:00
parent 22d6d7e836
commit 0d0d98a69c

View File

@ -16,10 +16,12 @@ func DeleteCommand(data discordgo.ApplicationCommandInteractionData, s *discordg
var wg sync.WaitGroup var wg sync.WaitGroup
var beforeID = "" var beforeID = ""
OnlyWebhook, _ := strconv.ParseBool(data.Options[1].Value.(string))
amount, _ := strconv.Atoi(data.Options[0].Value.(string)) amount, _ := strconv.Atoi(data.Options[0].Value.(string))
modulo := amount % 20 Webhooks, _ := s.ChannelWebhooks(i.ChannelID)
modulo := amount % 100
loops := math.Floor(float64(amount-modulo) / 20) loops := math.Floor(float64(amount-modulo) / 100)
err := s.InteractionRespond( err := s.InteractionRespond(
i.Interaction, i.Interaction,
@ -34,7 +36,7 @@ func DeleteCommand(data discordgo.ApplicationCommandInteractionData, s *discordg
} }
for x := 0; x < int(loops); x++ { for x := 0; x < int(loops); x++ {
messages, err = s.ChannelMessages(i.ChannelID, 20, beforeID, "", "") messages, err = s.ChannelMessages(i.ChannelID, 100, beforeID, "", "")
if err != nil { if err != nil {
services.HandleError(err, s) services.HandleError(err, s)
} }
@ -56,36 +58,44 @@ func DeleteCommand(data discordgo.ApplicationCommandInteractionData, s *discordg
for _, message := range Allmessages { for _, message := range Allmessages {
wg.Add(1) wg.Add(1)
go func(message *discordgo.Message, i *discordgo.InteractionCreate, data discordgo.ApplicationCommandInteractionData, s *discordgo.Session) { if OnlyWebhook {
var Webhooks []*discordgo.Webhook for _, Webhook := range Webhooks {
Webhooks, err = s.ChannelWebhooks(i.ChannelID) if message.Author.ID == Webhook.ID {
OnlyWebhook, _ := strconv.ParseBool(data.Options[1].Value.(string)) if time.Now().After(message.Timestamp.Add((24 * time.Hour) * 14)) {
if OnlyWebhook { s.ChannelMessageDelete(i.ChannelID, message.ID)
for _, Webhook := range Webhooks { } else {
if message.Author.ID == Webhook.ID { messagesToDelete = append(messagesToDelete, message.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() } else {
}(message, i, data, s) if time.Now().After(message.Timestamp.Add((24 * time.Hour) * 14)) {
s.ChannelMessageDelete(i.ChannelID, message.ID)
} else {
messagesToDelete = append(messagesToDelete, message.ID)
}
}
wg.Done()
} }
wg.Wait() wg.Wait()
err = s.ChannelMessagesBulkDelete(i.ChannelID, messagesToDelete)
if err != nil { modulo = len(messagesToDelete) % 100
services.HandleError(err, s)
loops = math.Floor(float64(len(messagesToDelete)-modulo) / 100)
for x := 0; x < int(loops); x++ {
index := x * 100
err = s.ChannelMessagesBulkDelete(i.ChannelID, messagesToDelete[index:index+100])
if err != nil {
services.HandleError(err, s)
}
}
if modulo > 0 {
index := int(loops) * 100
err = s.ChannelMessagesBulkDelete(i.ChannelID, messagesToDelete[index:index+modulo])
if err != nil {
services.HandleError(err, s)
}
} }
_, err = s.FollowupMessageCreate(i.Interaction, true, &discordgo.WebhookParams{ _, err = s.FollowupMessageCreate(i.Interaction, true, &discordgo.WebhookParams{