cspj-application/server/internal/telegram/telegram.go
2025-02-09 18:51:53 +08:00

91 lines
2.2 KiB
Go

package telegram
import (
"fmt"
"log"
"github.com/Vomitblood/cspj-application/server/internal/log_backup"
tg "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"github.com/studio-b12/gowebdav"
)
const (
telegramToken = "7215466800:AAGwjZnXEfbbjQiA0y7qtSzbSZNUWQJnyjo"
telegramChatID = 622943829
)
type LogEntry struct {
AuditData struct {
Messages []string `json:"messages"`
} `json:"audit_data"`
}
func Init(client *gowebdav.Client) *tg.BotAPI {
bot, err := tg.NewBotAPI(telegramToken)
if err != nil {
log.Fatal("Failed to create Telegram bot:", err)
}
log.Println("Telegram bot connected")
// send init message on startup
testMsg := tg.NewMessage(telegramChatID, "I'm in")
_, err = bot.Send(testMsg)
if err != nil {
log.Fatal("Failed to send test message:", err)
}
go handleUpdates(bot, client)
return bot
}
// function to handle commands from user on tg
func handleUpdates(bot *tg.BotAPI, webdavClient *gowebdav.Client) {
u := tg.NewUpdate(0)
u.Timeout = 60
updates := bot.GetUpdatesChan(u)
for update := range updates {
if update.Message != nil {
command := update.Message.Text
// /backup_logs
if command == "/backup_logs" {
err := log_backup.BackupLogs(webdavClient)
if err != nil {
sendTelegramResponse(bot, fmt.Sprintf("Failed to backup logs: %v", err))
} else {
sendTelegramResponse(bot, "Successfully backed up log files")
}
}
// Check for /download_logs command to download files from WebDAV
if command == "/restore_logs" {
err := log_backup.RestoreLogs(webdavClient)
if err != nil {
sendTelegramResponse(bot, fmt.Sprintf("Failed to restore logs: %v", err))
} else {
sendTelegramResponse(bot, "Successfully restored log files")
}
}
}
}
}
func sendTelegramResponse(bot *tg.BotAPI, message string) {
msg := tg.NewMessage(telegramChatID, message)
_, err := bot.Send(msg)
if err != nil {
log.Println("Failed to send Telegram message:", err)
}
}
func SendTelegramAlert(bot *tg.BotAPI, message string) {
msg := tg.NewMessage(telegramChatID, fmt.Sprintf("🚨 *WEEWOO ALERT* 🚨\n%s", message))
_, err := bot.Send(msg)
if err != nil {
log.Println("Failed to send Telegram message:", err)
}
}