支持从群聊中移除用户“

This commit is contained in:
eatMoreApple 2021-04-25 00:33:00 +08:00
parent f089588ad2
commit 6ec0a4905a
4 changed files with 135 additions and 6 deletions

View File

@ -1,6 +1,7 @@
package openwechat
import (
"fmt"
"testing"
)
@ -46,6 +47,29 @@ func TestFriend(t *testing.T) {
t.Log(friends)
}
func TestGroup(t *testing.T) {
self, err := getSelf()
if err != nil {
t.Error(err)
return
}
group, err := self.Groups()
if err != nil {
t.Error(err)
return
}
t.Log(group)
g := group.SearchByNickName(1, "GoFrame实战1群")
if g.First() != nil {
members, err := g.First().Members()
if err != nil {
t.Error(err)
return
}
fmt.Println(members.Count())
}
}
func TestMps(t *testing.T) {
self, err := getSelf()
if err != nil {
@ -77,11 +101,37 @@ func TestAddFriendIntoChatRoom(t *testing.T) {
return
}
searchGroups := groups.SearchByNickName(1, "厉害了")
if searchGroups != nil {
g := searchGroups.First()
if g := searchGroups.First(); g != nil {
addFriends := friends.SearchByRemarkName(1, "1")
if err := g.AddFriendsIn(addFriends...); err != nil {
t.Error(err)
}
}
}
func TestRemoveFriendIntoChatRoom(t *testing.T) {
self, err := getSelf()
if err != nil {
t.Error(err)
return
}
groups, err := self.Groups()
if err != nil {
t.Error(err)
return
}
friends, err := self.Friends()
if err != nil {
t.Error(err)
return
}
searchGroups := groups.SearchByNickName(1, "厉害了")
if g := searchGroups.First(); g != nil {
addFriends := friends.SearchByRemarkName(1, "大爷")
if f := addFriends.First(); f != nil {
if err := g.RemoveMembers(Members{f.User}); err != nil {
t.Error(err)
}
}
}
}

View File

@ -228,11 +228,20 @@ func (c *Caller) Logout(info *LoginInfo) error {
}
// 拉好友入群
func (c *Caller) AddFriendIntoChatRoom(req *BaseRequest, group *Group, friends ...*Friend) error {
func (c *Caller) AddFriendIntoChatRoom(req *BaseRequest, info *LoginInfo, group *Group, friends ...*Friend) error {
if len(friends) == 0 {
return errors.New("no friends found")
}
resp := NewReturnResponse(c.Client.AddMemberIntoChatRoom(req, group, friends...))
resp := NewReturnResponse(c.Client.AddMemberIntoChatRoom(req, info, group, friends...))
return parseBaseResponseError(resp)
}
// 从群聊中移除用户
func (c *Caller) RemoveFriendFromChatRoom(req *BaseRequest, info *LoginInfo, group *Group, users ...*User) error {
if len(users) == 0 {
return errors.New("no users found")
}
resp := NewReturnResponse(c.Client.RemoveMemberFromChatRoom(req, info, group, users...))
return parseBaseResponseError(resp)
}

View File

@ -413,10 +413,12 @@ func (c *Client) Logout(info *LoginInfo) (*http.Response, error) {
}
// 添加用户进群聊
func (c *Client) AddMemberIntoChatRoom(req *BaseRequest, group *Group, friends ...*Friend) (*http.Response, error) {
func (c *Client) AddMemberIntoChatRoom(req *BaseRequest, info *LoginInfo, group *Group, friends ...*Friend) (*http.Response, error) {
path, _ := url.Parse(c.webWxUpdateChatRoomUrl)
params := url.Values{}
params.Add("fun", "addmember")
params.Add("pass_ticket", info.PassTicket)
params.Add("lang", "zh_CN")
path.RawQuery = params.Encode()
addMemberList := make([]string, 0)
for _, friend := range friends {
@ -430,3 +432,23 @@ func (c *Client) AddMemberIntoChatRoom(req *BaseRequest, group *Group, friends .
buffer, _ := ToBuffer(content)
return c.Post(path.String(), jsonContentType, buffer)
}
// 从群聊中移除用户
func (c *Client) RemoveMemberFromChatRoom(req *BaseRequest, info *LoginInfo, group *Group, friends ...*User) (*http.Response, error) {
path, _ := url.Parse(c.webWxUpdateChatRoomUrl)
params := url.Values{}
params.Add("fun", "delmember")
params.Add("lang", "zh_CN")
params.Add("pass_ticket", info.PassTicket)
delMemberList := make([]string, 0)
for _, friend := range friends {
delMemberList = append(delMemberList, friend.UserName)
}
content := map[string]interface{}{
"ChatRoomName": group.UserName,
"BaseRequest": req,
"DelMemberList": strings.Join(delMemberList, ","),
}
buffer, _ := ToBuffer(content)
return c.Post(path.String(), jsonContentType, buffer)
}

View File

@ -1,6 +1,7 @@
package openwechat
import (
"errors"
"fmt"
"os"
"strings"
@ -146,7 +147,54 @@ func (g *Group) Members() (Members, error) {
// 拉好友入群
func (g *Group) AddFriendsIn(friends ...*Friend) error {
return g.Self.Bot.Caller.AddFriendIntoChatRoom(g.Self.Bot.storage.Request, g, friends...)
if len(friends) == 0 {
return nil
}
groupMembers, err := g.Members()
if err != nil {
return err
}
for _, friend := range friends {
for _, member := range groupMembers {
if member.UserName == friend.UserName {
return fmt.Errorf("user %s has alreay in this group", friend.String())
}
}
}
req := g.Self.Bot.storage.Request
info := g.Self.Bot.storage.LoginInfo
return g.Self.Bot.Caller.AddFriendIntoChatRoom(req, info, g, friends...)
}
// 从群聊中移除用户
// Deprecated
// 无论是网页版,还是程序上都不起作用
func (g *Group) RemoveMembers(members Members) error {
if len(members) == 0 {
return nil
}
if g.IsOwner == 0 {
return errors.New("group owner required")
}
groupMembers, err := g.Members()
if err != nil {
return err
}
// 判断用户是否在群聊中
var count int
for _, member := range members {
for _, gm := range groupMembers {
if gm.UserName == member.UserName {
count++
}
}
}
if count != len(members) {
return errors.New("invalid members")
}
req := g.Self.Bot.storage.Request
info := g.Self.Bot.storage.LoginInfo
return g.Self.Bot.Caller.RemoveFriendFromChatRoom(req, info, g, members...)
}
type Groups []*Group