Browse Source

Basic login test making sure we logged in properly

This just adds a message handler and spits out the message in the log to verify
that the websocket did connect successfully.
Gary Kramlich 3 years ago
parent
commit
aa7059b1e3
3 changed files with 41 additions and 14 deletions
  1. 5 6
      bridge/commands.go
  2. 18 0
      bridge/user.go
  3. 18 8
      database/user.go

+ 5 - 6
bridge/commands.go

@@ -118,17 +118,16 @@ func (l *loginCmd) Run(g *globals) error {
 
 	user, err := client.Result()
 	if err != nil {
-		fmt.Printfln(g.context.Stdout, "failed to log in")
+		fmt.Println(g.context.Stdout, "failed to log in")
 
 		return err
 	}
 
-	g.user.User.ID = user.UserID
-	g.user.User.Discriminator = user.Discriminator
-	g.user.User.Username = user.Username
+	if err := g.user.login(user.Token); err != nil {
+		fmt.Println(g.context.Stdout, "failed to login", err)
 
-	g.handler.log.Warnln("users:", user)
-	g.handler.log.Warnln("err:", err)
+		return err
+	}
 
 	return nil
 }

+ 18 - 0
bridge/user.go

@@ -1,6 +1,7 @@
 package bridge
 
 import (
+	"github.com/bwmarrin/discordgo"
 	"github.com/skip2/go-qrcode"
 
 	log "maunium.net/go/maulogger/v2"
@@ -135,3 +136,20 @@ func (u *User) uploadQRCode(code string) (id.ContentURI, error) {
 
 	return resp.ContentURI, nil
 }
+
+func (u *User) login(token string) error {
+	err := u.User.Login(token)
+	if err != nil {
+		return err
+	}
+
+	u.User.Session.AddHandler(u.messageHandler)
+
+	u.log.Warnln("logged in, opening websocket")
+
+	return u.User.Session.Open()
+}
+
+func (u *User) messageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
+	u.log.Warnln("received message", m)
+}

+ 18 - 8
database/user.go

@@ -16,14 +16,27 @@ type User struct {
 	MXID id.UserID
 	ID   string
 
-	Discriminator string
-	Username      string
-
 	ManagementRoom id.RoomID
 
 	Session *discordgo.Session
 }
 
+// Login is just used to create the session and update the database and should
+// only be called by bridge.User.Login which will continue setting up event
+// handlers.
+func (u *User) Login(token string) error {
+	session, err := discordgo.New(token)
+	if err != nil {
+		return err
+	}
+
+	u.Session = session
+
+	u.Update()
+
+	return nil
+}
+
 func (u *User) Scan(row Scannable) *User {
 	var token sql.NullString
 
@@ -37,11 +50,8 @@ func (u *User) Scan(row Scannable) *User {
 	}
 
 	if token.Valid {
-		session, err := discordgo.New("Bearer " + token.String)
-		if err != nil {
-			u.log.Errorln("Failed to create discord session:", err)
-		} else {
-			u.Session = session
+		if err := u.Login(token.String); err != nil {
+			u.log.Errorln("Failed to login: ", err)
 		}
 	}