package main import ( "context" "log" "net/http" "os" "sync" "github.com/diamondburned/arikawa/v3/gateway" "github.com/diamondburned/arikawa/v3/session" "github.com/gorilla/websocket" "github.com/joho/godotenv" ) var upgrader = websocket.Upgrader{} func handleIndex(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello from skybase")) } func handleChat(w http.ResponseWriter, r *http.Request) { c, err := upgrader.Upgrade(w, r, nil) if err != nil { return } defer c.Close() for { mt, message, err := c.ReadMessage() if err != nil { break } err = c.WriteMessage(mt, message) if err != nil { break } } } func main() { godotenv.Load() // load env token := os.Getenv("BOT_TOKEN") if token == "" { log.Fatal("missing bot token") } httpListen := os.Getenv("HTTP_LISTEN") if httpListen == "" { log.Fatal("missing http listen address") } // init session s := session.New("Bot " + token) s.AddHandler(func(c *gateway.ReadyEvent) { u, err := s.Me() if err != nil { log.Fatal(err) } log.Println("started as", u.Username) }) s.AddHandler(func(c *gateway.MessageCreateEvent) { if c.Author.Bot { return } log.Println(c.Author.Username, "sent", c.Content) }) s.AddIntents(gateway.IntentGuildMessages) // init http http.HandleFunc("/", handleIndex) http.HandleFunc("/chat", handleChat) // begin var wg sync.WaitGroup wg.Go(func() { if err := s.Connect(context.Background()); err != nil { log.Fatal(err) } defer s.Close() }) wg.Go(func() { http.ListenAndServe(httpListen, nil) }) // wait wg.Wait() }