forked from LagrangeDev/LagrangeGo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
group.go
140 lines (124 loc) · 3.05 KB
/
group.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package event
import (
"github.com/2mf8/LagrangeGo/client/packets/pb/message"
"github.com/2mf8/LagrangeGo/utils"
)
type (
GroupEvent struct {
GroupUin uint32
}
GroupMute struct {
GroupEvent
OperatorUid string
TargetUid string // when TargetUid is empty, mute all members
Duration uint32 // Duration == math.MaxUint32 when means mute all
}
GroupRecall struct {
GroupEvent
AuthorUid string
OperatorUid string
Sequence uint64
Time uint32
Random uint32
}
GroupMemberJoinRequest struct {
GroupEvent
TargetUid string
InvitorUid string
Answer string // 问题:(.*)答案:(.*)
}
GroupMemberIncrease struct {
GroupEvent
MemberUid string
InvitorUid string
JoinType uint32
}
GroupMemberDecrease struct {
GroupEvent
MemberUid string
OperatorUid string
ExitType uint32
}
)
type GroupInvite struct {
GroupUin uint32
InvitorUid string
}
func (gmd *GroupMemberDecrease) IsKicked() bool {
return gmd.ExitType == 131 || gmd.ExitType == 3
}
// ParseRequestJoinNotice 主动加群
func ParseRequestJoinNotice(event *message.GroupJoin) *GroupMemberJoinRequest {
return &GroupMemberJoinRequest{
GroupEvent: GroupEvent{
GroupUin: event.GroupUin,
},
TargetUid: event.TargetUid,
Answer: event.RequestField.Unwrap(),
}
}
// ParseRequestInvitationNotice 邀请加群
func ParseRequestInvitationNotice(event *message.GroupInvitation) *GroupMemberJoinRequest {
if event.Cmd == 87 {
inn := event.Info.Inner
return &GroupMemberJoinRequest{
GroupEvent: GroupEvent{
GroupUin: inn.GroupUin,
},
TargetUid: inn.TargetUid,
InvitorUid: inn.InvitorUid,
}
}
return nil
}
// ParseInviteNotice 被邀请加群
func ParseInviteNotice(event *message.GroupInvite) *GroupInvite {
return &GroupInvite{
GroupUin: event.GroupUin,
InvitorUid: event.InvitorUid,
}
}
func ParseMemberIncreaseEvent(event *message.GroupChange) *GroupMemberIncrease {
return &GroupMemberIncrease{
GroupEvent: GroupEvent{
GroupUin: event.GroupUin,
},
MemberUid: event.MemberUid,
InvitorUid: utils.B2S(event.Operator),
JoinType: event.IncreaseType,
}
}
func ParseMemberDecreaseEvent(event *message.GroupChange) *GroupMemberDecrease {
return &GroupMemberDecrease{
GroupEvent: GroupEvent{
GroupUin: event.GroupUin,
},
MemberUid: event.MemberUid,
OperatorUid: utils.B2S(event.Operator),
ExitType: event.DecreaseType,
}
}
func ParseGroupRecallEvent(event *message.NotifyMessageBody) *GroupRecall {
info := event.Recall.RecallMessages[0]
result := GroupRecall{
GroupEvent: GroupEvent{
GroupUin: event.GroupUin,
},
AuthorUid: info.AuthorUid,
OperatorUid: event.Recall.OperatorUid.Unwrap(),
Sequence: info.Sequence,
Time: info.Time,
Random: info.Random,
}
return &result
}
func ParseGroupMuteEvent(event *message.GroupMute) *GroupMute {
return &GroupMute{
GroupEvent: GroupEvent{
GroupUin: event.GroupUin,
},
OperatorUid: event.OperatorUid.Unwrap(),
TargetUid: event.Data.State.TargetUid.Unwrap(),
Duration: event.Data.State.Duration,
}
}