From 4f87786bb46a230c7c54af1d85093ce2c92d6781 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 3 Aug 2025 00:12:39 +0500 Subject: feat: join servers --- cmd/irclogs/main.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 cmd/irclogs/main.go (limited to 'cmd/irclogs/main.go') diff --git a/cmd/irclogs/main.go b/cmd/irclogs/main.go new file mode 100644 index 0000000..509447f --- /dev/null +++ b/cmd/irclogs/main.go @@ -0,0 +1,59 @@ +package main + +import ( + "database/sql" + "slices" + "strings" + "time" + + irclogs "ilotterytea/irclogs/internal" + "log" + + _ "github.com/go-sql-driver/mysql" +) + +func main() { + db, err := sql.Open("mysql", "kochan:kochan@/irclogs") + if err != nil { + log.Panicf("Failed to establish a database connection: %v\n", err) + } + defer db.Close() + + clients := []irclogs.IRCClient{} + + for { + rows, err := db.Query("SELECT host, port, nick, pass, capabilities FROM servers") + if err != nil { + log.Fatalf("Failed to get servers: %v\n", err) + continue + } + + for rows.Next() { + var host, nick, pass, caps string + var port int + if err = rows.Scan(&host, &port, &nick, &pass, &caps); err != nil { + log.Fatalf("Failed to scan rows: %v\n", err) + continue + } + + if !slices.ContainsFunc(clients, func(c irclogs.IRCClient) bool { + return c.Host == host + }) { + log.Printf("Connecting to %s:%d...\n", host, port) + c := irclogs.NewIRCClient(host, port, nick, pass, strings.Split(caps, "\n")) + + go func() { + if err = c.Connect(); err != nil { + log.Panicf("Failed to connect %s: %v\n", host, err) + } + }() + + clients = append(clients, c) + } + } + + rows.Close() + + time.Sleep(5 * time.Second) + } +} -- cgit v1.2.3