69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"log"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"git.pengzhan.dev/aimaren/internal/config"
|
|
"git.pengzhan.dev/aimaren/internal/crawler"
|
|
"git.pengzhan.dev/aimaren/internal/driver"
|
|
"git.pengzhan.dev/aimaren/internal/notifier"
|
|
"git.pengzhan.dev/aimaren/internal/storage"
|
|
)
|
|
|
|
func main() {
|
|
chatIDsFlag := flag.String("chatids", "", "Comma-separated list of Telegram chat IDs to override config")
|
|
debugMode := flag.Bool("debug", false, "Enable debug mode to print raw HTML from scrapes.")
|
|
flag.Parse()
|
|
|
|
cfg, err := config.Load()
|
|
if err != nil {
|
|
log.Fatalf("❌ Failed to load configuration: %v", err)
|
|
}
|
|
|
|
if *chatIDsFlag != "" {
|
|
log.Printf("📲 Overriding chat IDs with flag: %s", *chatIDsFlag)
|
|
var parsedIDs []int64
|
|
idStrings := strings.Split(*chatIDsFlag, ",")
|
|
for _, idStr := range idStrings {
|
|
id, err := strconv.ParseInt(strings.TrimSpace(idStr), 10, 64)
|
|
if err != nil {
|
|
log.Fatalf("❌ Invalid chat ID in --chatids flag: '%s'", idStr)
|
|
}
|
|
parsedIDs = append(parsedIDs, id)
|
|
}
|
|
cfg.Telegram.ChatIDs = parsedIDs
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
defer cancel()
|
|
|
|
if *debugMode {
|
|
ctx = context.WithValue(ctx, crawler.DebugContextKey, true)
|
|
log.Println("🐞 Debug mode enabled.")
|
|
}
|
|
|
|
store, err := storage.NewFirestoreClient(ctx, cfg.GCPProjectID)
|
|
if err != nil {
|
|
log.Fatalf("❌ Failed to create Firestore client: %v", err)
|
|
}
|
|
defer store.Close()
|
|
|
|
notify, err := notifier.NewTelegramNotifier(cfg)
|
|
if err != nil {
|
|
log.Fatalf("❌ Failed to create Telegram notifier: %v", err)
|
|
}
|
|
|
|
appDriver := driver.New(store, notify)
|
|
|
|
if err := appDriver.Run(ctx); err != nil {
|
|
log.Fatalf("❌ Crawler run failed: %v", err)
|
|
}
|
|
|
|
log.Println("✅ Crawler run completed successfully.")
|
|
}
|