Skip to content

Commit 5863789

Browse files
committed
feat: add msg type INTERACT_WORD
1 parent e8dca52 commit 5863789

File tree

6 files changed

+55
-2
lines changed

6 files changed

+55
-2
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "blive-message-listener",
3-
"version": "0.1.9",
3+
"version": "0.1.10",
44
"description": "Bilibili-live danmu listener with type",
55
"main": "dist/index.js",
66
"module": "dist/index.mjs",

src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ export const startListen = (roomId: number, handler: MsgHandler) => {
99
}
1010

1111
export type { MsgHandler }
12-
export type { Message, GuardLevel } from './types/app'
12+
export type { Message, GuardLevel, User } from './types/app'
1313
export * from './types/message'

src/listener/index.ts

+10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
HEARTBEAT, type AttentionChangeMsgHandler,
33
DANMU_MSG, type DanmuMsgHandler,
44
GUARD_BUY, type GuardBuyHandler,
5+
INTERACT_WORD, type NewComerMsgHandler,
56
SEND_GIFT, type GiftHandler,
67
SUPER_CHAT_MESSAGE, type SuperChatHandler,
78
WATCHED_CHANGE, type WatchedChangeHandler,
@@ -13,6 +14,7 @@ export type MsgHandler = Partial<
1314
& AttentionChangeMsgHandler
1415
& DanmuMsgHandler
1516
& GuardBuyHandler
17+
& NewComerMsgHandler
1618
& GiftHandler
1719
& SuperChatHandler
1820
& WatchedChangeHandler
@@ -58,6 +60,14 @@ export const listenAll = (instance: KeepLiveTCP, roomId: number, handler?: MsgHa
5860
})
5961
}
6062

63+
// INTERACT_WORD
64+
if (handler[INTERACT_WORD.handlerName]) {
65+
instance.on(INTERACT_WORD.eventName, (data: any) => {
66+
const parsedData = INTERACT_WORD.parser(data, roomId)
67+
handler[INTERACT_WORD.handlerName]?.(normalizeDanmu(INTERACT_WORD.eventName, parsedData))
68+
})
69+
}
70+
6171
// SEND_GIFT
6272
if (handler[SEND_GIFT.handlerName]) {
6373
instance.on(SEND_GIFT.eventName, (data: any) => {

src/parser/INTERACT_WORD.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { intToColorHex } from '../utils/color'
2+
import type { Message, User } from '../types/app'
3+
4+
export interface NewComerMsg {
5+
user: User
6+
/** 入场时间·*/
7+
timestamp: number
8+
}
9+
10+
const parser = (data: any, roomId: number): NewComerMsg => {
11+
const rawData = data.data
12+
return {
13+
user: {
14+
uid: rawData.uid,
15+
uname: rawData.username,
16+
badge: rawData.fans_medal?.target_id ? {
17+
active: rawData.fans_medal?.is_lighted,
18+
name: rawData.fans_medal?.medal_name,
19+
level: rawData.fans_medal?.medal_level,
20+
color: intToColorHex(rawData.fans_medal?.medal_color_start),
21+
anchor: {
22+
uid: rawData.fans_medal?.target_id,
23+
uname: '',
24+
room_id: rawData.fans_medal?.anchor_roomid,
25+
is_same_room: rawData.fans_medal?.anchor_roomid === roomId,
26+
}
27+
} : undefined,
28+
},
29+
timestamp: rawData.timestamp,
30+
}
31+
}
32+
33+
export const INTERACT_WORD = {
34+
parser,
35+
eventName: 'INTERACT_WORD' as const,
36+
handlerName: 'onNewComer' as const,
37+
}
38+
39+
export type Handler = {
40+
onNewComer: (msg: Message<NewComerMsg>) => void
41+
}

src/parser/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export { HEARTBEAT, Handler as AttentionChangeMsgHandler, AttentionChangeMsg } from './HEARTBEAT'
22
export { DANMU_MSG, Handler as DanmuMsgHandler, DanmuMsg } from './DANMU_MSG'
33
export { GUARD_BUY, Handler as GuardBuyHandler, GuardBuyMsg } from './GUARD_BUY'
4+
export { INTERACT_WORD, Handler as NewComerMsgHandler, NewComerMsg } from './INTERACT_WORD'
45
export { SEND_GIFT, Handler as GiftHandler, GiftMsg } from './SEND_GIFT'
56
export { SUPER_CHAT_MESSAGE, Handler as SuperChatHandler, SuperChatMsg } from './SUPER_CHAT_MESSAGE'
67
export { WATCHED_CHANGE, Handler as WatchedChangeHandler, WatchedChangeMsg } from './WATCHED_CHANGE'

src/types/message.ts

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export type {
22
AttentionChangeMsg,
33
DanmuMsg,
44
GuardBuyMsg,
5+
NewComerMsg,
56
GiftMsg,
67
SuperChatMsg,
78
WatchedChangeMsg,

0 commit comments

Comments
 (0)