Skip to content

Commit ec7e325

Browse files
committed
feat: 房间被超管警告、切断消息
1 parent 7c47147 commit ec7e325

File tree

4 files changed

+89
-3
lines changed

4 files changed

+89
-3
lines changed

README.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,12 +525,42 @@ export interface GuardBuyMsg {
525525
```
526526
</details>
527527

528+
#### 房间管理相关
529+
530+
| Handler | Description |
531+
| --- | --- |
532+
| onRoomWarn | 房间被警告/切断 |
533+
534+
<details>
535+
<summary>Type Definitions</summary>
536+
537+
##### handler.onRoomWarn
538+
539+
房间被超管警告、切断
540+
541+
```ts
542+
export type Handler = {
543+
/** 房间被超管警告、切断 */
544+
onRoomWarn: (msg: Message<GiftMsg>) => void
545+
}
546+
547+
type msgType = 'WARNING''CUT_OFF'
548+
549+
export interface RoomWarnMsg {
550+
/** 处理类型 */
551+
type: 'warning' | 'cut'
552+
/** 处理原因 */
553+
msg: string
554+
}
555+
```
556+
</details>
557+
528558
#### 监听原始消息
529559

530560
```ts
531561
export type Handler = {
532562
/** 原始消息 */
533-
raw: Record<string, (msg: any) => void>
563+
raw: Record<'msg' | string, (msg: any) => void>
534564
}
535565
```
536566

src/listener/index.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
ROOM_CHANGE, type RoomInfoChangeHandler,
1111
SEND_GIFT, type GiftHandler,
1212
SUPER_CHAT_MESSAGE, type SuperChatHandler,
13+
WARNING, CUT_OFF, type RoomWarnHandler,
1314
WATCHED_CHANGE, type WatchedChangeHandler,
1415
} from '../parser'
1516
import type { KeepLiveTCP, KeepLiveWS, Message as WSMessage } from 'tiny-bilibili-ws'
@@ -37,10 +38,11 @@ export type MsgHandler = Partial<
3738
& RoomInfoChangeHandler
3839
& GiftHandler
3940
& SuperChatHandler
41+
& RoomWarnHandler
4042
& WatchedChangeHandler
4143
& {
4244
/** 原始消息 */
43-
raw: Record<string, (msg: any) => void>
45+
raw: Record<'msg' | string, (msg: any) => void>
4446
}
4547
>
4648

@@ -120,9 +122,11 @@ export const listenAll = (instance: KeepLiveTCP | KeepLiveWS, roomId: number, ha
120122
}
121123

122124
// INTERACT_WORD, ENTRY_EFFECT, LIKE_INFO_V3_CLICK
123-
if (handler[INTERACT_WORD.handlerName] || handler[ENTRY_EFFECT.handlerName] || rawHandlerNames.has(INTERACT_WORD.eventName) || rawHandlerNames.has(ENTRY_EFFECT.eventName)) {
125+
if (handler[INTERACT_WORD.handlerName] || handler[ENTRY_EFFECT.handlerName] || handler[LIKE_INFO_V3_CLICK.handlerName] ||
126+
rawHandlerNames.has(INTERACT_WORD.eventName) || rawHandlerNames.has(ENTRY_EFFECT.eventName) || rawHandlerNames.has(LIKE_INFO_V3_CLICK.eventName)) {
124127
rawHandlerNames.delete(INTERACT_WORD.eventName)
125128
rawHandlerNames.delete(ENTRY_EFFECT.eventName)
129+
rawHandlerNames.delete(LIKE_INFO_V3_CLICK.eventName)
126130
instance.on(INTERACT_WORD.eventName, (data: WSMessage<any>) => {
127131
isHandleRaw && rawHandler[INTERACT_WORD.eventName]?.(data.data)
128132
const parsedData = INTERACT_WORD.parser(data.data, roomId)
@@ -190,6 +194,22 @@ export const listenAll = (instance: KeepLiveTCP | KeepLiveWS, roomId: number, ha
190194
})
191195
}
192196

197+
// WARNING, CUT_OFF
198+
if (handler[WARNING.handlerName] || handler[CUT_OFF.handlerName] || rawHandlerNames.has(WARNING.eventName) || rawHandlerNames.has(CUT_OFF.eventName)) {
199+
rawHandlerNames.delete(WARNING.eventName)
200+
rawHandlerNames.delete(CUT_OFF.eventName)
201+
instance.on(WARNING.eventName as any, (data: WSMessage<any>) => {
202+
isHandleRaw && rawHandler[WARNING.eventName]?.(data.data)
203+
const parsedData = WARNING.parser(data.data, roomId)
204+
handler[WARNING.handlerName]?.(normalizeDanmu(WARNING.eventName, parsedData, data.data))
205+
})
206+
instance.on(CUT_OFF.eventName as any, (data: WSMessage<any>) => {
207+
isHandleRaw && rawHandler[CUT_OFF.eventName]?.(data.data)
208+
const parsedData = CUT_OFF.parser(data.data, roomId)
209+
handler[CUT_OFF.handlerName]?.(normalizeDanmu(CUT_OFF.eventName, parsedData, data.data))
210+
})
211+
}
212+
193213
// WATCHED_CHANGE
194214
if (handler[WATCHED_CHANGE.handlerName] || rawHandlerNames.has(WATCHED_CHANGE.eventName)) {
195215
rawHandlerNames.delete(WATCHED_CHANGE.eventName)

src/parser/WARNING_CUT_OFF.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import type { Message } from '../types/app'
2+
3+
export interface RoomWarnMsg {
4+
/** 处理类型 */
5+
type: 'warning' | 'cut'
6+
/** 处理原因 */
7+
msg: string
8+
}
9+
10+
const parser = (data: any, roomId: number): RoomWarnMsg => {
11+
const msgType = data.cmd
12+
const rawData = data
13+
14+
return {
15+
type: msgType === 'WARNING' ? 'warning' : 'cut',
16+
msg: rawData.msg,
17+
}
18+
}
19+
20+
export const WARNING = {
21+
parser,
22+
eventName: 'WARNING' as const,
23+
handlerName: 'onRoomWarn' as const,
24+
}
25+
26+
export const CUT_OFF = {
27+
parser,
28+
eventName: 'CUT_OFF' as const,
29+
handlerName: 'onRoomWarn' as const,
30+
}
31+
32+
export type Handler = {
33+
/** 房间被超管警告、切断 */
34+
onRoomWarn: (msg: Message<RoomWarnMsg>) => void
35+
}

src/parser/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ export { ONLINE_RANK_COUNT, type Handler as RankCountChangeMsgHandler, type Rank
99
export { ROOM_CHANGE, type Handler as RoomInfoChangeHandler, type RoomInfoChangeMsg } from './ROOM_CHANGE'
1010
export { SEND_GIFT, type Handler as GiftHandler, type GiftMsg } from './SEND_GIFT'
1111
export { SUPER_CHAT_MESSAGE, type Handler as SuperChatHandler, type SuperChatMsg } from './SUPER_CHAT_MESSAGE'
12+
export { WARNING, CUT_OFF, type Handler as RoomWarnHandler, type RoomWarnMsg } from './WARNING_CUT_OFF'
1213
export { WATCHED_CHANGE, type Handler as WatchedChangeHandler, type WatchedChangeMsg } from './WATCHED_CHANGE'
1314

0 commit comments

Comments
 (0)