tt/core/callapi_room.go
2024-05-28 08:47:31 +08:00

353 lines
10 KiB
Go

package core
import (
"github.com/goWxHook/goWxHook/utils"
"github.com/goWxHook/goWxHook/utils/json"
)
type GetChatRoomListResponse struct {
Data []GetChatRoomListResponseDataItem `json:"data"`
Type int `json:"type"`
}
type GetChatRoomListResponseDataItem struct {
Avatar string `json:"avatar"`
IsManager int `json:"is_manager"`
ManagerWxid string `json:"manager_wxid"`
MemberList []string `json:"member_list"`
Nickname string `json:"nickname"`
Remark string `json:"remark"`
TotalMember int `json:"total_member"`
Wxid string `json:"wxid"`
}
// GetChatRoomList 群聊列表
func (w *WxApi) GetChatRoomList() ([]GetChatRoomListResponseDataItem, error) {
resp, err := w.internalCall(MtDataChatroomsMsg, 10, MtDataChatroomsMsg, map[string]interface{}{"detail": 1}, nil)
if err != nil {
return nil, err
}
var rdata GetChatRoomListResponse
err = json.Unmarshal([]byte(resp), &rdata)
if err != nil {
return nil, WxError{-1, err.Error()}
}
return rdata.Data, nil
}
type GetChatRoomMemberListResponse struct {
Data GetChatRoomMemberListResponseData `json:"data"`
Type int `json:"type"`
}
type GetChatRoomMemberListResponseData struct {
Extend string `json:"extend"`
GroupWxid string `json:"group_wxid"`
MemberList []struct {
Account string `json:"account"`
Avatar string `json:"avatar"`
City string `json:"city"`
Country string `json:"country"`
DisplayName string `json:"display_name"`
Nickname string `json:"nickname"`
Province string `json:"province"`
Remark string `json:"remark"`
Sex int `json:"sex"`
Wxid string `json:"wxid"`
} `json:"member_list"`
Total int `json:"total"`
}
// GetChatRoomMemberList 获取群成员列表
func (w *WxApi) GetChatRoomMemberList(roomWxid string) (*GetChatRoomMemberListResponseData, error) {
resp, err := w.internalCall(MtDataChatroomMembersMsg, 20, MtDataChatroomMembersMsg, map[string]interface{}{"room_wxid": roomWxid}, nil)
if err != nil {
return nil, err
}
var rdata GetChatRoomMemberListResponse
err = json.Unmarshal([]byte(resp), &rdata)
if err != nil {
return nil, WxError{-1, err.Error()}
}
return &rdata.Data, nil
}
// GetRoomDetailInfoByProtocol 获取群详细信息(协议)
func (w *WxApi) GetRoomDetailInfoByProtocol(roomWxid string) ([]GetFriendDetailInfoByProtocolResponseDataContactListItem, error) {
resp, err := w.internalCall(MtGetFriendDetailMsg, 20, MtGetFriendDetailMsg, map[string]interface{}{"wxid": roomWxid}, nil)
if err != nil {
return nil, err
}
var rdata GetFriendDetailInfoByProtocolResponse
err = json.Unmarshal([]byte(resp), &rdata)
if err != nil {
return nil, WxError{-1, err.Error()}
}
return rdata.Data.ContactList, nil
}
type GetRoomMemberInviteListResponseData struct {
MemberList []struct {
Avatar string `json:"avatar"`
Flag int `json:"flag"`
InviteBy string `json:"invite_by"`
Nickname string `json:"nickname"`
Wxid string `json:"wxid"`
} `json:"member_list"`
RoomWxid string `json:"room_wxid"`
}
type GetRoomMemberInviteListResponse struct {
Data GetRoomMemberInviteListResponseData `json:"data"`
Type int `json:"type"`
}
// GetRoomMemberInviteList 获取群成员邀请关系(协议)
func (w *WxApi) GetRoomMemberInviteList(roomWxid string) (*GetRoomMemberInviteListResponseData, error) {
resp, err := w.internalCall(MtGetChatRoomInviteRelationMsg, 20, MtGetChatRoomInviteRelationMsg, map[string]interface{}{"room_wxid": roomWxid}, nil)
if err != nil {
return nil, err
}
var rdata GetRoomMemberInviteListResponse
err = json.Unmarshal([]byte(resp), &rdata)
if err != nil {
return nil, WxError{-1, err.Error()}
}
return &rdata.Data, nil
}
type CreateRoomRequest struct {
Wxids []string `json:"wxids"`
}
// CreateChatRoom 创建群聊
func (w *WxApi) CreateChatRoom(request CreateRoomRequest) error {
_, err := w.internalCall(0, -1, MtCreateRoomMsg, request.Wxids, nil)
return err
}
type CreateChatRoomByProtocolResponseData struct {
BaseResponse struct {
ErrMsg struct {
String string `json:"string"`
} `json:"errMsg"`
Ret int `json:"ret"`
} `json:"baseResponse"`
BigHeadImgUrl string `json:"bigHeadImgUrl"`
ChatRoomName struct {
String string `json:"string"`
} `json:"chatRoomName"`
ImgBuf struct {
Buffer string `json:"buffer"`
ILen int `json:"iLen"`
} `json:"imgBuf"`
MemberCount int `json:"memberCount"`
MemberList []struct {
City string `json:"city"`
ContactType int `json:"contactType"`
Country string `json:"country"`
MemberName struct {
String string `json:"string"`
} `json:"memberName"`
MemberStatus int `json:"memberStatus"`
NickName struct {
String string `json:"string"`
} `json:"nickName"`
PersonalCard int `json:"personalCard"`
Province string `json:"province"`
PyInitial struct {
String string `json:"string"`
} `json:"pyInitial"`
QuanPin struct {
String string `json:"string"`
} `json:"quanPin"`
Remark struct {
} `json:"remark"`
RemarkPYInitial struct {
} `json:"remarkPYInitial"`
RemarkQuanPin struct {
} `json:"remarkQuanPin"`
Sex int `json:"sex"`
Signature string `json:"signature"`
VerifyFlag int `json:"verifyFlag"`
VerifyInfo string `json:"verifyInfo"`
} `json:"memberList"`
PyInitial struct {
} `json:"pyInitial"`
QuanPin struct {
} `json:"quanPin"`
SmallHeadImgUrl string `json:"smallHeadImgUrl"`
Topic struct {
} `json:"topic"`
}
type CreateChatRoomByProtocolResponse struct {
Data CreateChatRoomByProtocolResponseData `json:"data"`
Type int `json:"type"`
}
// CreateChatRoomByProtocol 创建群聊(协议)
func (w *WxApi) CreateChatRoomByProtocol(request CreateRoomRequest) (*CreateChatRoomByProtocolResponseData, error) {
resp, err := w.internalCall(MtCreateRoomByProtocolMsg, 20, MtCreateRoomByProtocolMsg, request.Wxids, nil)
if err != nil {
return nil, err
}
var rdata CreateChatRoomByProtocolResponse
err = json.Unmarshal([]byte(resp), &rdata)
if err != nil {
return nil, WxError{-1, err.Error()}
}
return &rdata.Data, nil
}
type InviteToRoomRequest struct {
RoomWxid string `json:"room_wxid"`
MemberList []string `json:"member_list"`
}
type InviteToRoomResponseData struct {
BaseResponse struct {
ErrMsg struct {
String string `json:"string"`
} `json:"errMsg"`
Ret int `json:"ret"`
} `json:"baseResponse"`
MemberCount int `json:"memberCount"`
MemberList []struct {
City string `json:"city"`
ContactType int `json:"contactType"`
Country string `json:"country"`
MemberName struct {
String string `json:"string"`
} `json:"memberName"`
MemberStatus int `json:"memberStatus"`
NickName struct {
String string `json:"string"`
} `json:"nickName"`
PersonalCard int `json:"personalCard"`
Province string `json:"province"`
PyInitial struct {
String string `json:"string"`
} `json:"pyInitial"`
QuanPin struct {
String string `json:"string"`
} `json:"quanPin"`
Remark struct {
} `json:"remark"`
RemarkPYInitial struct {
} `json:"remarkPYInitial"`
RemarkQuanPin struct {
} `json:"remarkQuanPin"`
Sex int `json:"sex"`
Signature string `json:"signature"`
VerifyFlag int `json:"verifyFlag"`
VerifyInfo string `json:"verifyInfo"`
} `json:"memberList"`
}
type InviteToRoomResponse struct {
Data InviteToRoomResponseData `json:"data"`
Type int `json:"type"`
}
// InviteToRoom 批量拉人进入群聊
func (w *WxApi) InviteToRoom(request InviteToRoomRequest) (*InviteToRoomResponseData, error) {
rr := utils.Ifs(len(request.MemberList) > 40, MtInviteToRoomReqMsg, MtInviteToRoomMsg)
resp, err := w.internalCall(rr, 30, rr, request, nil)
if err != nil {
return nil, err
}
var rdata InviteToRoomResponse
err = json.Unmarshal([]byte(resp), &rdata)
if err != nil {
return nil, WxError{-1, err.Error()}
}
return &rdata.Data, nil
}
type DelChatRoomMemberRequest struct {
RoomWxid string `json:"room_wxid"`
MemberList []string `json:"member_list"`
}
// DelChatRoomMember 删除群成员
func (w *WxApi) DelChatRoomMember(request DelChatRoomMemberRequest) error {
_, err := w.internalCall(MtDelRoomMemberMsg, 30, MtDelRoomMemberMsg, request, nil)
return err
}
type EditChatRoomMemberRequest struct {
RoomWxid string `json:"room_wxid"`
Name string `json:"name"`
}
// EditChatRoomName 修改群聊名称
func (w *WxApi) EditChatRoomName(request EditChatRoomMemberRequest) error {
_, err := w.internalCall(0, -1, MtModRoomNameMsg, request, nil)
return err
}
type EditChatRoomNoticeRequest struct {
RoomWxid string `json:"room_wxid"`
Notice string `json:"notice"`
}
// EditChatRoomNotice 修改群公告
func (w *WxApi) EditChatRoomNotice(request EditChatRoomNoticeRequest) error {
_, err := w.internalCall(0, -1, MtModRoomNoticeMsg, request, nil)
return err
}
type EditRoomMineNickNameRequest struct {
RoomWxid string `json:"room_wxid"`
Nickname string `json:"nickname"`
}
// EditRoomMineNickName 修改我在本群的昵称
func (w *WxApi) EditRoomMineNickName(request EditRoomMineNickNameRequest) error {
_, err := w.internalCall(0, -1, MtModRoomMemberNameMsg, request, nil)
return err
}
type RoomShowNickNameRequest struct {
RoomWxid string `json:"room_wxid"`
Status int `json:"status"` // 1显示 0隐藏
}
// RoomShowNickName 群聊是否显示昵称
func (w *WxApi) RoomShowNickName(request RoomShowNickNameRequest) error {
_, err := w.internalCall(0, -1, MtModRoomShowNameMsg, request, nil)
return err
}
type SaveRoomSaveToContactRequest struct {
RoomWxid string `json:"room_wxid"`
Status int `json:"status"` // 1保存 2移出
}
// SaveRoomSaveToContact 保存到/移出通讯录
func (w *WxApi) SaveRoomSaveToContact(request SaveRoomSaveToContactRequest) error {
_, err := w.internalCall(0, -1, MtSaveRoomToContactMsg, request, nil)
return err
}
type DelChatRoomRequest struct {
RoomWxid string `json:"room_wxid"`
}
// DelChatRoom 退出并删除群聊
func (w *WxApi) DelChatRoom(request DelChatRoomRequest) error {
_, err := w.internalCall(0, -1, MtQuitDelRoomMsg, request, nil)
return err
}
type AutoAcceptRoomRequest struct {
Auto int `json:"auto"` // 0不自动 1自动
}
// AutoAcceptRoom 自动接收群邀请
func (w *WxApi) AutoAcceptRoom(request AutoAcceptRoomRequest) error {
_, err := w.internalCall(0, -1, MtAutoAcceptRoomMsg, request, nil)
return err
}