change some fields to private

This commit is contained in:
eatmoreapple 2022-12-30 12:59:56 +08:00
parent 5f14a13c62
commit 326f200976
5 changed files with 99 additions and 84 deletions

4
bot.go
View File

@ -223,9 +223,9 @@ func (b *Bot) WebInit() error {
return err
}
// 设置当前的用户
b.self = &Self{Bot: b, User: &resp.User}
b.self = &Self{bot: b, User: &resp.User}
b.self.formatEmoji()
b.self.Self = b.self
b.self.self = b.self
b.Storage.Response = resp
// 通知手机客户端已经登录

View File

@ -278,7 +278,7 @@ func (c *Client) WebWxGetHeadImg(user *User) (*http.Response, error) {
} else {
params := url.Values{}
params.Add("username", user.UserName)
params.Add("skey", user.Self.Bot.Storage.Request.Skey)
params.Add("skey", user.self.bot.Storage.Request.Skey)
params.Add("type", "big")
params.Add("chatroomid", user.EncryChatRoomId)
params.Add("seq", "0")

View File

@ -71,7 +71,7 @@ func (m *Message) Sender() (*User, error) {
user, exist := members.GetByUserName(m.FromUserName)
if !exist {
// 找不到, 从服务器获取
user = &User{Self: m.bot.self, UserName: m.FromUserName}
user = &User{self: m.bot.self, UserName: m.FromUserName}
err = user.Detail()
}
if m.IsSendByGroup() && len(user.MemberList) == 0 {
@ -629,13 +629,13 @@ type RevokeMsg struct {
// SentMessage 已发送的信息
type SentMessage struct {
*SendMessage
Self *Self
self *Self
MsgId string
}
// Revoke 撤回该消息
func (s *SentMessage) Revoke() error {
return s.Self.RevokeMessage(s)
return s.self.RevokeMessage(s)
}
// CanRevoke 是否可以撤回该消息
@ -657,7 +657,7 @@ func (s *SentMessage) ForwardToFriends(friends ...*Friend) error {
// ForwardToFriendsWithDelay 转发该消息给好友,延迟指定时间
func (s *SentMessage) ForwardToFriendsWithDelay(delay time.Duration, friends ...*Friend) error {
return s.Self.ForwardMessageToFriends(s, delay, friends...)
return s.self.ForwardMessageToFriends(s, delay, friends...)
}
// ForwardToGroups 转发该消息给群组
@ -669,7 +669,7 @@ func (s *SentMessage) ForwardToGroups(groups ...*Group) error {
// ForwardToGroupsWithDelay 转发该消息给群组, 延迟指定时间
func (s *SentMessage) ForwardToGroupsWithDelay(delay time.Duration, groups ...*Group) error {
return s.Self.ForwardMessageToGroups(s, delay, groups...)
return s.self.ForwardMessageToGroups(s, delay, groups...)
}
type appmsg struct {

View File

@ -15,32 +15,32 @@ func (f Friend) String() string {
// SetRemarkName 重命名当前好友
func (f *Friend) SetRemarkName(name string) error {
return f.Self.SetRemarkNameToFriend(f, name)
return f.self.SetRemarkNameToFriend(f, name)
}
// SendText 发送文本消息
func (f *Friend) SendText(content string) (*SentMessage, error) {
return f.Self.SendTextToFriend(f, content)
return f.self.SendTextToFriend(f, content)
}
// SendImage 发送图片消息
func (f *Friend) SendImage(file *os.File) (*SentMessage, error) {
return f.Self.SendImageToFriend(f, file)
return f.self.SendImageToFriend(f, file)
}
// SendVideo 发送视频消息
func (f *Friend) SendVideo(file *os.File) (*SentMessage, error) {
return f.Self.SendVideoToFriend(f, file)
return f.self.SendVideoToFriend(f, file)
}
// SendFile 发送文件消息
func (f *Friend) SendFile(file *os.File) (*SentMessage, error) {
return f.Self.SendFileToFriend(f, file)
return f.self.SendFileToFriend(f, file)
}
// AddIntoGroup 拉该好友入群
func (f *Friend) AddIntoGroup(groups ...*Group) error {
return f.Self.AddFriendIntoManyGroups(f, groups...)
return f.self.AddFriendIntoManyGroups(f, groups...)
}
type Friends []*Friend
@ -112,7 +112,7 @@ func (f Friends) SendText(text string, delays ...time.Duration) error {
if len(delays) > 0 {
delay = delays[0]
}
self := f.First().Self
self := f.First().self
return self.SendTextToFriends(text, delay, f...)
}
@ -125,7 +125,7 @@ func (f Friends) SendImage(file *os.File, delays ...time.Duration) error {
if len(delays) > 0 {
delay = delays[0]
}
self := f.First().Self
self := f.First().self
return self.SendImageToFriends(file, delay, f...)
}
@ -138,7 +138,7 @@ func (f Friends) SendFile(file *os.File, delay ...time.Duration) error {
if len(delay) > 0 {
d = delay[0]
}
self := f.First().Self
self := f.First().self
return self.SendFileToFriends(file, d, f...)
}
@ -151,22 +151,22 @@ func (g Group) String() string {
// SendText 发行文本消息给当前的群组
func (g *Group) SendText(content string) (*SentMessage, error) {
return g.Self.SendTextToGroup(g, content)
return g.self.SendTextToGroup(g, content)
}
// SendImage 发行图片消息给当前的群组
func (g *Group) SendImage(file *os.File) (*SentMessage, error) {
return g.Self.SendImageToGroup(g, file)
return g.self.SendImageToGroup(g, file)
}
// SendVideo 发行视频消息给当前的群组
func (g *Group) SendVideo(file *os.File) (*SentMessage, error) {
return g.Self.SendVideoToGroup(g, file)
return g.self.SendVideoToGroup(g, file)
}
// SendFile 发送文件给当前的群组
func (g *Group) SendFile(file *os.File) (*SentMessage, error) {
return g.Self.SendFileToGroup(g, file)
return g.self.SendFileToGroup(g, file)
}
// Members 获取所有的群成员
@ -174,25 +174,25 @@ func (g *Group) Members() (Members, error) {
if err := g.Detail(); err != nil {
return nil, err
}
g.MemberList.init(g.Self)
g.MemberList.init(g.self)
return g.MemberList, nil
}
// AddFriendsIn 拉好友入群
func (g *Group) AddFriendsIn(friends ...*Friend) error {
return g.Self.AddFriendsIntoGroup(g, friends...)
return g.self.AddFriendsIntoGroup(g, friends...)
}
// RemoveMembers 从群聊中移除用户
// Deprecated
// 无论是网页版,还是程序上都不起作用
func (g *Group) RemoveMembers(members Members) error {
return g.Self.RemoveMemberFromGroup(g, members)
return g.self.RemoveMemberFromGroup(g, members)
}
// Rename 群组重命名
func (g *Group) Rename(name string) error {
return g.Self.RenameGroup(g, name)
return g.self.RenameGroup(g, name)
}
// SearchMemberByUsername 根据用户名查找群成员
@ -249,7 +249,7 @@ func (g Groups) SendText(text string, delay ...time.Duration) error {
if len(delay) > 0 {
d = delay[0]
}
self := g.First().Self
self := g.First().self
return self.SendTextToGroups(text, d, g...)
}
@ -262,7 +262,7 @@ func (g Groups) SendImage(file *os.File, delay ...time.Duration) error {
if len(delay) > 0 {
d = delay[0]
}
self := g.First().Self
self := g.First().self
return self.SendImageToGroups(file, d, g...)
}
@ -275,7 +275,7 @@ func (g Groups) SendFile(file *os.File, delay ...time.Duration) error {
if len(delay) > 0 {
d = delay[0]
}
self := g.First().Self
self := g.First().self
return self.SendFileToGroups(file, d, g...)
}
@ -381,17 +381,17 @@ func (m Mps) SearchByNickName(limit int, nickName string) (results Mps) {
// SendText 发送文本消息给公众号
func (m *Mp) SendText(content string) (*SentMessage, error) {
return m.Self.SendTextToMp(m, content)
return m.self.SendTextToMp(m, content)
}
// SendImage 发送图片消息给公众号
func (m *Mp) SendImage(file *os.File) (*SentMessage, error) {
return m.Self.SendImageToMp(m, file)
return m.self.SendImageToMp(m, file)
}
// SendFile 发送文件消息给公众号
func (m *Mp) SendFile(file *os.File) (*SentMessage, error) {
return m.Self.SendFileToMp(m, file)
return m.self.SendFileToMp(m, file)
}
// GetByUsername 根据username查询一个Friend

121
user.go
View File

@ -49,7 +49,7 @@ type User struct {
MemberList Members
Self *Self `json:"-"`
self *Self
}
// implement fmt.Stringer
@ -60,7 +60,7 @@ func (u *User) String() string {
// GetAvatarResponse 获取用户头像
func (u *User) GetAvatarResponse() (resp *http.Response, err error) {
for i := 0; i < 3; i++ {
resp, err = u.Self.Bot.Caller.Client.WebWxGetHeadImg(u)
resp, err = u.self.bot.Caller.Client.WebWxGetHeadImg(u)
if err != nil {
return nil, err
}
@ -99,19 +99,19 @@ func (u *User) SaveAvatarWithWriter(writer io.Writer) error {
// Detail 获取用户的详情
func (u *User) Detail() error {
if u.UserName == u.Self.UserName {
if u.UserName == u.self.UserName {
return nil
}
members := Members{u}
request := u.Self.Bot.Storage.Request
newMembers, err := u.Self.Bot.Caller.WebWxBatchGetContact(members, request)
request := u.self.bot.Storage.Request
newMembers, err := u.self.bot.Caller.WebWxBatchGetContact(members, request)
if err != nil {
return err
}
newMembers.init(u.Self)
newMembers.init(u.self)
user := newMembers.First()
*u = *user
u.MemberList.init(u.Self)
u.MemberList.init(u.self)
return nil
}
@ -132,14 +132,14 @@ func (u *User) IsMP() bool {
// Pin 将联系人置顶
func (u *User) Pin() error {
req := u.Self.Bot.Storage.Request
return u.Self.Bot.Caller.WebWxRelationPin(req, u, 1)
req := u.self.bot.Storage.Request
return u.self.bot.Caller.WebWxRelationPin(req, u, 1)
}
// UnPin 将联系人取消置顶
func (u *User) UnPin() error {
req := u.Self.Bot.Storage.Request
return u.Self.Bot.Caller.WebWxRelationPin(req, u, 0)
req := u.self.bot.Storage.Request
return u.self.bot.Caller.WebWxRelationPin(req, u, 0)
}
// IsPin 判断当前联系人(好友、群组、公众号)是否为置顶状态
@ -170,6 +170,16 @@ func (u *User) ID() string {
return ""
}
// Self 返回当前用户
func (u *User) Self() *Self {
return u.self
}
// IsSelf 判断是否为当前用户
func (u *User) IsSelf() bool {
return u.UserName == u.Self().UserName
}
// 格式化emoji表情
func (u *User) formatEmoji() {
u.NickName = FormatEmoji(u.NickName)
@ -180,7 +190,7 @@ func (u *User) formatEmoji() {
// Self 自己,当前登录用户对象
type Self struct {
*User
Bot *Bot
bot *Bot
fileHelper *Friend
members Members
friends Friends
@ -202,8 +212,8 @@ func (s *Self) Members(update ...bool) (Members, error) {
// 更新联系人处理
func (s *Self) updateMembers() error {
info := s.Bot.Storage.LoginInfo
members, err := s.Bot.Caller.WebWxGetContact(info)
info := s.bot.Storage.LoginInfo
members, err := s.bot.Caller.WebWxGetContact(info)
if err != nil {
return err
}
@ -269,30 +279,30 @@ func (s *Self) sendTextToUser(user *User, text string) (*SentMessage, error) {
msg := NewTextSendMessage(text, s.UserName, user.UserName)
msg.FromUserName = s.UserName
msg.ToUserName = user.UserName
info := s.Bot.Storage.LoginInfo
request := s.Bot.Storage.Request
sentMessage, err := s.Bot.Caller.WebWxSendMsg(msg, info, request)
info := s.bot.Storage.LoginInfo
request := s.bot.Storage.Request
sentMessage, err := s.bot.Caller.WebWxSendMsg(msg, info, request)
return s.sendMessageWrapper(sentMessage, err)
}
func (s *Self) sendImageToUser(user *User, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
sentMessage, err := s.Bot.Caller.WebWxSendImageMsg(file, req, info, s.UserName, user.UserName)
req := s.bot.Storage.Request
info := s.bot.Storage.LoginInfo
sentMessage, err := s.bot.Caller.WebWxSendImageMsg(file, req, info, s.UserName, user.UserName)
return s.sendMessageWrapper(sentMessage, err)
}
func (s *Self) sendVideoToUser(user *User, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
sentMessage, err := s.Bot.Caller.WebWxSendVideoMsg(file, req, info, s.UserName, user.UserName)
req := s.bot.Storage.Request
info := s.bot.Storage.LoginInfo
sentMessage, err := s.bot.Caller.WebWxSendVideoMsg(file, req, info, s.UserName, user.UserName)
return s.sendMessageWrapper(sentMessage, err)
}
func (s *Self) sendFileToUser(user *User, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
sentMessage, err := s.Bot.Caller.WebWxSendFile(file, req, info, s.UserName, user.UserName)
req := s.bot.Storage.Request
info := s.bot.Storage.LoginInfo
sentMessage, err := s.bot.Caller.WebWxSendFile(file, req, info, s.UserName, user.UserName)
return s.sendMessageWrapper(sentMessage, err)
}
@ -320,8 +330,8 @@ func (s *Self) SendFileToFriend(friend *Friend, file *os.File) (*SentMessage, er
//
// self.SetRemarkNameToFriend(friend, "remark") // or friend.SetRemarkName("remark")
func (s *Self) SetRemarkNameToFriend(friend *Friend, remarkName string) error {
req := s.Bot.Storage.Request
return s.Bot.Caller.WebWxOplog(req, remarkName, friend.UserName)
req := s.bot.Storage.Request
return s.bot.Caller.WebWxOplog(req, remarkName, friend.UserName)
}
// CreateGroup 创建群聊
@ -331,13 +341,13 @@ 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)
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
group.self = s
err = group.Detail()
return group, err
}
@ -361,9 +371,9 @@ func (s *Self) AddFriendsIntoGroup(group *Group, friends ...*Friend) error {
}
}
}
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.AddFriendIntoChatRoom(req, info, group, friends...)
req := s.bot.Storage.Request
info := s.bot.Storage.LoginInfo
return s.bot.Caller.AddFriendIntoChatRoom(req, info, group, friends...)
}
// RemoveMemberFromGroup 从群聊中移除用户
@ -392,9 +402,9 @@ func (s *Self) RemoveMemberFromGroup(group *Group, members Members) error {
if count != len(members) {
return errors.New("invalid members")
}
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.RemoveFriendFromChatRoom(req, info, group, members...)
req := s.bot.Storage.Request
info := s.bot.Storage.LoginInfo
return s.bot.Caller.RemoveFriendFromChatRoom(req, info, group, members...)
}
// AddFriendIntoManyGroups 拉好友进多个群聊
@ -410,9 +420,9 @@ func (s *Self) AddFriendIntoManyGroups(friend *Friend, groups ...*Group) error {
// RenameGroup 群组重命名
func (s *Self) RenameGroup(group *Group, newName string) error {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.WebWxRenameChatRoom(req, info, newName, group)
req := s.bot.Storage.Request
info := s.bot.Storage.LoginInfo
return s.bot.Caller.WebWxRenameChatRoom(req, info, newName, group)
}
// SendTextToGroup 发送文本消息给群组
@ -442,19 +452,19 @@ func (s *Self) SendFileToGroup(group *Group, file *os.File) (*SentMessage, error
// self.RevokeMessage(sentMessage) // or sentMessage.Revoke()
// }
func (s *Self) RevokeMessage(msg *SentMessage) error {
return s.Bot.Caller.WebWxRevokeMsg(msg, s.Bot.Storage.Request)
return s.bot.Caller.WebWxRevokeMsg(msg, s.bot.Storage.Request)
}
// 转发消息接口
func (s *Self) forwardMessage(msg *SentMessage, delay time.Duration, users ...*User) error {
info := s.Bot.Storage.LoginInfo
req := s.Bot.Storage.Request
info := s.bot.Storage.LoginInfo
req := s.bot.Storage.Request
switch msg.Type {
case MsgTypeText:
for _, user := range users {
msg.FromUserName = s.UserName
msg.ToUserName = user.UserName
if _, err := s.Self.Bot.Caller.WebWxSendMsg(msg.SendMessage, info, req); err != nil {
if _, err := s.self.bot.Caller.WebWxSendMsg(msg.SendMessage, info, req); err != nil {
return err
}
time.Sleep(delay)
@ -463,7 +473,7 @@ func (s *Self) forwardMessage(msg *SentMessage, delay time.Duration, users ...*U
for _, user := range users {
msg.FromUserName = s.UserName
msg.ToUserName = user.UserName
if _, err := s.Self.Bot.Caller.Client.WebWxSendMsgImg(msg.SendMessage, req, info); err != nil {
if _, err := s.self.bot.Caller.Client.WebWxSendMsgImg(msg.SendMessage, req, info); err != nil {
return err
}
time.Sleep(delay)
@ -472,7 +482,7 @@ func (s *Self) forwardMessage(msg *SentMessage, delay time.Duration, users ...*U
for _, user := range users {
msg.FromUserName = s.UserName
msg.ToUserName = user.UserName
if _, err := s.Self.Bot.Caller.Client.WebWxSendAppMsg(msg.SendMessage, req); err != nil {
if _, err := s.self.bot.Caller.Client.WebWxSendAppMsg(msg.SendMessage, req); err != nil {
return err
}
time.Sleep(delay)
@ -721,7 +731,7 @@ func (m Members) detail(self *Self) error {
times = count / 50
}
var newMembers Members
request := self.Bot.Storage.Request
request := self.bot.Storage.Request
var pMembers Members
// 分情况依次更新
for i := 1; i <= times; i++ {
@ -730,7 +740,7 @@ func (m Members) detail(self *Self) error {
} else {
pMembers = members[(i-1)*50 : i*50]
}
nMembers, err := self.Bot.Caller.WebWxBatchGetContact(pMembers, request)
nMembers, err := self.bot.Caller.WebWxBatchGetContact(pMembers, request)
if err != nil {
return err
}
@ -742,7 +752,7 @@ func (m Members) detail(self *Self) error {
// 将全部剩余的更新完毕
left := count - total
pMembers = members[total : total+left]
nMembers, err := self.Bot.Caller.WebWxBatchGetContact(pMembers, request)
nMembers, err := self.bot.Caller.WebWxBatchGetContact(pMembers, request)
if err != nil {
return err
}
@ -757,13 +767,13 @@ func (m Members) detail(self *Self) error {
func (m Members) init(self *Self) {
for _, member := range m {
member.Self = self
member.self = self
member.formatEmoji()
}
}
func newFriend(username string, self *Self) *Friend {
return &Friend{&User{UserName: username, Self: self}}
return &Friend{&User{UserName: username, self: self}}
}
// NewFriendHelper 创建一个文件传输助手
@ -796,6 +806,11 @@ func (s *Self) sendMessageWrapper(message *SentMessage, err error) (*SentMessage
if err != nil {
return nil, err
}
message.Self = s
message.self = s
return message, nil
}
// Bot 获取当前用户的机器人
func (s *Self) Bot() *Bot {
return s.bot
}