diff --git a/bridge/commands.go b/bridge/commands.go index 72daf2e..48a441b 100644 --- a/bridge/commands.go +++ b/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 } diff --git a/bridge/user.go b/bridge/user.go index 7addd05..a008121 100644 --- a/bridge/user.go +++ b/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) +} diff --git a/database/user.go b/database/user.go index 126f6a3..63f045e 100644 --- a/database/user.go +++ b/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) } }