Merge branch 'develop' into kelare-develop

This commit is contained in:
zhaoYangguang 2021-11-16 13:36:49 +08:00
commit a9c8ea7a73
3 changed files with 81 additions and 213 deletions

View File

@ -3,10 +3,11 @@ package main
import ( import (
"errors" "errors"
"fmt" "fmt"
"math"
skype "github.com/kelaresg/go-skypeapi" skype "github.com/kelaresg/go-skypeapi"
"github.com/kelaresg/matrix-skype/database" "github.com/kelaresg/matrix-skype/database"
skypeExt "github.com/kelaresg/matrix-skype/skype-ext" skypeExt "github.com/kelaresg/matrix-skype/skype-ext"
"math"
"maunium.net/go/mautrix/patch" "maunium.net/go/mautrix/patch"
"sort" "sort"
@ -96,24 +97,8 @@ func (handler *CommandHandler) CommandMux(ce *CommandEvent) {
handler.CommandHelp(ce) handler.CommandHelp(ce)
//case "version": //case "version":
// handler.CommandVersion(ce) // handler.CommandVersion(ce)
//case "reconnect":
// handler.CommandReconnect(ce)
//case "disconnect":
// handler.CommandDisconnect(ce)
case "ping": case "ping":
handler.CommandPing(ce) handler.CommandPing(ce)
//case "delete-connection":
// handler.CommandDeleteConnection(ce)
//case "delete-session":
// handler.CommandDeleteSession(ce)
//case "delete-portal":
// handler.CommandDeletePortal(ce)
//case "delete-all-portals":
// handler.CommandDeleteAllPortals(ce)
//case "dev-test":
// handler.CommandDevTest(ce)
//case "set-pl":
// handler.CommandSetPowerLevel(ce)
case "logout": case "logout":
handler.CommandLogout(ce) handler.CommandLogout(ce)
case "login-matrix", "sync", "list", "open", "pm", "invite", "kick", "leave", "join", "create", "share": case "login-matrix", "sync", "list", "open", "pm", "invite", "kick", "leave", "join", "create", "share":
@ -269,8 +254,8 @@ func (handler *CommandHandler) CommandLogout(ce *CommandEvent) {
RegistrationExpires: "", RegistrationExpires: "",
LocationHost: "", LocationHost: "",
EndpointId: "", EndpointId: "",
Username: username, Username: username,
Password: password, Password: password,
} }
ce.User.Conn.Store = &skype.Store{ ce.User.Conn.Store = &skype.Store{
@ -285,7 +270,7 @@ func (handler *CommandHandler) CommandLogout(ce *CommandEvent) {
} }
} }
func leavePortals(ce *CommandEvent) { func leavePortals(ce *CommandEvent) {
portals := ce.User.GetPortals() portals := ce.User.GetPortals()
//newPortals := ce.User.GetPortalsNew() //newPortals := ce.User.GetPortalsNew()
//allPortals := newPortals[0:] //allPortals := newPortals[0:]
@ -314,130 +299,6 @@ func leavePortals(ce *CommandEvent) {
} }
} }
const cmdDeleteSessionHelp = `delete-session - Delete session information and disconnect from WhatsApp without sending a logout request`
//func (handler *CommandHandler) CommandDeleteSession(ce *CommandEvent) {
// if ce.User.Session == nil && ce.User.Conn == nil {
// ce.Reply("Nothing to purge: no session information stored and no active connection.")
// return
// }
// ce.User.SetSession(nil)
// if ce.User.Conn != nil {
// _, _ = ce.User.Conn.Disconnect()
// ce.User.Conn.RemoveHandlers()
// ce.User.Conn = nil
// }
// ce.Reply("Session information purged")
//}
const cmdReconnectHelp = `reconnect - Reconnect to WhatsApp`
//func (handler *CommandHandler) CommandReconnect(ce *CommandEvent) {
// if ce.User.Conn == nil {
// if ce.User.Session == nil {
// ce.Reply("No existing connection and no session. Did you mean `login`?")
// } else {
// ce.Reply("No existing connection, creating one...")
// ce.User.Connect(false)
// }
// return
// }
//
// 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()...")
// var sess whatsapp.Session
// sess, err = ce.User.Conn.RestoreWithSession(*ce.User.Session)
// if err == nil {
// ce.User.SetSession(&sess)
// }
// } else {
// ce.Reply("You are not logged in.")
// return
// }
// } else if err == whatsapp.ErrLoginInProgress {
// ce.Reply("A login or reconnection is already in progress.")
// return
// } else if err == whatsapp.ErrAlreadyLoggedIn {
// ce.Reply("You were already connected.")
// return
// }
// if err != nil {
// ce.User.log.Warnln("Error while reconnecting:", err)
// if err.Error() == "restore session connection timed out" {
// ce.Reply("Reconnection timed out. Is WhatsApp on your phone reachable?")
// } else {
// ce.Reply("Unknown error while reconnecting: %v", err)
// }
// ce.User.log.Debugln("Disconnecting due to failed session restore in reconnect command...")
// sess, err := ce.User.Conn.Disconnect()
// if err != nil {
// ce.User.log.Errorln("Failed to disconnect after failed session restore in reconnect command:", err)
// } else if len(sess.Wid) > 0 {
// ce.User.SetSession(&sess)
// }
// return
// }
// ce.User.ConnectionErrors = 0
//
// var msg string
// if wasConnected {
// msg = "Reconnected successfully."
// } else {
// msg = "Connected successfully."
// }
// ce.Reply(msg)
// ce.User.PostLogin()
//}
const cmdDeleteConnectionHelp = `delete-connection - Disconnect ignoring errors and delete internal connection state.`
//func (handler *CommandHandler) CommandDeleteConnection(ce *CommandEvent) {
// if ce.User.Conn == nil {
// ce.Reply("You don't have a WhatsApp connection.")
// return
// }
// sess, err := ce.User.Conn.Disconnect()
// if err == nil && len(sess.Wid) > 0 {
// ce.User.SetSession(&sess)
// }
// ce.User.Conn.RemoveHandlers()
// ce.User.Conn = nil
// ce.Reply("Successfully disconnected. Use the `reconnect` command to reconnect.")
//}
const cmdDisconnectHelp = `disconnect - Disconnect from WhatsApp (without logging out)`
//func (handler *CommandHandler) CommandDisconnect(ce *CommandEvent) {
// if ce.User.Conn == nil {
// ce.Reply("You don't have a WhatsApp connection.")
// return
// }
// sess, err := ce.User.Conn.Disconnect()
// if err == whatsapp.ErrNotConnected {
// ce.Reply("You were not connected.")
// return
// } else if err != nil {
// ce.User.log.Warnln("Error while disconnecting:", err)
// ce.Reply("Unknown error while disconnecting: %v", err)
// return
// } else if len(sess.Wid) > 0 {
// ce.User.SetSession(&sess)
// }
// ce.Reply("Successfully disconnected. Use the `reconnect` command to reconnect.")
//}
const cmdPingHelp = `ping - Check your connection to Skype.` const cmdPingHelp = `ping - Check your connection to Skype.`
func (handler *CommandHandler) CommandPing(ce *CommandEvent) { func (handler *CommandHandler) CommandPing(ce *CommandEvent) {
@ -481,10 +342,6 @@ func (handler *CommandHandler) CommandHelp(ce *CommandEvent) {
cmdPrefix + cmdHelpHelp, cmdPrefix + cmdHelpHelp,
cmdPrefix + cmdLoginHelp, cmdPrefix + cmdLoginHelp,
cmdPrefix + cmdLogoutHelp, cmdPrefix + cmdLogoutHelp,
//cmdPrefix + cmdDeleteSessionHelp,
//cmdPrefix + cmdReconnectHelp,
//cmdPrefix + cmdDisconnectHelp,
//cmdPrefix + cmdDeleteConnectionHelp,
cmdPrefix + cmdPingHelp, cmdPrefix + cmdPingHelp,
//cmdPrefix + cmdLoginMatrixHelp, //cmdPrefix + cmdLoginMatrixHelp,
//cmdPrefix + cmdLogoutMatrixHelp, //cmdPrefix + cmdLogoutMatrixHelp,
@ -492,16 +349,12 @@ func (handler *CommandHandler) CommandHelp(ce *CommandEvent) {
cmdPrefix + cmdListHelp, cmdPrefix + cmdListHelp,
cmdPrefix + cmdOpenHelp, cmdPrefix + cmdOpenHelp,
cmdPrefix + cmdPMHelp, cmdPrefix + cmdPMHelp,
//cmdPrefix + cmdSetPowerLevelHelp,
//cmdPrefix + cmdDeletePortalHelp,
//cmdPrefix + cmdDeleteAllPortalsHelp,
cmdPrefix + cmdCreateHelp, cmdPrefix + cmdCreateHelp,
cmdPrefix + cmdInviteHelp, cmdPrefix + cmdInviteHelp,
cmdPrefix + cmdKickHelp, cmdPrefix + cmdKickHelp,
cmdPrefix + cmdLeaveHelp, cmdPrefix + cmdLeaveHelp,
cmdPrefix + cmdJoinHelp, cmdPrefix + cmdJoinHelp,
cmdPrefix + cmdShareHelp, cmdPrefix + cmdShareHelp,
}, "\n* ")) }, "\n* "))
} }
@ -531,7 +384,7 @@ func (handler *CommandHandler) CommandSync(ce *CommandEvent) {
ce.Reply("Sync complete.") ce.Reply("Sync complete.")
} }
func syncAll(user *User, create bool) { func syncAll(user *User, create bool) {
//ce.Reply("Syncing contacts...") //ce.Reply("Syncing contacts...")
user.syncPuppets(nil) user.syncPuppets(nil)
//ce.Reply("Syncing chats...") //ce.Reply("Syncing chats...")
@ -1012,7 +865,7 @@ func (handler *CommandHandler) CommandKick(ce *CommandEvent) {
handler.log.Debugln("Kicking", userNumbers, "to", converationId) handler.log.Debugln("Kicking", userNumbers, "to", converationId)
err := user.Conn.HandleGroupKick(converationId, userNumbers) err := user.Conn.HandleGroupKick(converationId, userNumbers)
if err != nil { if err != nil {
handler.log.Errorln("Kicking err", err) handler.log.Errorln("Kicking err", err)
ce.Reply("Please confirm that you have permission to kick members.") ce.Reply("Please confirm that you have permission to kick members.")
} else { } else {
ce.Reply("Remove operation completed.\nIf the member has not been removed, please check your permissions or command parameters") ce.Reply("Remove operation completed.\nIf the member has not been removed, please check your permissions or command parameters")
@ -1040,13 +893,13 @@ func (handler *CommandHandler) CommandLeave(ce *CommandEvent) {
if len(portal.MXID) > 0 { if len(portal.MXID) > 0 {
cli := handler.bridge.Bot cli := handler.bridge.Bot
fmt.Println("cli appurl:", cli.Prefix, cli.AppServiceUserID, cli.HomeserverURL.String(), ) fmt.Println("cli appurl:", cli.Prefix, cli.AppServiceUserID, cli.HomeserverURL.String())
//res, errLeave := cli.LeaveRoom(portal.MXID) //res, errLeave := cli.LeaveRoom(portal.MXID)
//cli.AppServiceUserID = ce.User.MXID //cli.AppServiceUserID = ce.User.MXID
u := cli.BuildURL("rooms", portal.MXID, "leave") u := cli.BuildURL("rooms", portal.MXID, "leave")
fmt.Println(u) fmt.Println(u)
resp := mautrix.RespLeaveRoom{} resp := mautrix.RespLeaveRoom{}
res , err := cli.MakeRequest("POST", u, struct{}{}, &resp) res, err := cli.MakeRequest("POST", u, struct{}{}, &resp)
fmt.Println("leave res : ", res) fmt.Println("leave res : ", res)
fmt.Println("leave res err: ", err) fmt.Println("leave res err: ", err)
//if errLeave != nil { //if errLeave != nil {
@ -1062,9 +915,10 @@ func (handler *CommandHandler) CommandLeave(ce *CommandEvent) {
ce.Reply("Leave operation completed and successful.") ce.Reply("Leave operation completed and successful.")
} }
const cmdShareHelp = `share <_group ID_> - Generate a link to join the group.` const cmdShareHelp = `share <_group ID_> - Generate a link to join the group.`
func (handler *CommandHandler) CommandShare(ce *CommandEvent) { func (handler *CommandHandler) CommandShare(ce *CommandEvent) {
if len(ce.Args) == 0 { if len(ce.Args) == 0 {
ce.Reply("**Usage:** `share <group id>`") ce.Reply("**Usage:** `share <group id>`")
return return
@ -1080,7 +934,7 @@ func (handler *CommandHandler) CommandShare(ce *CommandEvent) {
} }
//set enabled //set enabled
enstr := map[string]string{ enstr := map[string]string{
"joiningenabled":"true", "joiningenabled": "true",
} }
_, err := user.Conn.SetConversationThreads(converationId, enstr) _, err := user.Conn.SetConversationThreads(converationId, enstr)
if err != nil { if err != nil {
@ -1202,7 +1056,7 @@ func (handler *CommandHandler) CommandCreate(ce *CommandEvent) {
selfMembers := skype.Members{} selfMembers := skype.Members{}
member2 := skype.Member{ member2 := skype.Member{
Id: strings.Replace(ce.User.JID, skypeExt.NewUserSuffix,"", 1), Id: strings.Replace(ce.User.JID, skypeExt.NewUserSuffix, "", 1),
Role: "Admin", Role: "Admin",
} }

View File

@ -101,11 +101,14 @@ func (puppet *Puppet) StartCustomMXID() error {
} }
resp, err := intent.Whoami() resp, err := intent.Whoami()
if err != nil { if err != nil {
if strings.Index(err.Error(), "M_UNKNOWN_TOKEN (HTTP 401)") > -1 { // if strings.Index(err.Error(), "M_UNKNOWN_TOKEN (HTTP 401)") > -1 {
puppet.log.Debugln("StartCustomMXID UpdateAccessToken: ", puppet.MXID) // puppet.log.Debugln("StartCustomMXID UpdateAccessToken: ", puppet.MXID)
if puppet.customUser != nil { // if puppet.customUser != nil {
err, _ = puppet.customUser.UpdateAccessToken(puppet) // err, _ = puppet.customUser.UpdateAccessToken(puppet)
} // }
// }
if puppet.customUser != nil {
err, _ = puppet.updateCustomAccessTokenIfExpired(err, puppet.customUser)
} }
if err != nil { if err != nil {
puppet.clearCustomMXID() puppet.clearCustomMXID()
@ -123,6 +126,17 @@ func (puppet *Puppet) StartCustomMXID() error {
return nil return nil
} }
func (puppet *Puppet) updateCustomAccessTokenIfExpired(err error, user *User) (newErr error, accessToken string) {
if user == nil {
return err, ""
}
puppet.log.Debugln("StartCustomMXID UpdateAccessToken: ", puppet.MXID)
if strings.Index(err.Error(), "M_UNKNOWN_TOKEN (HTTP 401)") > -1 {
return user.UpdateAccessToken(puppet)
}
return err, ""
}
func (puppet *Puppet) startSyncing() { func (puppet *Puppet) startSyncing() {
if !puppet.bridge.Config.Bridge.SyncWithCustomPuppets { if !puppet.bridge.Config.Bridge.SyncWithCustomPuppets {
return return
@ -146,7 +160,7 @@ func (puppet *Puppet) stopSyncing() {
func (puppet *Puppet) ProcessResponse(resp *mautrix.RespSync, since string) error { func (puppet *Puppet) ProcessResponse(resp *mautrix.RespSync, since string) error {
if !puppet.customUser.IsConnected() { if !puppet.customUser.IsConnected() {
puppet.log.Debugln("Skipping sync processing: custom user not connected to whatsapp") puppet.log.Debugln("Skipping sync processing: custom user not connected to skype")
return nil return nil
} }
for roomID, events := range resp.Rooms.Join { for roomID, events := range resp.Rooms.Join {
@ -237,7 +251,8 @@ func (puppet *Puppet) handleTypingEvent(portal *Portal, evt *event.Event) {
func (puppet *Puppet) OnFailedSync(res *mautrix.RespSync, err error) (time.Duration, error) { func (puppet *Puppet) OnFailedSync(res *mautrix.RespSync, err error) (time.Duration, error) {
puppet.log.Warnln("Sync error:", err) puppet.log.Warnln("Sync error:", err)
return 10 * time.Second, nil err, _ = puppet.updateCustomAccessTokenIfExpired(err, puppet.customUser)
return 10 * time.Second, err
} }
func (puppet *Puppet) GetFilterJSON(_ id.UserID) *mautrix.Filter { func (puppet *Puppet) GetFilterJSON(_ id.UserID) *mautrix.Filter {

93
user.go
View File

@ -85,10 +85,10 @@ func (bridge *Bridge) GetUserByJID(userID types.SkypeID) *User {
return user return user
} }
func (user *User) getSkypeIdByMixId() (skypeId string){ func (user *User) getSkypeIdByMixId() (skypeId string) {
mixIdArr := strings.Split(string(user.MXID), "&") mixIdArr := strings.Split(string(user.MXID), "&")
idArr := strings.Split(mixIdArr[1], ":"+user.bridge.Config.Homeserver.Domain) idArr := strings.Split(mixIdArr[1], ":"+user.bridge.Config.Homeserver.Domain)
skypeId = strings.Replace(idArr[0], "-",":",2) skypeId = strings.Replace(idArr[0], "-", ":", 2)
return skypeId return skypeId
} }
@ -363,7 +363,7 @@ func (user *User) Login(ce *CommandEvent, name string, password string) (err err
user.Conn.Subscribes() // subscribe basic event user.Conn.Subscribes() // subscribe basic event
err = user.Conn.Conn.ContactList(user.Conn.UserProfile.Username) err = user.Conn.Conn.ContactList(user.Conn.UserProfile.Username)
if err == nil{ if err == nil {
var userIds []string var userIds []string
for _, contact := range user.Conn.Store.Contacts { for _, contact := range user.Conn.Store.Contacts {
if strings.Index(contact.PersonId, "28:") > -1 { if strings.Index(contact.PersonId, "28:") > -1 {
@ -400,7 +400,7 @@ func (user *User) monitorSession(ce *CommandEvent) {
} }
} }
item, ok := <- user.Conn.Refresh item, ok := <-user.Conn.Refresh
if !ok { if !ok {
user.Conn.Refresh = nil user.Conn.Refresh = nil
} }
@ -463,7 +463,7 @@ func (user *User) tryAutomaticDoublePuppeting() {
return return
} }
fmt.Println("tryAutomaticDoublePuppeting2", user.MXID) fmt.Println("tryAutomaticDoublePuppeting2", user.MXID)
_,_ = user.UpdateAccessToken(puppet) _, _ = user.UpdateAccessToken(puppet)
} }
func (user *User) UpdateAccessToken(puppet *Puppet) (err error, accessToken string) { func (user *User) UpdateAccessToken(puppet *Puppet) (err error, accessToken string) {
@ -516,7 +516,7 @@ func (user *User) syncPortals(chatMap map[string]skype.Conversation, createAll b
existingKeys := user.GetInCommunityMap() existingKeys := user.GetInCommunityMap()
portalKeys := make([]database.PortalKeyWithMeta, 0, len(chatMap)) portalKeys := make([]database.PortalKeyWithMeta, 0, len(chatMap))
for _, chat := range chatMap { for _, chat := range chatMap {
t, err := time.Parse(time.RFC3339,chat.LastMessage.ComposeTime) t, err := time.Parse(time.RFC3339, chat.LastMessage.ComposeTime)
if err != nil { if err != nil {
t = time.Now() t = time.Now()
if chat.Properties.ConversationStatus != "Accepted" && len(chat.ThreadProperties.Lastjoinat) < 1 { if chat.Properties.ConversationStatus != "Accepted" && len(chat.ThreadProperties.Lastjoinat) < 1 {
@ -612,12 +612,12 @@ func (user *User) syncPuppets(contacts map[string]skype.Contact) {
if user.Conn.UserProfile.LastName != "" { if user.Conn.UserProfile.LastName != "" {
username = user.Conn.UserProfile.FirstName + " " + user.Conn.UserProfile.LastName username = user.Conn.UserProfile.FirstName + " " + user.Conn.UserProfile.LastName
} }
contacts["8:" + user.Conn.UserProfile.Username + skypeExt.NewUserSuffix] = skype.Contact{ contacts["8:"+user.Conn.UserProfile.Username+skypeExt.NewUserSuffix] = skype.Contact{
Profile: skype.UserInfoProfile{ Profile: skype.UserInfoProfile{
AvatarUrl: user.Conn.UserProfile.AvatarUrl, AvatarUrl: user.Conn.UserProfile.AvatarUrl,
}, },
DisplayName: username, DisplayName: username,
PersonId: user.Conn.UserProfile.Username, PersonId: user.Conn.UserProfile.Username,
} }
for personId, contact := range contacts { for personId, contact := range contacts {
fmt.Println("Syncing puppet info from contacts", personId) fmt.Println("Syncing puppet info from contacts", personId)
@ -716,7 +716,7 @@ func (user *User) HandleJSONParseError(err error) {
func (user *User) PortalKey(jid types.SkypeID) database.PortalKey { func (user *User) PortalKey(jid types.SkypeID) database.PortalKey {
fmt.Println("User PortalKey jid: ", jid) fmt.Println("User PortalKey jid: ", jid)
fmt.Println("User PortalKey user.JID: ", user.JID) fmt.Println("User PortalKey user.JID: ", user.JID)
return database.NewPortalKey(jid, user.JID) return database.NewPortalKey(jid, user.JID)
} }
@ -855,14 +855,14 @@ func (user *User) HandlePresence(info skype.Resource) {
sendId := info.SendId + skypeExt.NewUserSuffix sendId := info.SendId + skypeExt.NewUserSuffix
puppet := user.bridge.GetPuppetByJID(sendId) puppet := user.bridge.GetPuppetByJID(sendId)
if _,ok := user.contactsPresence[sendId]; ok { if _, ok := user.contactsPresence[sendId]; ok {
user.contactsPresence[sendId].Availability = info.Availability user.contactsPresence[sendId].Availability = info.Availability
user.contactsPresence[sendId].Status = info.Status user.contactsPresence[sendId].Status = info.Status
} else { } else {
user.contactsPresence[sendId] = &skypeExt.Presence { user.contactsPresence[sendId] = &skypeExt.Presence{
Id: sendId, Id: sendId,
Availability: info.Availability, Availability: info.Availability,
Status: info.Status, Status: info.Status,
} }
} }
@ -876,20 +876,20 @@ func (user *User) HandlePresence(info skype.Resource) {
puppet.typingIn = "" puppet.typingIn = ""
puppet.typingAt = 0 puppet.typingAt = 0
} else { } else {
_ = puppet.DefaultIntent().SetPresence("online") _ = puppet.DefaultIntent().SetPresence("online")
} }
//case whatsapp.PresenceComposing: //case whatsapp.PresenceComposing:
// portal := user.GetPortalByJID(info.Jid) // portal := user.GetPortalByJID(info.Jid)
// if len(puppet.typingIn) > 0 && puppet.typingAt+15 > time.Now().Unix() { // if len(puppet.typingIn) > 0 && puppet.typingAt+15 > time.Now().Unix() {
// if puppet.typingIn == portal.MXID { // if puppet.typingIn == portal.MXID {
// return // return
// } // }
// _, _ = puppet.IntentFor(portal).UserTyping(puppet.typingIn, false, 0) // _, _ = puppet.IntentFor(portal).UserTyping(puppet.typingIn, false, 0)
// } // }
// puppet.typingIn = portal.MXID // puppet.typingIn = portal.MXID
// puppet.typingAt = time.Now().Unix() // puppet.typingAt = time.Now().Unix()
// _, _ = puppet.IntentFor(portal).UserTyping(portal.MXID, true, 15*1000) // _, _ = puppet.IntentFor(portal).UserTyping(portal.MXID, true, 15*1000)
// _ = puppet.DefaultIntent().SetPresence("online") // _ = puppet.DefaultIntent().SetPresence("online")
} }
} }
@ -1038,7 +1038,7 @@ func (user *User) HandleChatUpdate(cmd skype.Resource) {
url = url + "/views/swx_avatar" url = url + "/views/swx_avatar"
} }
fmt.Println() fmt.Println()
fmt.Println("HandleChatUpdateL picture:", url ) fmt.Println("HandleChatUpdateL picture:", url)
fmt.Println() fmt.Println()
avatar := &skypeExt.ProfilePicInfo{ avatar := &skypeExt.ProfilePicInfo{
URL: url, URL: url,
@ -1059,34 +1059,33 @@ func (user *User) HandleChatUpdate(cmd skype.Resource) {
go portal.membershipRemove(cmd.Content) go portal.membershipRemove(cmd.Content)
case "": case "":
if skypeExt.ChatActionType(cmd.Type) == skypeExt.ChatActionThread { if skypeExt.ChatActionType(cmd.Type) == skypeExt.ChatActionThread {
if len(cmd.ETag) > 0 && len(cmd.Properties.Capabilities) < 1{ if len(cmd.ETag) > 0 && len(cmd.Properties.Capabilities) < 1 {
portal.Delete() portal.Delete()
portal.Cleanup(false) portal.Cleanup(false)
} }
} }
//case skypeExt.ChatActionAddTopic: //case skypeExt.ChatActionAddTopic:
// go portal.UpdateTopic(cmd.Data.AddTopic.Topic, cmd.Data.SenderJID) // go portal.UpdateTopic(cmd.Data.AddTopic.Topic, cmd.Data.SenderJID)
//case skypeExt.ChatActionRemoveTopic: //case skypeExt.ChatActionRemoveTopic:
// go portal.UpdateTopic("", cmd.Data.SenderJID) // go portal.UpdateTopic("", cmd.Data.SenderJID)
//case skypeExt.ChatActionPromote: //case skypeExt.ChatActionPromote:
// go portal.ChangeAdminStatus(cmd.Data.PermissionChange.JIDs, true) // go portal.ChangeAdminStatus(cmd.Data.PermissionChange.JIDs, true)
//case skypeExt.ChatActionDemote: //case skypeExt.ChatActionDemote:
// go portal.ChangeAdminStatus(cmd.Data.PermissionChange.JIDs, false) // go portal.ChangeAdminStatus(cmd.Data.PermissionChange.JIDs, false)
//case skypeExt.ChatActionAnnounce: //case skypeExt.ChatActionAnnounce:
// go portal.RestrictMessageSending(cmd.Data.Announce) // go portal.RestrictMessageSending(cmd.Data.Announce)
//case skypeExt.ChatActionRestrict: //case skypeExt.ChatActionRestrict:
// go portal.RestrictMetadataChanges(cmd.Data.Restrict) // go portal.RestrictMetadataChanges(cmd.Data.Restrict)
//case skypeExt.ChatActionAdd: //case skypeExt.ChatActionAdd:
// go portal.membershipAdd(user, cmd.Jid) // go portal.membershipAdd(user, cmd.Jid)
//case skypeExt.ChatActionRemove: //case skypeExt.ChatActionRemove:
// go portal.membershipRemove(cmd.Data.MemberAction.JIDs, cmd.Data.Action) // go portal.membershipRemove(cmd.Data.MemberAction.JIDs, cmd.Data.Action)
//case skypeExt.ChatActionIntroduce: //case skypeExt.ChatActionIntroduce:
// go portal.membershipAdd(user, cmd.JID) // go portal.membershipAdd(user, cmd.JID)
} }
} }
//func (user *User) HandleChatUpdate(cmd whatsappExt.ChatUpdate) { //func (user *User) HandleChatUpdate(cmd whatsappExt.ChatUpdate) {
// if cmd.Command != whatsappExt.ChatUpdateCommandAction { // if cmd.Command != whatsappExt.ChatUpdateCommandAction {
// return // return