diff --git a/commands.go b/commands.go index 56cffad..8d4add5 100644 --- a/commands.go +++ b/commands.go @@ -1151,9 +1151,7 @@ func (handler *CommandHandler) CommandCreate(ce *CommandEvent) { handler.log.Debugln("Create Group", topic, "with", members) err := user.Conn.HandleGroupCreate(members) - inputArr := strings.Split(ce.Args[1], ",") - inputArr = inputArr[1:] members = skype.Members{} for _, memberId := range inputArr { members.Members = append(members.Members, skype.Member{ @@ -1161,7 +1159,10 @@ func (handler *CommandHandler) CommandCreate(ce *CommandEvent) { Role: "Admin", }) } - err = user.Conn.AddMember(members, "") + conversationId, ok := <-user.Conn.CreateChan + if ok { + err = user.Conn.AddMember(members, conversationId) + } if err != nil { ce.Reply("Please confirm that parameters is correct.") } else { diff --git a/portal.go b/portal.go index 68bf24e..f8cbaaa 100644 --- a/portal.go +++ b/portal.go @@ -752,50 +752,33 @@ func (portal *Portal) ChangeAdminStatus(jids []string, setAdmin bool) { //} func (portal *Portal) membershipRemove(content string) { - xmlFormat := skype.XmlContent{} + xmlFormat := skype.XmlDeleteMember{} err := xml.Unmarshal([]byte(content), &xmlFormat) + for _, target := range xmlFormat.Targets { + member := portal.bridge.GetPuppetByJID(target) - member := portal.bridge.GetPuppetByJID(xmlFormat.Target) - - memberMaxid := strings.Replace(string(member.MXID), "@skype&8:", "@skype&8-", 1) - _, err = portal.MainIntent().KickUser(portal.MXID, &mautrix.ReqKickUser{ - UserID: id.UserID(memberMaxid), - }) - if err != nil { - portal.log.Errorln("Error %v member from whatsapp:", err) - } - //for _, chat := range user.Conn.Store.Chats { - // group := portal.bridge.GetPuppetByJID(chat.Id.(string)) - // fmt.Println("member") - // fmt.Println(group) - // fmt.Println("用户信息:") - // fmt.Println(chat.Id.(string)) - // - // if group == nil { - // portal.log.Errorln("%s is not exist", jid) - // continue - // } - // if group.JID == jid { - // _, err := portal.MainIntent().KickUser(portal.MXID, &mautrix.ReqKickUser{ - // UserID: group.MXID, - // }) - // if err != nil { - // portal.log.Errorln("Error %v member from whatsapp:", err) - // } - // } - //} -} - -func (portal *Portal) membershipAdd(user *User, jid string) { - chatMap := make(map[string]skype.Conversation) - for _, chat := range user.Conn.Store.Chats { - if chat.Id == jid { - cid, _ := chat.Id.(string) - chatMap[cid] = chat + memberMaxid := strings.Replace(string(member.MXID), "@skype&8:", "@skype&8-", 1) + _, err = portal.MainIntent().KickUser(portal.MXID, &mautrix.ReqKickUser{ + UserID: id.UserID(memberMaxid), + }) + if err != nil { + portal.log.Errorln("Error %v member from whatsapp:", err) + } + } +} + +func (portal *Portal) membershipAdd(content string) { + xmlFormat := skype.XmlAddMember{} + err := xml.Unmarshal([]byte(content), &xmlFormat) + + for _, target := range xmlFormat.Targets { + puppet := portal.bridge.GetPuppetByJID(target) + fmt.Println("membershipAdd puppet jid", target) + err = puppet.IntentFor(portal).EnsureJoined(portal.MXID) + if err != nil { + portal.log.Errorln("Error %v joined member from skype:", err) } } - fmt.Println("membershipAddzsl:", chatMap) - user.syncPortals(chatMap, false) } func (portal *Portal) membershipCreate(user *User, cmd skypeExt.ChatUpdate) { diff --git a/skype-ext/skype.go b/skype-ext/skype.go index c80c06e..ab352da 100644 --- a/skype-ext/skype.go +++ b/skype-ext/skype.go @@ -285,13 +285,7 @@ func (ext *ExtendedConn) HandleGroupKick(groupJid string, numbers[]string) (err } func (ext *ExtendedConn) HandleGroupCreate(numbers skype.Members) (err error) { - //var parts []string - //parts = append(parts, numbers...) - err = ext.Conn.CreateConversationGroup(numbers) - //if err != nil { - // fmt.Printf("%s HandleGroupCreate err", err) - //} - return + return ext.Conn.CreateConversationGroup(numbers) } func (ext *ExtendedConn) HandleGroupLeave(groupJid string) (err error) { diff --git a/user.go b/user.go index 23d1e27..552bb80 100644 --- a/user.go +++ b/user.go @@ -1077,16 +1077,14 @@ func (user *User) HandleChatUpdate(cmd skype.Resource) { } go portal.UpdateAvatar(user, avatar) case skypeExt.ChatMemberAdd: - fmt.Println("portal.MXID") - fmt.Println(portal.MXID) - fmt.Println(user) + user.log.Debugfln("chat member add") if len(portal.MXID) == 0 { err := portal.CreateMatrixRoom(user) if err != nil { fmt.Println("create room failed") } } - go portal.membershipAdd(user, cmd.Jid) + go portal.membershipAdd(cmd.Content) case skypeExt.ChatMemberDelete: go portal.membershipRemove(cmd.Content) //case skypeExt.ChatActionAddTopic: