diff --git a/commands.go b/commands.go index 252248c..ac4ddbb 100644 --- a/commands.go +++ b/commands.go @@ -231,7 +231,18 @@ func (handler *CommandHandler) CommandReconnect(ce *CommandEvent) { } return } - err := ce.User.Conn.Restore() + + wasConnected := true + sess, err := ce.User.Conn.Disconnect() + if err == whatsapp.ErrNotConnected { + wasConnected = false + } else if err != nil { + ce.User.log.Warnln("Error while disconnecting:", err) + } else if len(sess.Wid) > 0 { + ce.User.SetSession(&sess) + } + + err = ce.User.Conn.Restore() if err == whatsapp.ErrInvalidSession { if ce.User.Session != nil { ce.User.log.Debugln("Got invalid session error when reconnecting, but user has session. Retrying using RestoreWithSession()...") @@ -268,7 +279,14 @@ func (handler *CommandHandler) CommandReconnect(ce *CommandEvent) { return } ce.User.ConnectionErrors = 0 - ce.Reply("Reconnected successfully.") + + var msg string + if wasConnected { + msg = "Reconnected successfully." + } else { + msg = "Connected successfully." + } + ce.Reply(msg) ce.User.PostLogin() } diff --git a/provisioning.go b/provisioning.go index 51fbb97..0b17666 100644 --- a/provisioning.go +++ b/provisioning.go @@ -156,7 +156,18 @@ func (prov *ProvisioningAPI) Reconnect(w http.ResponseWriter, r *http.Request) { } return } - err := user.Conn.Restore() + + wasConnected := true + sess, err := user.Conn.Disconnect() + if err == whatsapp.ErrNotConnected { + wasConnected = false + } else if err != nil { + user.log.Warnln("Error while disconnecting:", err) + } else if len(sess.Wid) > 0 { + user.SetSession(&sess) + } + + err = user.Conn.Restore() if err == whatsapp.ErrInvalidSession { if user.Session != nil { user.log.Debugln("Got invalid session error when reconnecting, but user has session. Retrying using RestoreWithSession()...") @@ -209,7 +220,15 @@ func (prov *ProvisioningAPI) Reconnect(w http.ResponseWriter, r *http.Request) { } user.ConnectionErrors = 0 user.PostLogin() - jsonResponse(w, http.StatusOK, Response{true, "Reconnected successfully."}) + + var msg string + if wasConnected { + msg = "Reconnected successfully." + } else { + msg = "Connected successfully." + } + + jsonResponse(w, http.StatusOK, Response{true, msg}) } func (prov *ProvisioningAPI) Ping(w http.ResponseWriter, r *http.Request) {