package main import ( "fmt" "log" "os" "os/signal" "syscall" "time" "github.com/bwmarrin/discordgo" "layeh.com/gumble/gumble" ) var Token = "NzkwMzAxNzMyMDU1MDIzNjU3.X9-n2A.OPsZtpapCRb66rA-3iigSpNTjHU" func main() { conf, err := LoadConfig() if err != nil { panic(err) } dg, err := discordgo.New("Bot " + conf.Token) if err != nil { fmt.Println("error creating Discord session,", err) return } dg.Identify.Intents = discordgo.MakeIntent(discordgo.IntentsAllWithoutPrivileged) // Open a websocket connection to Discord and begin listening. err = dg.Open() if err != nil { fmt.Println("error opening connection,", err) return } log.Println("Opened discord session") c := make(chan int) go pingCheck(conf, c) go discordControl(dg, c) // Wait here until CTRL-C or other term signal is received. log.Println("Bot is now running.") sc := make(chan os.Signal, 1) signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill) <-sc // Cleanly close down the Discord session. dg.Close() } func pingCheck(conf *Config, c chan int) { m, _ := time.ParseDuration("30s") curr := 0 log.Println("Started mumble ping loop") for { time.Sleep(time.Duration(conf.MumblePing) * time.Second) resp, err := gumble.Ping(conf.MumbleHost+":"+conf.MumblePort, -1, m) if err != nil { panic(err) } if resp.ConnectedUsers != curr { curr = resp.ConnectedUsers log.Printf("Now %v users in mumble\n", curr) c <- curr } } log.Println("Mumble ping loop broken") } func discordControl(dg *discordgo.Session, c chan int) { status := "" curr := 0 log.Println("Started discord control loop") for { curr = <-c log.Println("Updating discord status") if curr == 0 { status = "" } else { status = fmt.Sprintf("%v users in Mumble\n", curr) } dg.UpdateListeningStatus(status) } log.Println("Discord control loop broken") }