添加创建群聊支持

This commit is contained in:
eatmoreapple 2021-08-17 08:22:11 +08:00
parent 324d693290
commit 7b15c3a42c
6 changed files with 483 additions and 419 deletions

View File

@ -371,6 +371,27 @@ func (c *Caller) WebWxPushLogin(uin int) (*PushLoginResponse, error) {
return &item, nil
}
// WebWxCreateChatRoom 创建群聊
func (c *Caller) WebWxCreateChatRoom(request *BaseRequest, info *LoginInfo, topic string, friends Friends) (*Group, error) {
resp, err := c.Client.WebWxCreateChatRoom(request, info, topic, friends)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var item struct {
BaseResponse BaseResponse
ChatRoomName string
}
if err = json.NewDecoder(resp.Body).Decode(&item); err != nil {
return nil, err
}
if !item.BaseResponse.Ok() {
return nil, item.BaseResponse
}
group := Group{User: &User{UserName: item.ChatRoomName}}
return &group, nil
}
// 处理响应返回的结果是否正常
func parseBaseResponseError(resp *http.Response) error {
defer resp.Body.Close()

View File

@ -728,3 +728,27 @@ func (c *Client) WebWxSendVideoMsg(request *BaseRequest, msg *SendMessage) (*htt
path.RawQuery = params.Encode()
return c.sendMessage(request, path.String(), msg)
}
// WebWxCreateChatRoom 创建群聊
func (c *Client) WebWxCreateChatRoom(request *BaseRequest, info *LoginInfo, topic string, friends Friends) (*http.Response, error) {
path, _ := url.Parse(c.Domain.BaseHost() + webwxcreatechatroom)
params := url.Values{}
params.Add("pass_ticket", info.PassTicket)
params.Add("r", fmt.Sprintf("%d", time.Now().Unix()))
path.RawQuery = params.Encode()
count := len(friends)
memberList := make([]struct{ UserName string }, count)
for index, member := range friends {
memberList[index] = struct{ UserName string }{member.UserName}
}
content := map[string]interface{}{
"BaseRequest": request,
"MemberCount": count,
"MemberList": memberList,
"Topic": topic,
}
body, _ := ToBuffer(content)
req, _ := http.NewRequest(http.MethodPost, path.String(), body)
req.Header.Add("Content-Type", jsonContentType)
return c.Do(req)
}

File diff suppressed because it is too large Load Diff

View File

@ -233,12 +233,11 @@ func (g *Group) SendFile(file *os.File) (*SentMessage, error) {
// Members 获取所有的群成员
func (g *Group) Members() (Members, error) {
group, err := g.Detail()
if err != nil {
if err := g.Detail(); err != nil {
return nil, err
}
group.MemberList.init(g.Self)
return group.MemberList, nil
g.MemberList.init(g.Self)
return g.MemberList, nil
}
// AddFriendsIn 拉好友入群

1
url.go
View File

@ -33,6 +33,7 @@ const (
webwxcheckupload = "/cgi-bin/mmwebwx-bin/webwxcheckupload"
webwxpushloginurl = "/cgi-bin/mmwebwx-bin/webwxpushloginurl"
webwxgeticon = "/cgi-bin/mmwebwx-bin/webwxgeticon"
webwxcreatechatroom = "/cgi-bin/mmwebwx-bin/webwxcreatechatroom"
webwxnewloginpage = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage"
jslogin = "https://login.wx.qq.com/jslogin"

27
user.go
View File

@ -76,19 +76,20 @@ func (u *User) SaveAvatar(filename string) error {
}
// Detail 获取用户的详情
func (u *User) Detail() (*User, error) {
func (u *User) Detail() error {
if u.UserName == u.Self.UserName {
return u.Self.User, nil
return nil
}
members := Members{u}
request := u.Self.Bot.Storage.Request
newMembers, err := u.Self.Bot.Caller.WebWxBatchGetContact(members, request)
if err != nil {
return nil, err
return err
}
newMembers.init(u.Self)
user := newMembers.First()
return user, nil
*u = *user
return nil
}
// IsFriend 判断是否为好友
@ -274,6 +275,24 @@ func (s *Self) SetRemarkNameToFriend(friend *Friend, remarkName string) error {
return s.Bot.Caller.WebWxOplog(req, remarkName, friend.UserName)
}
// CreateGroup 创建群聊
// topic 群昵称,可以传递字符串
// friends 群员,最少为2个加上自己3个,三人才能成群
func (s *Self) CreateGroup(topic string, friends ...*Friend) (*Group, error) {
if len(friends) < 2 {
return nil, errors.New("a group must be at least 2 members")
}
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
group, err := s.Bot.Caller.WebWxCreateChatRoom(req, info, topic, friends)
if err != nil {
return nil, err
}
group.Self = s
err = group.Detail()
return group, err
}
// AddFriendsIntoGroup 拉多名好友进群
// 最好自己是群主,成功率高一点,因为有的群允许非群组拉人,而有的群不允许
func (s *Self) AddFriendsIntoGroup(group *Group, friends ...*Friend) error {