-
Notifications
You must be signed in to change notification settings - Fork 0
/
group.go
371 lines (335 loc) · 12.9 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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
/*
*
* group.go
* callback
*
* Created by lintao on 2020/6/1 5:17 下午
* Copyright © 2020-2020 LINTAO. All rights reserved.
*
*/
package tim
import (
"fmt"
"github.com/labstack/echo/v4"
)
func BeforeCreateGroup(req Req, c echo.Context) error {
fmt.Println(req.CallbackCommand)
return nil
}
func AfterCreateGroup(req Req, c echo.Context) error {
fmt.Println(req.CallbackCommand)
return nil
}
func BeforeApplyJoinGroup(req Req, c echo.Context) error {
fmt.Println(req.CallbackCommand)
return nil
}
func BeforeInviteJoinGroup(req Req, c echo.Context) error {
fmt.Println(req.CallbackCommand)
return nil
}
func AfterNewMemberJoin(req Req, c echo.Context) error {
fmt.Println(req.CallbackCommand)
return nil
}
func AfterMemberExit(req Req, c echo.Context) error {
fmt.Println(req.CallbackCommand)
return nil
}
func GafterSendMsg(req Req, c echo.Context) error {
fmt.Println(req.CallbackCommand)
return nil
}
func AfterGroupFull(req Req, c echo.Context) error {
fmt.Println(req.CallbackCommand)
return nil
}
func AfterGroupDestroyed(req Req, c echo.Context) error {
fmt.Println(req.CallbackCommand)
return nil
}
func AfterGroupInfoChanged(req Req, c echo.Context) error {
fmt.Println(req.CallbackCommand)
return nil
}
//CallbackCommand String 回调命令
//GroupId String 操作的群 ID
//Operator_Account String 发起创建群组请求的操作者 UserID
//Owner_Account String 请求创建的群的群主 UserID
//Type String 请求创建的 群组形态介绍,例如 Private,Public 和 ChatRoom
//Name String 请求创建的群组的名称
//MemberList Array 请求创建的群组的初始化成员列表
//UserDefinedDataList Array 用户建群时的自定义字段,这个字段默认是没有的,需要开通,详见 自定义字段
type CallbackGroup struct {
CallbackCommand string `json:"CallbackCommand"`
GroupID string `json:"GroupId"`
FromAccount string `json:"From_Account"`
OperatorAccount string `json:"Operator_Account,omitempty"`
OwnerAccount string `json:"Owner_Account,omitempty"`
Type string `json:"Type,omitempty"`
Name string `json:"Name,omitempty"`
MemberList []MemberListItem `json:"MemberList,omitempty"`
Introduction string `json:"Introduction,omitempty"`
Notification string `json:"Notification,omitempty"`
FaceURL string `json:"FaceUrl,omitempty"`
MsgBody []MsgBody `json:"MsgBody,omitempty"`
Random int `json:"Random,omitempty"`
GroupBeforeCreateCallback
GroupAfterCreateCallback
BeforeApplyJoinGroupCallback
BeforeInviteJoinGroupCallback
AfterNewMemberJoinCallback
AfterMemberExitCallback
//BeforeSendMsgCallback
AfterSendMsgCallback
}
type AfterSendMsgCallback struct {
// CallbackCommand string `json:"CallbackCommand"`
// GroupID string `json:"GroupId"`
// Type string `json:"Type"`
// FromAccount string `json:"From_Account"`
// OperatorAccount string `json:"Operator_Account"`
// Random int `json:"Random,omitempty"`
MsgSeq int `json:"MsgSeq,omitempty"`
MsgTime int `json:"MsgTime,omitempty"`
// MsgBody []MsgBody `json:"MsgBody"`
}
type BeforeSendMsgCallback struct {
// CallbackCommand string `json:"CallbackCommand"`
// GroupID string `json:"GroupId"`
// Type string `json:"Type"`
// FromAccount string `json:"From_Account"`
// OperatorAccount string `json:"Operator_Account"`
// Random int `json:"Random,omitempty"`
// MsgBody []MsgBody `json:"MsgBody,omitempty"`
}
type AfterMemberExitCallback struct {
// CallbackCommand string `json:"CallbackCommand"`
// GroupID string `json:"GroupId"`
// Type string `json:"Type"`
ExitType string `json:"ExitType,omitempty"`
// OperatorAccount string `json:"Operator_Account"`
ExitMemberList []MemberListItem `json:"ExitMemberList,omitempty"`
}
type AfterNewMemberJoinCallback struct {
// CallbackCommand string `json:"CallbackCommand"`
// GroupID string `json:"GroupId"`
// Type string `json:"Type"`
JoinType string `json:"JoinType,omitempty"`
// OperatorAccount string `json:"Operator_Account"`
NewMemberList []MemberListItem `json:"NewMemberList,omitempty"`
}
type BeforeInviteJoinGroupCallback struct {
// CallbackCommand string `json:"CallbackCommand"`
// GroupID string `json:"GroupId"`
// Type string `json:"Type"`
// OperatorAccount string `json:"Operator_Account"`
DestinationMembers []MemberListItem `json:"DestinationMembers,omitempty"`
}
type GroupAfterCreateCallback struct {
// CallbackCommand string `json:"CallbackCommand"`
// GroupID string `json:"GroupId"`
// OperatorAccount string `json:"Operator_Account"`
// OwnerAccount string `json:"Owner_Account"`
// Type string `json:"Type"`
// Name string `json:"Name"`
// MemberList []MemberListItem `json:"MemberList,omitempty"`
UserDefinedDataList []UserDefinedDataList `json:"UserDefinedDataList,omitempty"`
}
type UserDefinedDataList struct {
Key string `json:"Key"`
Value string `json:"Value"`
}
type GroupBeforeCreateCallback struct {
// CallbackCommand string `json:"CallbackCommand"`
// OperatorAccount string `json:"Operator_Account"`
// OwnerAccount string `json:"Owner_Account"`
// Type string `json:"Type"`
// Name string `json:"Name"`
CreatedGroupNum int `json:"CreatedGroupNum,omitempty"`
// MemberList []MemberListItem `json:"MemberList,omitempty"`
}
type BeforeApplyJoinGroupCallback struct {
// CallbackCommand string `json:"CallbackCommand"`
// GroupID string `json:"GroupId"`
// Type string `json:"Type"`
RequestorAccount string `json:"Requestor_Account,omitempty"`
}
type MemberListItem struct {
MemberAccount string `json:"Member_Account"`
}
type CallGroup func(req Req, info CallbackGroup) error
//创建群组之前回调
//功能说明
//App 后台可以通过该回调实时监控用户创建群组的请求,包括后台可以拒绝用户创建群组的请求。
//可能触发该回调的场景
//App 用户通过客户端创建群组
//App 管理员通过 REST API 创建群组
func (s IMServer) CallbackBeforeCreateGroup(commandFunc CallGroup) {
AddCommandFuc(GroupBeforeCreateGroup, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}
//创建群组之后回调
//功能说明
//App 后台可以通过该回调实时监控用户创建群组的信息,包括: 通知 App 后台有群组创建成功,App 后台可以据此进行数据同步等操作。
//可能触发该回调的场景
//App 用户通过客户端创建群组成功
//App 管理员通过 REST API 创建群组成功
func (s IMServer) CallbackAfterCreateGroup(commandFunc CallGroup) {
AddCommandFuc(GroupAfterCreateGroup, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}
//申请入群之前回调
//功能说明
//App 后台可以通过该回调实时监控用户申请加群的请求,包括:App 后台可以拦截用户申请加群的操作。
//可能触发该回调的场景
//App 用户通过客户端发起加群申请
func (s IMServer) CallbackBeforeApplyJoinGroup(commandFunc CallGroup) {
AddCommandFuc(GroupBeforeApplyJoinGroup, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}
//拉人入群之前回调
//功能说明
//App 后台可以通过该回调实时监控群成员拉其他用户入群的请求,包括:App 后台可以拦截群成员直接将其他用户拉入群的请求
//可能触发该回调的场景
//App 用户通过客户端发起将其他用户拉入群的请求。
//App 管理员通过 REST API 添加用户到群组。
func (s IMServer) CallbackBeforeInviteJoinGroup(commandFunc CallGroup) {
AddCommandFuc(GroupBeforeInviteJoinGroup, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}
//新成员入群之后回调
//功能说明
//App 后台可以通过该回调实时监控群成员加入的消息,包括:通知 App 后台有成员入群,App 可以据此进行必要的数据同步。
//可能触发该回调的场景
//App 用户通过客户端主动申请加群并得到通过。
//App 用户通过客户端拉其他人入群成功。
//App 管理员通过 REST API 添加用户到群组。
func (s IMServer) CallbackAfterNewMemberJoin(commandFunc CallGroup) {
AddCommandFuc(GroupAfterNewMemberJoin, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}
//群成员离开之后回调
//功能说明
//App 后台可以通过该回调实时监控用户的退群动态,包括:对用户退群进行实时记录(例如记录日志,或者同步到其他系统)。
//可能触发该回调的场景
//App 用户通过客户端退群。
//App 用户通过客户端踢人。
//App 管理员通过 REST API 删除群成员
func (s IMServer) CallbackAfterMemberExit(commandFunc CallGroup) {
AddCommandFuc(GroupAfterMemberExit, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}
//群内发言之前回调
//功能说明
//App 后台可以通过该回调实时监控用户的群发消息,包括:
//对群消息进行实时记录(例如记录日志,或者同步到其他系统)。
//拦截用户在群内发言的请求。
//修改用户发言内容(例如敏感词过滤,或者增加一些 App 自定义信息)
//可能触发该回调的场景
//App 用户通过客户端发送群消息。
//App 管理员通过 REST API 发送群组消息。
func (s IMServer) CallbackGroupBeforeSendMsg(commandFunc CallGroup) {
AddCommandFuc(GroupBeforeSendMsg, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}
//群内发言之后回调
//功能说明
//App 后台可以通过该回调实时监控用户的群发消息,包括:通知 App 后台有群组消息发送成功,App 可以据此进行必要的数据同步。
//可能触发该回调的场景
//App 用户通过客户端发送群消息。
//App 管理员通过 REST API 发送群组消息。
func (s IMServer) CallbackGroupAfterSendMsg(commandFunc CallGroup) {
AddCommandFuc(GroupAfterSendMsg, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}
//群组满员之后回调
//功能说明
//App 后台可以通过该回调实时监控群组满员的动态,包括:删除一部分不活跃的群成员,以确保用户能够加入该群。
//可能触发该回调的场景
//App 用户通过客户端申请加群。
//App 用户通过客户端邀请加群。
//App 管理员通过 REST API 增加群组成员。
func (s IMServer) CallbackGroupAfterGroupFull(commandFunc CallGroup) {
AddCommandFuc(GroupAfterGroupFull, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}
//群组解散之后回调
//功能说明
//App 后台可以通过该回调实时监控群组的解散动态,包括:对群组的解散实时记录(例如记录日志,或者同步到其他系统)。
//可能触发该回调的场景
//App 用户通过客户端解散群组。
//App 管理员通过 REST API 解散群组。
func (s IMServer) CallbackAfterGroupDestroyed(commandFunc CallGroup) {
AddCommandFuc(GroupAfterGroupDestroyed, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}
//群组资料修改之后回调
//功能说明
//App 后台可以通过该回调实时监控群组资料(群名称、群简介、群公告、群头像及群维度自定义字段)的变更,包括对修改群组资料的实时记录(例如记录日志,或者同步到其他系统)。
//可能触发该回调的场景
//哪些内容会触发回调
//群组资料包括 群基础资料 和 群组维度自定义字段。
//目前,群基础资料中的群组名称、群组简介、群组公告和群组头像 URL 被修改后,可能触发该回调。其他群基础资料被修改后暂不会触发。
//哪些方式会触发回调
//App 用户通过客户端修改群组资料。
//App 管理员通过 REST API 修改群组资料
func (s IMServer) CallbackAfterGroupInfoChanged(commandFunc CallGroup) {
AddCommandFuc(GroupAfterGroupInfoChanged, func(req Req, c echo.Context) error {
var info CallbackGroup
if err := c.Bind(&info); err != nil {
return err
}
return commandFunc(req, info)
})
}