Skip to content

Commit a4621aa

Browse files
committed
feat: 房间开启、关闭全局禁言消息
1 parent 4b54842 commit a4621aa

File tree

6 files changed

+97
-1
lines changed

6 files changed

+97
-1
lines changed

README.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,7 @@ export interface GuardBuyMsg {
530530
| Handler | Description |
531531
| --- | --- |
532532
| onRoomWarn | 房间被超管警告、切断 |
533+
| onRoomSilent | 房间开启、关闭全局禁言 |
533534

534535
<details>
535536
<summary>Type Definitions</summary>
@@ -541,7 +542,7 @@ export interface GuardBuyMsg {
541542
```ts
542543
export type Handler = {
543544
/** 房间被超管警告、切断 */
544-
onRoomWarn: (msg: Message<GiftMsg>) => void
545+
onRoomWarn: (msg: Message<RoomWarnMsg>) => void
545546
}
546547

547548
type msgType = 'WARNING''CUT_OFF'
@@ -553,6 +554,28 @@ export interface RoomWarnMsg {
553554
msg: string
554555
}
555556
```
557+
558+
##### handler.onRoomSilent
559+
560+
房间开启、关闭全局禁言
561+
562+
```ts
563+
export type Handler = {
564+
/** 房间开启、关闭全局禁言 */
565+
onRoomSilent: (msg: Message<RoomSilentMsg>) => void
566+
}
567+
568+
type msgType = 'ROOM_SILENT_ON''ROOM_SILENT_OFF'
569+
570+
export interface RoomSilentMsg {
571+
/** 禁言类型(按用户等级、勋章等级、全员、关闭) */
572+
type: 'level' | 'medal' | 'member' | 'off'
573+
/** 禁言等级 */
574+
level: number
575+
/** 禁言结束时间,秒级时间戳,-1 为无限 */
576+
second: number
577+
}
578+
```
556579
</details>
557580

558581
#### 监听原始消息

mock/ROOM_SILENT_ON/by_medal.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"data": {
3+
"type": "medal",
4+
"level": 4,
5+
"second": 1674050722
6+
},
7+
"cmd": "ROOM_SILENT_ON"
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"data": {
3+
"type": "level",
4+
"level": 5,
5+
"second": -1
6+
},
7+
"cmd": "ROOM_SILENT_ON"
8+
}

src/listener/index.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
LIKE_INFO_V3_UPDATE, type LikedChangeMsgHandler,
99
ONLINE_RANK_COUNT, type RankCountChangeMsgHandler,
1010
ROOM_CHANGE, type RoomInfoChangeHandler,
11+
ROOM_SILENT_ON, ROOM_SILENT_OFF, type RoomSilentMsgHandler,
1112
SEND_GIFT, type GiftHandler,
1213
SUPER_CHAT_MESSAGE, type SuperChatHandler,
1314
WARNING, CUT_OFF, type RoomWarnHandler,
@@ -36,6 +37,7 @@ export type MsgHandler = Partial<
3637
& LikedChangeMsgHandler
3738
& RankCountChangeMsgHandler
3839
& RoomInfoChangeHandler
40+
& RoomSilentMsgHandler
3941
& GiftHandler
4042
& SuperChatHandler
4143
& RoomWarnHandler
@@ -174,6 +176,22 @@ export const listenAll = (instance: KeepLiveTCP | KeepLiveWS, roomId: number, ha
174176
})
175177
}
176178

179+
// ROOM_SILENT_ON, ROOM_SILENT_OFF
180+
if (handler[ROOM_SILENT_ON.handlerName] || handler[ROOM_SILENT_OFF.handlerName] || rawHandlerNames.has(ROOM_SILENT_ON.eventName) || rawHandlerNames.has(ROOM_SILENT_OFF.eventName)) {
181+
rawHandlerNames.delete(ROOM_SILENT_ON.eventName)
182+
rawHandlerNames.delete(ROOM_SILENT_OFF.eventName)
183+
instance.on(ROOM_SILENT_ON.eventName as any, (data: WSMessage<any>) => {
184+
isHandleRaw && rawHandler[ROOM_SILENT_ON.eventName]?.(data.data)
185+
const parsedData = ROOM_SILENT_ON.parser(data.data, roomId)
186+
handler[ROOM_SILENT_ON.handlerName]?.(normalizeDanmu(ROOM_SILENT_ON.eventName, parsedData, data.data))
187+
})
188+
instance.on(ROOM_SILENT_OFF.eventName as any, (data: WSMessage<any>) => {
189+
isHandleRaw && rawHandler[ROOM_SILENT_OFF.eventName]?.(data.data)
190+
const parsedData = ROOM_SILENT_OFF.parser(data.data, roomId)
191+
handler[ROOM_SILENT_OFF.handlerName]?.(normalizeDanmu(ROOM_SILENT_OFF.eventName, parsedData, data.data))
192+
})
193+
}
194+
177195
// SEND_GIFT
178196
if (handler[SEND_GIFT.handlerName] || rawHandlerNames.has(SEND_GIFT.eventName)) {
179197
rawHandlerNames.delete(SEND_GIFT.eventName)

src/parser/ROOM_SILENT.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import type { Message } from '../types/app'
2+
3+
export interface RoomSilentMsg {
4+
/** 禁言类型(按用户等级、勋章等级、全员、关闭) */
5+
type: 'level' | 'medal' | 'member' | 'off'
6+
/** 禁言等级 */
7+
level: number
8+
/** 禁言结束时间,秒级时间戳,-1 为无限 */
9+
second: number
10+
}
11+
12+
const parser = (data: any, roomId: number): RoomSilentMsg => {
13+
const msgType = data.cmd
14+
const rawData = data.data
15+
16+
return {
17+
type: msgType === 'ROOM_SILENT_OFF' ? 'off' : rawData.type,
18+
level: rawData.level,
19+
second: rawData.second,
20+
}
21+
}
22+
23+
export const ROOM_SILENT_ON = {
24+
parser,
25+
eventName: 'ROOM_SILENT_ON' as const,
26+
handlerName: 'onRoomSilent' as const,
27+
}
28+
29+
export const ROOM_SILENT_OFF = {
30+
parser,
31+
eventName: 'ROOM_SILENT_OFF' as const,
32+
handlerName: 'onRoomSilent' as const,
33+
}
34+
35+
export type Handler = {
36+
/** 房间开启、关闭全局禁言 */
37+
onRoomSilent: (msg: Message<RoomSilentMsg>) => void
38+
}

src/parser/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export { INTERACT_WORD, ENTRY_EFFECT, LIKE_INFO_V3_CLICK, type Handler as UserAc
77
export { LIKE_INFO_V3_UPDATE, type Handler as LikedChangeMsgHandler, type LikedChangeMsg } from './LIKE_INFO_V3_UPDATE'
88
export { ONLINE_RANK_COUNT, type Handler as RankCountChangeMsgHandler, type RankCountChangeMsg } from './ONLINE_RANK_COUNT'
99
export { ROOM_CHANGE, type Handler as RoomInfoChangeHandler, type RoomInfoChangeMsg } from './ROOM_CHANGE'
10+
export { ROOM_SILENT_ON, ROOM_SILENT_OFF, type Handler as RoomSilentMsgHandler, type RoomSilentMsg } from './ROOM_SILENT'
1011
export { SEND_GIFT, type Handler as GiftHandler, type GiftMsg } from './SEND_GIFT'
1112
export { SUPER_CHAT_MESSAGE, type Handler as SuperChatHandler, type SuperChatMsg } from './SUPER_CHAT_MESSAGE'
1213
export { WARNING, CUT_OFF, type Handler as RoomWarnHandler, type RoomWarnMsg } from './WARNING_CUT_OFF'

0 commit comments

Comments
 (0)