-
Notifications
You must be signed in to change notification settings - Fork 3
/
Danmu.ts
71 lines (66 loc) · 1.77 KB
/
Danmu.ts
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
import type { Message, User } from '../types/message'
import { int2ColorHex } from '../utils/color'
import { normalizeMessage } from '../utils/message'
import type { EventInfo } from '../types/event'
export interface DanmuData {
/** 用户信息 */
user: User
/** 弹幕内容 */
content: string
/** 时间戳 */
timestamp: number
/** 是否为抽奖弹幕 */
isLottery: boolean
// 弹幕表情
emoticon?: {
id: number
url: string
}
}
function dataProcessor(rawData: any): Message<DanmuData> {
const { info } = rawData
const newData: DanmuData = {
user: {
uid: info[0][15].user.uid,
uname: info[0][15].user.base.name,
face: info[0][15].user.base.face,
fansMedal: info[3].length > 0
? {
name: info[3][1],
level: info[3][0],
guardType: info[3][10],
color: {
original: int2ColorHex(info[3][4]),
border: int2ColorHex(info[3][7]),
start: int2ColorHex(info[3][8]),
end: int2ColorHex(info[3][9]),
},
isLighted: info[3][11],
anchor: {
uid: info[3][12],
uname: info[3][2],
roomId: info[3][3],
},
}
: undefined,
giftRank: info[4][4],
guardType: info[7],
isRoomAdmin: info[2][2] === 1,
},
content: info[1],
timestamp: info[0][4],
isLottery: info[0][9] !== 0,
emoticon: info[0][13]?.emoticon_unique
? {
id: info[0][13].emoticon_unique.id,
url: info[0][13].url,
}
: undefined,
}
return normalizeMessage(rawData.cmd, newData, rawData)
}
export const DanmuEvent: EventInfo<DanmuData> = {
cmdName: 'DANMU_MSG',
handlerName: 'onDanmu',
dataProcessor,
}