initial
This commit is contained in:
72
mindforge.cronjob/internal/message/messages.go
Normal file
72
mindforge.cronjob/internal/message/messages.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package message
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Discord webhook payload
|
||||
type discordPayload struct {
|
||||
Content string `json:"content"`
|
||||
}
|
||||
|
||||
func SendDiscordNotification(filename string, message string) error {
|
||||
webhookURL := os.Getenv("DISCORD_WEBHOOK_URL")
|
||||
if webhookURL == "" {
|
||||
log.Printf("DISCORD_WEBHOOK_URL environment variable not set")
|
||||
return fmt.Errorf("DISCORD_WEBHOOK_URL environment variable not set")
|
||||
}
|
||||
|
||||
todays_date := time.Now().Format("02/01/2006")
|
||||
title := "# " + todays_date + " - Resumo semanal - *" + filename + "*"
|
||||
|
||||
content := title + "\n" + message
|
||||
runes := []rune(content)
|
||||
maxLen := 1800
|
||||
|
||||
for i := 0; i < len(runes); {
|
||||
end := i + maxLen
|
||||
if end >= len(runes) {
|
||||
end = len(runes)
|
||||
} else {
|
||||
for end < len(runes) && runes[end] != '\n' {
|
||||
end++
|
||||
}
|
||||
if end < len(runes) && runes[end] == '\n' {
|
||||
end++
|
||||
}
|
||||
}
|
||||
chunk := string(runes[i:end])
|
||||
payload := discordPayload{Content: chunk}
|
||||
|
||||
jsonData, err := json.Marshal(payload)
|
||||
if err != nil {
|
||||
log.Printf("Failed to marshal Discord payload: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
log.Printf("Sending Discord notification chunk (start: %d, end: %d)", i, end)
|
||||
resp, err := http.Post(webhookURL, "application/json", bytes.NewBuffer(jsonData))
|
||||
if err != nil {
|
||||
log.Printf("Error posting to Discord webhook: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
|
||||
log.Printf("Discord webhook returned status: %s", resp.Status)
|
||||
resp.Body.Close()
|
||||
return fmt.Errorf("Discord webhook returned status: %s", resp.Status)
|
||||
}
|
||||
resp.Body.Close()
|
||||
|
||||
i = end
|
||||
}
|
||||
|
||||
log.Printf("Discord notification sent successfully: Title='%s'", title)
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user