package main import ( "context" "fmt" "os" //"strconv" "github.com/jackc/pgx/v5" ) var conn *pgx.Conn func main() { var err error urlExample := "postgres://bot:3h0SXx6Ykx1D@toolbox.cfsystems.io:5432/iptvsportlist" //conn, err = pgx.Connect(context.Background(), os.Getenv("DATABASE_URL")) conn, err = pgx.Connect(context.Background(), urlExample) if err != nil { fmt.Fprintf(os.Stderr, "Unable to connection to database: %v\n", err) os.Exit(1) } if len(os.Args) == 1 { printHelp() os.Exit(0) } switch os.Args[1] { case "tug": printTug() case "help": printHelp() case "guide": userTerm := "" // Default value if len(os.Args) >= 3 { userTerm = os.Args[2] } err = guideTerm(userTerm) if err != nil { fmt.Fprintf(os.Stderr, "Unable to list events: %v\n", err) os.Exit(1) } case "whatson": userTerm := "" // Default value if len(os.Args) >= 3 { userTerm = os.Args[2] } err = whatsonTerm(userTerm) if err != nil { fmt.Fprintf(os.Stderr, "Unable to list events: %v\n", err) os.Exit(1) } case "upcoming": userTerm := "" // Default value if len(os.Args) >= 3 { userTerm = os.Args[2] } err = upcomingTerm(userTerm) if err != nil { fmt.Fprintf(os.Stderr, "Unable to list events: %v\n", err) os.Exit(1) } default: fmt.Fprintln(os.Stderr, "Invalid command") printHelp() os.Exit(1) } } func printTug() { fmt.Print(`chaturbate integration coming soon `) } func guideTerm(userTerm string) error { rows, err := conn.Query(context.Background(), "SELECT league, event, time_utc, string_agg(channel_name, ', ') AS channels FROM vw_gc04_epg_join_view vgejv WHERE (old_event = 'No') AND (sport = $1 OR event LIKE '%' || $1 || '%' OR league = $1) GROUP BY 1, 2, 3 ORDER BY league, time_utc ASC;", userTerm) if err != nil { return err } defer rows.Close() for rows.Next() { var league string var event string var timeUtc string var channels string err := rows.Scan(&league, &event, &timeUtc, &channels) if err != nil { return err } fmt.Printf("%s | %s | %s UTC | %s |\n", league, event, timeUtc, channels) } return rows.Err() } func whatsonTerm(userTerm string) error { rows, err := conn.Query(context.Background(), "SELECT league, event, time_utc, string_agg(channel_name, ', ') AS channels FROM vw_gc04_epg_join_view vgejv WHERE (old_event = 'No' AND on_air = 'Yes') AND (sport = $1 OR event LIKE '%' || $1 || '%' OR league = $1) GROUP BY 1, 2, 3 ORDER BY league, time_utc ASC;", userTerm) if err != nil { return err } defer rows.Close() for rows.Next() { var league string var event string var timeUtc string var channels string err := rows.Scan(&league, &event, &timeUtc, &channels) if err != nil { return err } fmt.Printf("%s | %s | %s UTC | %s |\n", league, event, timeUtc, channels) } return rows.Err() } func upcomingTerm(userTerm string) error { rows, err := conn.Query(context.Background(), "SELECT league, event, time_utc, string_agg(channel_name, ', ') AS channels FROM vw_gc04_epg_join_view vgejv WHERE (old_event = 'No' AND upcoming = 'Yes') AND (sport = $1 OR event LIKE '%' || $1 || '%' OR league = $1) GROUP BY 1, 2, 3 ORDER BY league, time_utc ASC;", userTerm) if err != nil { return err } defer rows.Close() for rows.Next() { var league string var event string var timeUtc string var channels string err := rows.Scan(&league, &event, &timeUtc, &channels) if err != nil { return err } fmt.Printf("%s | %s | %s UTC | %s |\n", league, event, timeUtc, channels) } return rows.Err() } func printHelp() { fmt.Print(` Usage: sport whatson sport guide sport upcoming `) }