91 lines
1.7 KiB
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()
|
|
}
|