You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
3.6 KiB
164 lines
3.6 KiB
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 |
|
|
|
`) |
|
} |