Fill usersByID properly
This commit is contained in:
@@ -281,7 +281,7 @@ var cmdLogout = &commands.FullHandler{
|
|||||||
|
|
||||||
func fnLogout(ce *WrappedCommandEvent) {
|
func fnLogout(ce *WrappedCommandEvent) {
|
||||||
wasLoggedIn := ce.User.DiscordID != ""
|
wasLoggedIn := ce.User.DiscordID != ""
|
||||||
ce.User.Logout()
|
ce.User.Logout(false)
|
||||||
if wasLoggedIn {
|
if wasLoggedIn {
|
||||||
ce.Reply("Logged out successfully.")
|
ce.Reply("Logged out successfully.")
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ func (p *ProvisioningAPI) logout(w http.ResponseWriter, r *http.Request) {
|
|||||||
} else {
|
} else {
|
||||||
msg = "User wasn't logged in."
|
msg = "User wasn't logged in."
|
||||||
}
|
}
|
||||||
user.Logout()
|
user.Logout(false)
|
||||||
jsonResponse(w, http.StatusOK, Response{true, msg})
|
jsonResponse(w, http.StatusOK, Response{true, msg})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,8 +328,6 @@ func (p *ProvisioningAPI) qrLogin(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Infofln("Logged in as %s#%s (%s)", discordUser.Username, discordUser.Discriminator, discordUser.UserID)
|
log.Infofln("Logged in as %s#%s (%s)", discordUser.Username, discordUser.Discriminator, discordUser.UserID)
|
||||||
user.DiscordID = discordUser.UserID
|
|
||||||
user.Update()
|
|
||||||
|
|
||||||
if err = user.Login(discordUser.Token); err != nil {
|
if err = user.Login(discordUser.Token); err != nil {
|
||||||
log.Errorln("Failed to connect after logging in:", err)
|
log.Errorln("Failed to connect after logging in:", err)
|
||||||
|
|||||||
21
user.go
21
user.go
@@ -458,7 +458,7 @@ func (user *User) IsLoggedIn() bool {
|
|||||||
return user.DiscordToken != ""
|
return user.DiscordToken != ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) Logout() {
|
func (user *User) Logout(isOverwriting bool) {
|
||||||
user.Lock()
|
user.Lock()
|
||||||
defer user.Unlock()
|
defer user.Unlock()
|
||||||
|
|
||||||
@@ -479,9 +479,16 @@ func (user *User) Logout() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
user.Session = nil
|
user.Session = nil
|
||||||
user.DiscordID = ""
|
|
||||||
user.DiscordToken = ""
|
user.DiscordToken = ""
|
||||||
user.ReadStateVersion = 0
|
user.ReadStateVersion = 0
|
||||||
|
if !isOverwriting {
|
||||||
|
user.bridge.usersLock.Lock()
|
||||||
|
if user.bridge.usersByID[user.DiscordID] == user {
|
||||||
|
delete(user.bridge.usersByID, user.DiscordID)
|
||||||
|
}
|
||||||
|
user.bridge.usersLock.Unlock()
|
||||||
|
}
|
||||||
|
user.DiscordID = ""
|
||||||
user.Update()
|
user.Update()
|
||||||
user.log.Infoln("User logged out")
|
user.log.Infoln("User logged out")
|
||||||
}
|
}
|
||||||
@@ -599,7 +606,15 @@ func (user *User) readyHandler(_ *discordgo.Session, r *discordgo.Ready) {
|
|||||||
user.bridgeStateLock.Unlock()
|
user.bridgeStateLock.Unlock()
|
||||||
|
|
||||||
if user.DiscordID != r.User.ID {
|
if user.DiscordID != r.User.ID {
|
||||||
|
user.bridge.usersLock.Lock()
|
||||||
user.DiscordID = r.User.ID
|
user.DiscordID = r.User.ID
|
||||||
|
if previousUser, ok := user.bridge.usersByID[user.DiscordID]; ok && previousUser != user {
|
||||||
|
user.log.Warnfln("Another user (%s) is logged in with same Discord ID, logging them out", previousUser.MXID)
|
||||||
|
// TODO send notice?
|
||||||
|
previousUser.Logout(true)
|
||||||
|
}
|
||||||
|
user.bridge.usersByID[user.DiscordID] = user
|
||||||
|
user.bridge.usersLock.Unlock()
|
||||||
user.Update()
|
user.Update()
|
||||||
}
|
}
|
||||||
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBackfilling})
|
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBackfilling})
|
||||||
@@ -833,7 +848,7 @@ func (user *User) invalidAuthHandler(_ *discordgo.Session, _ *discordgo.InvalidA
|
|||||||
user.log.Infoln("Got logged out from Discord due to invalid token")
|
user.log.Infoln("Got logged out from Discord due to invalid token")
|
||||||
user.wasLoggedOut = true
|
user.wasLoggedOut = true
|
||||||
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBadCredentials, Error: "dc-websocket-disconnect-4004", Message: "Discord access token is no longer valid, please log in again"})
|
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBadCredentials, Error: "dc-websocket-disconnect-4004", Message: "Discord access token is no longer valid, please log in again"})
|
||||||
go user.Logout()
|
go user.Logout(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) guildCreateHandler(_ *discordgo.Session, g *discordgo.GuildCreate) {
|
func (user *User) guildCreateHandler(_ *discordgo.Session, g *discordgo.GuildCreate) {
|
||||||
|
|||||||
Reference in New Issue
Block a user