From 6be6359e3437ccf7f2388d96070d0feb26b1ff26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E5=90=83=E7=82=B9=E8=8B=B9=E6=9E=9C?= <73388495+eatmoreapple@users.noreply.github.com> Date: Mon, 30 Jan 2023 21:09:41 +0800 Subject: [PATCH] =?UTF-8?q?[feat]:=20=E6=B7=BB=E5=8A=A0=E9=82=80=E8=AF=B7?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=8A=A0=E5=85=A5=E7=BE=A4=E8=81=8A=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20(#216)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bot.go | 3 ++- bot_login.go | 6 ++++-- client.go | 31 +++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/bot.go b/bot.go index 4b2de9d..a55f688 100644 --- a/bot.go +++ b/bot.go @@ -29,6 +29,7 @@ type Bot struct { Storage *Storage hotReloadStorage HotReloadStorage uuid string + loginUUID *string deviceId string // 设备Id loginOptionGroup BotOptionGroup } @@ -312,7 +313,7 @@ func (b *Bot) UUID() string { // @receiver b // @param uuid func (b *Bot) SetUUID(uuid string) { - b.uuid = uuid + b.loginUUID = &uuid } // Context returns current context of bot diff --git a/bot_login.go b/bot_login.go index 5cde2ff..cb32127 100644 --- a/bot_login.go +++ b/bot_login.go @@ -167,13 +167,15 @@ type SacnLogin struct{} // Login 实现了 BotLogin 接口 func (s *SacnLogin) Login(bot *Bot) error { - uuid := bot.uuid - if uuid == "" { + var uuid string + if bot.loginUUID == nil { var err error uuid, err = bot.Caller.GetLoginUUID() if err != nil { return err } + } else { + uuid = *bot.loginUUID } return s.checkLogin(bot, uuid) } diff --git a/client.go b/client.go index 1ac0bdf..eef9299 100644 --- a/client.go +++ b/client.go @@ -618,6 +618,14 @@ func (c *Client) Logout(info *LoginInfo) (*http.Response, error) { // AddMemberIntoChatRoom 添加用户进群聊 func (c *Client) AddMemberIntoChatRoom(req *BaseRequest, info *LoginInfo, group *Group, friends ...*Friend) (*http.Response, error) { + if len(group.MemberList) >= 40 { + return c.InviteMemberIntoChatRoom(req, info, group, friends...) + } + return c.addMemberIntoChatRoom(req, info, group, friends...) +} + +// addMemberIntoChatRoom 添加用户进群聊 +func (c *Client) addMemberIntoChatRoom(req *BaseRequest, info *LoginInfo, group *Group, friends ...*Friend) (*http.Response, error) { path, _ := url.Parse(c.Domain.BaseHost() + webwxupdatechatroom) params := url.Values{} params.Add("fun", "addmember") @@ -639,6 +647,29 @@ func (c *Client) AddMemberIntoChatRoom(req *BaseRequest, info *LoginInfo, group return c.Do(requ) } +// InviteMemberIntoChatRoom 邀请用户进群聊 +func (c *Client) InviteMemberIntoChatRoom(req *BaseRequest, info *LoginInfo, group *Group, friends ...*Friend) (*http.Response, error) { + path, _ := url.Parse(c.Domain.BaseHost() + webwxupdatechatroom) + params := url.Values{} + params.Add("fun", "invitemember") + params.Add("pass_ticket", info.PassTicket) + params.Add("lang", "zh_CN") + path.RawQuery = params.Encode() + addMemberList := make([]string, len(friends)) + for index, friend := range friends { + addMemberList[index] = friend.UserName + } + content := map[string]interface{}{ + "ChatRoomName": group.UserName, + "BaseRequest": req, + "InviteMemberList": strings.Join(addMemberList, ","), + } + buffer, _ := ToBuffer(content) + requ, _ := http.NewRequest(http.MethodPost, path.String(), buffer) + requ.Header.Set("Content-Type", jsonContentType) + return c.Do(requ) +} + // RemoveMemberFromChatRoom 从群聊中移除用户 func (c *Client) RemoveMemberFromChatRoom(req *BaseRequest, info *LoginInfo, group *Group, friends ...*User) (*http.Response, error) { path, _ := url.Parse(c.Domain.BaseHost() + webwxupdatechatroom)