支持从群聊中移除用户“
This commit is contained in:
parent
f089588ad2
commit
6ec0a4905a
54
bot_test.go
54
bot_test.go
@ -1,6 +1,7 @@
|
|||||||
package openwechat
|
package openwechat
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -46,6 +47,29 @@ func TestFriend(t *testing.T) {
|
|||||||
t.Log(friends)
|
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) {
|
func TestMps(t *testing.T) {
|
||||||
self, err := getSelf()
|
self, err := getSelf()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -77,11 +101,37 @@ func TestAddFriendIntoChatRoom(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
searchGroups := groups.SearchByNickName(1, "厉害了")
|
searchGroups := groups.SearchByNickName(1, "厉害了")
|
||||||
if searchGroups != nil {
|
if g := searchGroups.First(); g != nil {
|
||||||
g := searchGroups.First()
|
|
||||||
addFriends := friends.SearchByRemarkName(1, "1")
|
addFriends := friends.SearchByRemarkName(1, "1")
|
||||||
if err := g.AddFriendsIn(addFriends...); err != nil {
|
if err := g.AddFriendsIn(addFriends...); err != nil {
|
||||||
t.Error(err)
|
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 {
|
if len(friends) == 0 {
|
||||||
return errors.New("no friends found")
|
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)
|
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)
|
path, _ := url.Parse(c.webWxUpdateChatRoomUrl)
|
||||||
params := url.Values{}
|
params := url.Values{}
|
||||||
params.Add("fun", "addmember")
|
params.Add("fun", "addmember")
|
||||||
|
params.Add("pass_ticket", info.PassTicket)
|
||||||
|
params.Add("lang", "zh_CN")
|
||||||
path.RawQuery = params.Encode()
|
path.RawQuery = params.Encode()
|
||||||
addMemberList := make([]string, 0)
|
addMemberList := make([]string, 0)
|
||||||
for _, friend := range friends {
|
for _, friend := range friends {
|
||||||
@ -430,3 +432,23 @@ func (c *Client) AddMemberIntoChatRoom(req *BaseRequest, group *Group, friends .
|
|||||||
buffer, _ := ToBuffer(content)
|
buffer, _ := ToBuffer(content)
|
||||||
return c.Post(path.String(), jsonContentType, buffer)
|
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
|
package openwechat
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
@ -146,7 +147,54 @@ func (g *Group) Members() (Members, error) {
|
|||||||
|
|
||||||
// 拉好友入群
|
// 拉好友入群
|
||||||
func (g *Group) AddFriendsIn(friends ...*Friend) 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
|
type Groups []*Group
|
||||||
|
Loading…
x
Reference in New Issue
Block a user