Эх сурвалжийг харах

Add proper error message for multi-device

Tulir Asokan 3 жил өмнө
parent
commit
74870ec638
4 өөрчлөгдсөн 22 нэмэгдсэн , 10 устгасан
  1. 2 2
      go.mod
  2. 4 4
      go.sum
  3. 2 0
      provisioning.go
  4. 14 4
      user.go

+ 2 - 2
go.mod

@@ -12,7 +12,7 @@ require (
 	gopkg.in/yaml.v2 v2.4.0
 	gopkg.in/yaml.v2 v2.4.0
 	maunium.net/go/mauflag v1.0.0
 	maunium.net/go/mauflag v1.0.0
 	maunium.net/go/maulogger/v2 v2.3.0
 	maunium.net/go/maulogger/v2 v2.3.0
-	maunium.net/go/mautrix v0.9.23
+	maunium.net/go/mautrix v0.9.27
 )
 )
 
 
-replace github.com/Rhymen/go-whatsapp => github.com/tulir/go-whatsapp v0.5.11
+replace github.com/Rhymen/go-whatsapp => github.com/tulir/go-whatsapp v0.5.12

+ 4 - 4
go.sum

@@ -138,8 +138,8 @@ github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
 github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
 github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
 github.com/tidwall/sjson v1.1.5 h1:wsUceI/XDyZk3J1FUvuuYlK62zJv2HO2Pzb8A5EWdUE=
 github.com/tidwall/sjson v1.1.5 h1:wsUceI/XDyZk3J1FUvuuYlK62zJv2HO2Pzb8A5EWdUE=
 github.com/tidwall/sjson v1.1.5/go.mod h1:VuJzsZnTowhSxWdOgsAnb886i4AjEyTkk7tNtsL7EYE=
 github.com/tidwall/sjson v1.1.5/go.mod h1:VuJzsZnTowhSxWdOgsAnb886i4AjEyTkk7tNtsL7EYE=
-github.com/tulir/go-whatsapp v0.5.11 h1:e1EVhygdJ/YEdAIF9a6I4fIcW1l3qQcQs+h5loJVgRA=
-github.com/tulir/go-whatsapp v0.5.11/go.mod h1:7J3IIL3bEQiBJGtiZst1N4PgXHlWIartdVQLe6lcx9A=
+github.com/tulir/go-whatsapp v0.5.12 h1:JGU5yhoh+CyDcSMUilwy7FL0gFo0zqqepsHRqEjrjKc=
+github.com/tulir/go-whatsapp v0.5.12/go.mod h1:7J3IIL3bEQiBJGtiZst1N4PgXHlWIartdVQLe6lcx9A=
 golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -217,5 +217,5 @@ maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfk
 maunium.net/go/maulogger/v2 v2.2.4/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A=
 maunium.net/go/maulogger/v2 v2.2.4/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A=
 maunium.net/go/maulogger/v2 v2.3.0 h1:TMCcO65fLk6+pJXo7sl38tzjzW0KBFgc6JWJMBJp4GE=
 maunium.net/go/maulogger/v2 v2.3.0 h1:TMCcO65fLk6+pJXo7sl38tzjzW0KBFgc6JWJMBJp4GE=
 maunium.net/go/maulogger/v2 v2.3.0/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A=
 maunium.net/go/maulogger/v2 v2.3.0/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A=
-maunium.net/go/mautrix v0.9.23 h1:CoRCCVHSs0R2NjRcrFDUBlOrhvVixaj1PSE7jR8ghMs=
-maunium.net/go/mautrix v0.9.23/go.mod h1:7IzKfWvpQtN+W2Lzxc0rLvIxFM3ryKX6Ys3S/ZoWbg8=
+maunium.net/go/mautrix v0.9.27 h1:6MV6YSCGqfw8Rb0G1PHjTOkYkTY0vcZaz6wd+U+V1Is=
+maunium.net/go/mautrix v0.9.27/go.mod h1:7IzKfWvpQtN+W2Lzxc0rLvIxFM3ryKX6Ys3S/ZoWbg8=

+ 2 - 0
provisioning.go

@@ -414,6 +414,8 @@ func (prov *ProvisioningAPI) Login(w http.ResponseWriter, r *http.Request) {
 		} else if errors.Is(err, whatsapp.ErrInvalidWebsocket) {
 		} else if errors.Is(err, whatsapp.ErrInvalidWebsocket) {
 			msg = "WhatsApp connection error. Please try again."
 			msg = "WhatsApp connection error. Please try again."
 			// TODO might need to make sure it reconnects?
 			// TODO might need to make sure it reconnects?
+		} else if errors.Is(err, whatsapp.ErrMultiDeviceNotSupported) {
+			msg = "WhatsApp multi-device is not currently supported. Please disable it and try again."
 		} else {
 		} else {
 			msg = fmt.Sprintf("Unknown error while logging in: %v", err)
 			msg = fmt.Sprintf("Unknown error while logging in: %v", err)
 		}
 		}

+ 14 - 4
user.go

@@ -415,6 +415,8 @@ func (user *User) Login(ce *CommandEvent) {
 			reply.Body = "You have a login in progress already."
 			reply.Body = "You have a login in progress already."
 		} else if err == whatsapp.ErrLoginTimedOut {
 		} else if err == whatsapp.ErrLoginTimedOut {
 			reply.Body = "QR code scan timed out. Please try again."
 			reply.Body = "QR code scan timed out. Please try again."
+		} else if errors.Is(err, whatsapp.ErrMultiDeviceNotSupported) {
+			reply.Body = "WhatsApp multi-device is not currently supported. Please disable it and try again."
 		} else {
 		} else {
 			user.log.Warnln("Failed to log in:", err)
 			user.log.Warnln("Failed to log in:", err)
 			reply.Body = fmt.Sprintf("Unknown error while logging in: %v", err)
 			reply.Body = fmt.Sprintf("Unknown error while logging in: %v", err)
@@ -976,6 +978,10 @@ func (user *User) HandleError(err error) {
 		user.log.Errorfln("WhatsApp error: %v", err)
 		user.log.Errorfln("WhatsApp error: %v", err)
 	}
 	}
 	if closed, ok := err.(*whatsapp.ErrConnectionClosed); ok {
 	if closed, ok := err.(*whatsapp.ErrConnectionClosed); ok {
+		if user.Session == nil {
+			user.log.Debugln("Websocket disconnected, but no session stored, not trying to reconnect")
+			return
+		}
 		user.bridge.Metrics.TrackDisconnection(user.MXID)
 		user.bridge.Metrics.TrackDisconnection(user.MXID)
 		if closed.Code == 1000 && user.cleanDisconnection {
 		if closed.Code == 1000 && user.cleanDisconnection {
 			user.cleanDisconnection = false
 			user.cleanDisconnection = false
@@ -1054,14 +1060,18 @@ func (user *User) tryReconnect(msg string) {
 			if err != nil {
 			if err != nil {
 				user.log.Debugln("Error while disconnecting for connection reset:", err)
 				user.log.Debugln("Error while disconnecting for connection reset:", err)
 			}
 			}
-		} else if errors.Is(err, whatsapp.ErrUnpaired) {
-			user.log.Errorln("Got init 401 (unpaired) error when trying to reconnect, not retrying")
+		} else if errors.Is(err, whatsapp.ErrUnpaired) || errors.Is(err, whatsapp.ErrInvalidSession) {
+			user.log.Errorfln("Got init %s error when trying to reconnect, not retrying", err)
 			user.removeFromJIDMap(StateBadCredentials)
 			user.removeFromJIDMap(StateBadCredentials)
 			//user.JID = ""
 			//user.JID = ""
 			user.SetSession(nil)
 			user.SetSession(nil)
 			user.DeleteConnection()
 			user.DeleteConnection()
-			user.sendMarkdownBridgeAlert("\u26a0 Failed to reconnect to WhatsApp: unpaired from phone. " +
-				"To re-pair your phone, log in again.")
+			errMsg := "unpaired from phone"
+			if errors.Is(err, whatsapp.ErrInvalidSession) {
+				errMsg = "invalid session"
+			}
+			user.sendMarkdownBridgeAlert("\u26a0 Failed to reconnect to WhatsApp: %s. " +
+				"To re-pair your phone, log in again.", errMsg)
 			return
 			return
 		} else if errors.Is(err, whatsapp.ErrAlreadyLoggedIn) {
 		} else if errors.Is(err, whatsapp.ErrAlreadyLoggedIn) {
 			user.log.Warnln("Reconnection said we're already logged in, not trying anymore")
 			user.log.Warnln("Reconnection said we're already logged in, not trying anymore")