skybase/main.go

91 lines
1.7 KiB
Go

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()
}