支持从群聊中移除用户“
This commit is contained in:
parent
f089588ad2
commit
6ec0a4905a
54
bot_test.go
54
bot_test.go
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
13
caller.go
13
caller.go
@ -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)
|
||||
}
|
||||
|
||||
|
24
client.go
24
client.go
@ -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)
|
||||
}
|
||||
|
50
relations.go
50
relations.go
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user