delete to infinite

This commit is contained in:
darius 2024-05-18 23:28:30 +02:00
parent a6b1a56378
commit 22d6d7e836
3 changed files with 71 additions and 28 deletions

View File

@ -3,10 +3,8 @@ name: build and deploy portfolio
on: on:
push: push:
branches: [ "master" ] branches: [ "master" ]
paths: ['Writerside/**']
pull_request: pull_request:
branches: [ "master" ] branches: [ "master" ]
paths: ['Writerside/**']
jobs: jobs:

View File

@ -30,7 +30,7 @@ var Commands = []*discordgo.ApplicationCommand{
{ {
Type: discordgo.ApplicationCommandOptionString, Type: discordgo.ApplicationCommandOptionString,
Name: "amount", Name: "amount",
Description: "max 100", Description: "how many to delete",
Required: true, Required: true,
}, },
{ {

View File

@ -3,48 +3,93 @@ package handlers
import ( import (
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"kleincordBot/services" "kleincordBot/services"
"math"
"strconv" "strconv"
"sync"
"time"
) )
func DeleteCommand(data discordgo.ApplicationCommandInteractionData, s *discordgo.Session, i *discordgo.InteractionCreate) { 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)) amount, _ := strconv.Atoi(data.Options[0].Value.(string))
if amount > 100 { modulo := amount % 20
amount = 100
} loops := math.Floor(float64(amount-modulo) / 20)
messages, err := s.ChannelMessages(i.ChannelID, amount, "", "", "")
if err != nil { err := s.InteractionRespond(
return
}
err = s.InteractionRespond(
i.Interaction, i.Interaction,
&discordgo.InteractionResponse{ &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseDeferredChannelMessageWithSource, Type: discordgo.InteractionResponseDeferredChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{ Data: &discordgo.InteractionResponseData{
Content: "deleting " + strconv.Itoa(len(messages)) + " messages", Content: "deleting messages",
}, },
}, },
) )
if err != nil { if err != nil {
// Handle the error
} }
for _, message := range messages {
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 var Webhooks []*discordgo.Webhook
Webhooks, err = s.ChannelWebhooks(i.ChannelID) Webhooks, err = s.ChannelWebhooks(i.ChannelID)
OnlyWebhook, _ := strconv.ParseBool(data.Options[1].Value.(string)) OnlyWebhook, _ := strconv.ParseBool(data.Options[1].Value.(string))
if OnlyWebhook { if OnlyWebhook {
for _, Webhook := range Webhooks { for _, Webhook := range Webhooks {
if message.Author.ID == Webhook.ID { if message.Author.ID == Webhook.ID {
if time.Now().After(message.Timestamp.Add((24 * time.Hour) * 14)) {
s.ChannelMessageDelete(i.ChannelID, message.ID) s.ChannelMessageDelete(i.ChannelID, message.ID)
} else {
messagesToDelete = append(messagesToDelete, message.ID)
}
println(message.Content + " deleted") println(message.Content + " deleted")
} }
} }
} else { } else {
if time.Now().After(message.Timestamp.Add((24 * time.Hour) * 14)) {
s.ChannelMessageDelete(i.ChannelID, message.ID) s.ChannelMessageDelete(i.ChannelID, message.ID)
} else {
messagesToDelete = append(messagesToDelete, message.ID)
}
println(message.Content + " deleted") 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{ _, 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 { if err != nil {
services.HandleError(err, s) services.HandleError(err, s)