Explorar o código

Add proper bridge state errors for different logout types

Tulir Asokan %!s(int64=3) %!d(string=hai) anos
pai
achega
73241b6f21
Modificáronse 2 ficheiros con 11 adicións e 1 borrados
  1. 4 0
      bridgestate.go
  2. 7 1
      user.go

+ 4 - 0
bridgestate.go

@@ -48,6 +48,8 @@ type BridgeErrorCode string
 
 const (
 	WALoggedOut     BridgeErrorCode = "wa-logged-out"
+	WAAccountBanned BridgeErrorCode = "wa-account-banned"
+	WAUnknownLogout BridgeErrorCode = "wa-unknown-logout"
 	WANotConnected  BridgeErrorCode = "wa-not-connected"
 	WAConnecting    BridgeErrorCode = "wa-connecting"
 	WAServerTimeout BridgeErrorCode = "wa-server-timeout"
@@ -56,6 +58,8 @@ const (
 
 var bridgeHumanErrors = map[BridgeErrorCode]string{
 	WALoggedOut:     "You were logged out from another device. Relogin to continue using the bridge.",
+	WAAccountBanned: "Your account was banned from WhatsApp. You can contact support from the WhatsApp mobile app on your phone.",
+	WAUnknownLogout: "You were logged out for an unknown reason. Relogin to continue using the bridge.",
 	WANotConnected:  "You're not connected to WhatsApp",
 	WAConnecting:    "Reconnecting to WhatsApp...",
 	WAServerTimeout: "The WhatsApp web servers are not responding. The bridge will try to reconnect.",

+ 7 - 1
user.go

@@ -875,7 +875,13 @@ func (user *User) UpdateDirectChats(chats map[id.UserID][]id.RoomID) {
 }
 
 func (user *User) handleLoggedOut(onConnect bool, reason events.ConnectFailureReason) {
-	user.removeFromJIDMap(BridgeState{StateEvent: StateBadCredentials, Error: WALoggedOut, Message: reason.String()})
+	errorCode := WAUnknownLogout
+	if reason == events.ConnectFailureLoggedOut {
+		errorCode = WALoggedOut
+	} else if reason == events.ConnectFailureBanned {
+		errorCode = WAAccountBanned
+	}
+	user.removeFromJIDMap(BridgeState{StateEvent: StateBadCredentials, Error: errorCode})
 	user.DeleteConnection()
 	user.Session = nil
 	user.JID = types.EmptyJID