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 id, 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 dbid, port int if err = rows.Scan(&dbid, &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(db, dbid, 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) } }() go c.JoinChannels() clients = append(clients, c) } } rows.Close() time.Sleep(5 * time.Second) } }