Skip to content

Commit 6177f16

Browse files
author
andyzheng
committed
websocket/client: 修改论坛审批事件
TAPD: --story=869831625
1 parent 6919b39 commit 6177f16

File tree

7 files changed

+227
-0
lines changed

7 files changed

+227
-0
lines changed

dto/forum.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package dto
2+
3+
// Thread 主题事件主体内容
4+
type Thread struct {
5+
GuildID string `json:"guild_id"`
6+
ChannelID string `json:"channel_id"`
7+
AuthorID string `json:"author_id"`
8+
ThreadInfo ThreadInfo `json:"thread_info"`
9+
}
10+
11+
// ThreadInfo 主题信息
12+
type ThreadInfo struct {
13+
ThreadID string `json:"thread_id"`
14+
Title string `json:"title"`
15+
Content string `json:"content"`
16+
DateTime string `json:"date_time"`
17+
}
18+
19+
// Post 帖子事件主体内容
20+
type Post struct {
21+
GuildID string `json:"guild_id"`
22+
ChannelID string `json:"channel_id"`
23+
AuthorID string `json:"author_id"`
24+
PostInfo PostInfo `json:"post_info"`
25+
}
26+
27+
// PostInfo 帖子内容
28+
type PostInfo struct {
29+
ThreadID string `json:"thread_id"`
30+
PostID string `json:"post_id"`
31+
Content string `json:"content"`
32+
DateTime string `json:"date_time"`
33+
}
34+
35+
// Reply 回复事件主体内容
36+
type Reply struct {
37+
GuildID string `json:"guild_id"`
38+
ChannelID string `json:"channel_id"`
39+
AuthorID string `json:"author_id"`
40+
ReplyInfo ReplyInfo `json:"reply_info"`
41+
}
42+
43+
// ReplyInfo 回复内容
44+
type ReplyInfo struct {
45+
ThreadID string `json:"thread_id"`
46+
PostID string `json:"post_id"`
47+
ReplyID string `json:"reply_id"`
48+
Content string `json:"content"`
49+
DateTime string `json:"date_time"`
50+
}
51+
52+
// ForumAuditResult 帖子审核事件主体内容
53+
type ForumAuditResult struct {
54+
TaskID string `json:"task_id"`
55+
GuildID string `json:"guild_id"`
56+
ChannelID string `json:"channel_id"`
57+
AuthorID string `json:"author_id"`
58+
ThreadID string `json:"thread_id"`
59+
PostID string `json:"post_id"`
60+
ReplyID string `json:"reply_id"`
61+
PublishType uint32 `json:"type"`
62+
Result uint32 `json:"result"`
63+
ErrMsg string `json:"err_msg"`
64+
DateTime string `json:"date_time"`
65+
}

dto/websocket_event.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ const (
2626
EventAudioOffMic EventType = "AUDIO_OFF_MIC"
2727
EventMessageAuditPass EventType = "MESSAGE_AUDIT_PASS"
2828
EventMessageAuditReject EventType = "MESSAGE_AUDIT_REJECT"
29+
EventForumThreadCreate EventType = "FORUM_THREAD_CREATE"
30+
EventForumThreadUpdate EventType = "FORUM_THREAD_UPDATE"
31+
EventForumThreadDelete EventType = "FORUM_THREAD_DELETE"
32+
EventForumPostCreate EventType = "FORUM_POST_CREATE"
33+
EventForumPostDelete EventType = "FORUM_POST_DELETE"
34+
EventForumReplyCreate EventType = "FORUM_REPLY_CREATE"
35+
EventForumReplyDelete EventType = "FORUM_REPLY_DELETE"
36+
37+
EventForumAuditResult EventType = "FORUM_PUBLISH_AUDIT_RESULT"
2938
)
3039

3140
// intentEventMap 不同 intent 对应的事件定义
@@ -41,6 +50,10 @@ var intentEventMap = map[Intent][]EventType{
4150
IntentDirectMessages: {EventDirectMessageCreate},
4251
IntentAudio: {EventAudioStart, EventAudioFinish, EventAudioOnMic, EventAudioOffMic},
4352
IntentAudit: {EventMessageAuditPass, EventMessageAuditReject},
53+
IntentForum: {
54+
EventForumThreadCreate, EventForumThreadUpdate, EventForumThreadDelete, EventForumPostCreate,
55+
EventForumPostDelete, EventForumReplyCreate, EventForumReplyDelete, EventForumAuditResult,
56+
},
4457
}
4558

4659
var eventIntentMap = transposeIntentEventMap(intentEventMap)

dto/websocket_intent.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,17 @@ const (
4444
IntentDirectMessageTyping
4545

4646
IntentAudit Intent = 1 << 27 // 审核事件
47+
// IntentForum 论坛事件
48+
// - THREAD_CREATE // 当用户创建主题时
49+
// - THREAD_UPDATE // 当用户更新主题时
50+
// - THREAD_DELETE // 当用户删除主题时
51+
// - POST_CREATE // 当用户创建帖子时
52+
// - POST_DELETE // 当用户删除帖子时
53+
// - REPLY_CREATE // 当用户回复评论时
54+
// - REPLY_DELETE // 当用户回复评论时
55+
// - FORUM_PUBLISH_AUDIT_RESULT // 当用户发表审核通过时
56+
IntentForum Intent = 1 << 28 // 论坛事件
57+
4758
// IntentAudio
4859
// - AUDIO_START // 音频开始播放时
4960
// - AUDIO_FINISH // 音频播放结束时

dto/websocket_payload.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,15 @@ type WSMessageReactionData MessageReaction
8383

8484
// WSMessageAuditData 消息审核事件
8585
type WSMessageAuditData MessageAudit
86+
87+
// WSThreadData 主题事件
88+
type WSThreadData Thread
89+
90+
// WSPostData 帖子事件
91+
type WSPostData Post
92+
93+
// WSReplyData 帖子回复事件
94+
type WSReplyData Reply
95+
96+
// WSForumAuditData 帖子审核事件
97+
type WSForumAuditData ForumAuditResult

examples/apitest/websocket_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,52 @@ func Test_websocket(t *testing.T) {
6060
botgo.NewSessionManager().Start(ws, botToken, &intent)
6161
},
6262
)
63+
t.Run(
64+
"thread event", func(t *testing.T) {
65+
var message websocket.ThreadEventHandler = func(
66+
event *dto.WSPayload, data *dto.WSThreadData,
67+
) error {
68+
log.Println(event, data)
69+
return nil
70+
}
71+
intent := websocket.RegisterHandlers(message)
72+
botgo.NewSessionManager().Start(ws, botToken, &intent)
73+
},
74+
)
75+
t.Run(
76+
"post event", func(t *testing.T) {
77+
var message websocket.PostEventHandler = func(
78+
event *dto.WSPayload, data *dto.WSPostData,
79+
) error {
80+
log.Println(event, data)
81+
return nil
82+
}
83+
intent := websocket.RegisterHandlers(message)
84+
botgo.NewSessionManager().Start(ws, botToken, &intent)
85+
},
86+
)
87+
t.Run(
88+
"Reply event", func(t *testing.T) {
89+
var message websocket.ReplyEventHandler = func(
90+
event *dto.WSPayload, data *dto.WSReplyData,
91+
) error {
92+
log.Println(event, data)
93+
return nil
94+
}
95+
intent := websocket.RegisterHandlers(message)
96+
botgo.NewSessionManager().Start(ws, botToken, &intent)
97+
},
98+
)
99+
t.Run(
100+
"Forum audit event", func(t *testing.T) {
101+
var message websocket.ForumAuditEventHandler = func(
102+
event *dto.WSPayload, data *dto.WSForumAuditData,
103+
) error {
104+
log.Println(event, data)
105+
return nil
106+
}
107+
intent := websocket.RegisterHandlers(message)
108+
botgo.NewSessionManager().Start(ws, botToken, &intent)
109+
},
110+
)
63111
}

websocket/client/event.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,15 @@ var eventParseFuncMap = map[dto.OPCode]map[dto.EventType]eventParseFunc{
3838

3939
dto.EventMessageAuditPass: messageAuditHandler,
4040
dto.EventMessageAuditReject: messageAuditHandler,
41+
42+
dto.EventForumThreadCreate: threadHandler,
43+
dto.EventForumThreadUpdate: threadHandler,
44+
dto.EventForumThreadDelete: threadHandler,
45+
dto.EventForumPostCreate: postHandler,
46+
dto.EventForumPostDelete: postHandler,
47+
dto.EventForumReplyCreate: replyHandler,
48+
dto.EventForumReplyDelete: replyHandler,
49+
dto.EventForumAuditResult: forumAuditHandler,
4150
},
4251
}
4352

@@ -143,6 +152,50 @@ func audioHandler(event *dto.WSPayload, message []byte) error {
143152
return nil
144153
}
145154

155+
func threadHandler(event *dto.WSPayload, message []byte) error {
156+
data := &dto.WSThreadData{}
157+
if err := parseData(message, data); err != nil {
158+
return err
159+
}
160+
if websocket.DefaultHandlers.Thread != nil {
161+
return websocket.DefaultHandlers.Thread(event, data)
162+
}
163+
return nil
164+
}
165+
166+
func postHandler(event *dto.WSPayload, message []byte) error {
167+
data := &dto.WSPostData{}
168+
if err := parseData(message, data); err != nil {
169+
return err
170+
}
171+
if websocket.DefaultHandlers.Post != nil {
172+
return websocket.DefaultHandlers.Post(event, data)
173+
}
174+
return nil
175+
}
176+
177+
func replyHandler(event *dto.WSPayload, message []byte) error {
178+
data := &dto.WSReplyData{}
179+
if err := parseData(message, data); err != nil {
180+
return err
181+
}
182+
if websocket.DefaultHandlers.Reply != nil {
183+
return websocket.DefaultHandlers.Reply(event, data)
184+
}
185+
return nil
186+
}
187+
188+
func forumAuditHandler(event *dto.WSPayload, message []byte) error {
189+
data := &dto.WSForumAuditData{}
190+
if err := parseData(message, data); err != nil {
191+
return err
192+
}
193+
if websocket.DefaultHandlers.ForumAudit != nil {
194+
return websocket.DefaultHandlers.ForumAudit(event, data)
195+
}
196+
return nil
197+
}
198+
146199
func parseData(message []byte, target interface{}) error {
147200
data := gjson.Get(string(message), "d")
148201
return json.Unmarshal([]byte(data.String()), target)

websocket/event_handler.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ var DefaultHandlers struct {
1919
DirectMessage DirectMessageEventHandler
2020
Audio AudioEventHandler
2121
MessageAudit MessageAuditEventHandler
22+
Thread ThreadEventHandler
23+
Post PostEventHandler
24+
Reply ReplyEventHandler
25+
ForumAudit ForumAuditEventHandler
2226
}
2327

2428
// ReadyHandler 可以处理 ws 的 ready 事件
@@ -58,6 +62,18 @@ type AudioEventHandler func(event *dto.WSPayload, data *dto.WSAudioData) error
5862
// MessageAuditEventHandler 消息审核事件 handler
5963
type MessageAuditEventHandler func(event *dto.WSPayload, data *dto.WSMessageAuditData) error
6064

65+
// ThreadEventHandler 论坛主题事件 handler
66+
type ThreadEventHandler func(event *dto.WSPayload, data *dto.WSThreadData) error
67+
68+
// PostEventHandler 论坛回帖事件 handler
69+
type PostEventHandler func(event *dto.WSPayload, data *dto.WSPostData) error
70+
71+
// ReplyEventHandler 论坛帖子回复事件 handler
72+
type ReplyEventHandler func(event *dto.WSPayload, data *dto.WSReplyData) error
73+
74+
// ForumAuditEventHandler 论坛帖子审核事件 handler
75+
type ForumAuditEventHandler func(event *dto.WSPayload, data *dto.WSForumAuditData) error
76+
6177
// RegisterHandlers 注册事件回调,并返回 intent 用于 websocket 的鉴权
6278
func RegisterHandlers(handlers ...interface{}) dto.Intent {
6379
var i dto.Intent
@@ -75,6 +91,15 @@ func RegisterHandlers(handlers ...interface{}) dto.Intent {
7591
dto.EventAudioStart, dto.EventAudioFinish,
7692
dto.EventAudioOnMic, dto.EventAudioOffMic,
7793
)
94+
case ThreadEventHandler:
95+
i = i | dto.EventToIntent(
96+
dto.EventForumThreadCreate, dto.EventForumThreadUpdate, dto.EventForumThreadDelete)
97+
case PostEventHandler:
98+
i = i | dto.EventToIntent(dto.EventForumPostCreate, dto.EventForumPostDelete)
99+
case ReplyEventHandler:
100+
i = i | dto.EventToIntent(dto.EventForumReplyCreate, dto.EventForumReplyDelete)
101+
case ForumAuditEventHandler:
102+
i = i | dto.EventToIntent(dto.EventForumAuditResult)
78103
default:
79104
}
80105
}

0 commit comments

Comments
 (0)