diff --git a/commands.go b/commands.go index 612409d..275bfae 100644 --- a/commands.go +++ b/commands.go @@ -113,8 +113,8 @@ func (handler *CommandHandler) CommandMux(ce *CommandEvent) { // handler.CommandDevTest(ce) //case "set-pl": // handler.CommandSetPowerLevel(ce) - //case "logout": - // handler.CommandLogout(ce) + case "logout": + handler.CommandLogout(ce) case "login-matrix", "sync", "list", "open", "pm", "invite", "kick", "leave", "join", "create", "share": if !ce.User.HasSession() { ce.Reply("You are not logged in. Use the `login` command to log into WhatsApp.") @@ -245,8 +245,21 @@ func (handler *CommandHandler) CommandLogin(ce *CommandEvent) { } } -const cmdLogoutHelp = `logout - Logout from WhatsApp` - +const cmdLogoutHelp = `logout - Logout from Skype` +func (handler *CommandHandler) CommandLogout(ce *CommandEvent) { + //ce.User.Conn.Conn.LogoutChan <- 1 + ce.User.Conn.LoggedIn = false + ce.User.Conn.LoginInfo = &skype.Session{ + SkypeToken: "", + SkypeExpires: "", + RegistrationToken: "", + RegistrationTokenStr: "", + RegistrationExpires: "", + LocationHost: "", + EndpointId: "", + } + ce.Reply("Logged out successfully.") +} // CommandLogout handles !logout command //func (handler *CommandHandler) CommandLogout(ce *CommandEvent) { // if ce.User.Session == nil { @@ -446,7 +459,7 @@ func (handler *CommandHandler) CommandHelp(ce *CommandEvent) { ce.Reply("* " + strings.Join([]string{ cmdPrefix + cmdHelpHelp, cmdPrefix + cmdLoginHelp, - //cmdPrefix + cmdLogoutHelp, + cmdPrefix + cmdLogoutHelp, //cmdPrefix + cmdDeleteSessionHelp, //cmdPrefix + cmdReconnectHelp, //cmdPrefix + cmdDisconnectHelp, diff --git a/user.go b/user.go index 337d7da..6ecaa6d 100644 --- a/user.go +++ b/user.go @@ -373,9 +373,7 @@ func (user *User) Login(ce *CommandEvent, name string, password string) (err err } ce.Reply("Successfully logged in") - // subscribe basic - user.Conn.Subscribes() - // subscribe conta + user.Conn.Subscribes() // subscribe basic event err = user.Conn.Conn.ContactList(user.Conn.UserProfile.Username) if err == nil{ var userIds []string @@ -395,11 +393,15 @@ func (user *User) Login(ce *CommandEvent, name string, password string) (err err user.SetSession(user.Conn.LoginInfo) user.JID = "8:" + user.Conn.UserProfile.Username + skypeExt.NewUserSuffix user.addToJIDMap() - ce.User.Conn.GetConversations("", user.bridge.Config.Bridge.InitialChatSync) + _ = ce.User.Conn.GetConversations("", user.bridge.Config.Bridge.InitialChatSync) return } -func loopPresence(user *User) { + +func loopPresence(user *User) { for { + if user.Conn.LoggedIn == false { + break + } for cid, contact := range user.contactsPresence { puppet := user.bridge.GetPuppetByJID(cid) _ = puppet.DefaultIntent().SetPresence(event.Presence(strings.ToLower(contact.Availability))) @@ -407,51 +409,6 @@ func loopPresence(user *User) { time.Sleep(39 * time.Second) } } -func (user *User) Login1(ce *CommandEvent) { - //qrChan := make(chan string, 3) - //eventIDChan := make(chan id.EventID, 1) - //go user.loginQrChannel(ce, qrChan, eventIDChan) - //session, err := user.Conn.LoginWithRetry(qrChan, user.bridge.Config.Bridge.LoginQRRegenCount) - //qrChan <- "stop" - //if err != nil { - // var eventID id.EventID - // select { - // case eventID = <-eventIDChan: - // default: - // } - // reply := event.MessageEventContent{ - // MsgType: event.MsgText, - // } - // if err == whatsapp.ErrAlreadyLoggedIn { - // reply.Body = "You're already logged in" - // } else if err == whatsapp.ErrLoginInProgress { - // reply.Body = "You have a login in progress already." - // } else if err == whatsapp.ErrLoginTimedOut { - // reply.Body = "QR code scan timed out. Please try again." - // } else { - // user.log.Warnln("Failed to log in:", err) - // reply.Body = fmt.Sprintf("Unknown error while logging in: %v", err) - // } - // msg := reply - // if eventID != "" { - // msg.NewContent = &reply - // msg.RelatesTo = &event.RelatesTo{ - // Type: event.RelReplace, - // EventID: eventID, - // } - // } - // _, _ = ce.Bot.SendMessageEvent(ce.RoomID, event.EventMessage, &msg) - // return - //} - //// TODO there's a bit of duplication between this and the provisioning API login method - //// Also between the two logout methods (commands.go and provisioning.go) - //user.ConnectionErrors = 0 - //user.JID = strings.Replace(user.Conn.Info.Wid, whatsappExt.OldUserSuffix, whatsappExt.NewUserSuffix, 1) - //user.addToJIDMap() - //user.SetSession(&session) - //ce.Reply("Successfully logged in, synchronizing chats...") - //user.PostLogin() -} type Chat struct { Portal *Portal