添加创建群聊支持 ✨
This commit is contained in:
parent
324d693290
commit
7b15c3a42c
21
caller.go
21
caller.go
@ -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()
|
||||
|
24
client.go
24
client.go
@ -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)
|
||||
}
|
||||
|
822
message.go
822
message.go
File diff suppressed because it is too large
Load Diff
@ -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
1
url.go
@ -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
27
user.go
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user