Skip to content

Commit

Permalink
feat: add event GUARD_BUY, ENTRY_EFFECT
Browse files Browse the repository at this point in the history
  • Loading branch information
ddiu8081 committed Sep 24, 2022
1 parent 5863789 commit 58cbc0c
Show file tree
Hide file tree
Showing 10 changed files with 108 additions and 62 deletions.
10 changes: 7 additions & 3 deletions src/listener/index.ts
Expand Up @@ -2,7 +2,7 @@ import {
HEARTBEAT, type AttentionChangeMsgHandler,
DANMU_MSG, type DanmuMsgHandler,
GUARD_BUY, type GuardBuyHandler,
INTERACT_WORD, type NewComerMsgHandler,
INTERACT_WORD, ENTRY_EFFECT, type NewComerMsgHandler,
SEND_GIFT, type GiftHandler,
SUPER_CHAT_MESSAGE, type SuperChatHandler,
WATCHED_CHANGE, type WatchedChangeHandler,
Expand Down Expand Up @@ -60,12 +60,16 @@ export const listenAll = (instance: KeepLiveTCP, roomId: number, handler?: MsgHa
})
}

// INTERACT_WORD
if (handler[INTERACT_WORD.handlerName]) {
// INTERACT_WORD, ENTRY_EFFECT
if (handler[INTERACT_WORD.handlerName] || handler[ENTRY_EFFECT.handlerName]) {
instance.on(INTERACT_WORD.eventName, (data: any) => {
const parsedData = INTERACT_WORD.parser(data, roomId)
handler[INTERACT_WORD.handlerName]?.(normalizeDanmu(INTERACT_WORD.eventName, parsedData))
})
instance.on(ENTRY_EFFECT.eventName, (data: any) => {
const parsedData = ENTRY_EFFECT.parser(data, roomId)
handler[ENTRY_EFFECT.handlerName]?.(normalizeDanmu(ENTRY_EFFECT.eventName, parsedData))
})
}

// SEND_GIFT
Expand Down
2 changes: 1 addition & 1 deletion src/parser/DANMU_MSG.ts
Expand Up @@ -4,7 +4,7 @@ import type { Message, User } from '../types/app'
export interface DanmuMsg {
user: User
content: string
/** 弹幕表情·*/
/** 弹幕表情 */
emoticon?: {
id: string
height: number
Expand Down
10 changes: 5 additions & 5 deletions src/parser/GUARD_BUY.ts
Expand Up @@ -2,17 +2,17 @@ import type { Message, User, GuardLevel } from '../types/app'

export interface GuardBuyMsg {
user: User
/** 礼物id·*/
/** 礼物id */
gift_id: number
/** 礼物名称·*/
/** 礼物名称 */
gift_name: string
/** 大航海信息 */
guard_level: GuardLevel
/** 价格·*/
/** 价格,RMB */
price: number
/** 等级生效时间·*/
/** 等级生效时间 */
start_time: number
/** 等级过期时间·*/
/** 等级过期时间 */
end_time: number
}

Expand Down
2 changes: 1 addition & 1 deletion src/parser/HEARTBEAT.ts
@@ -1,7 +1,7 @@
import type { Message } from '../types/app'

export interface AttentionChangeMsg {
/** 直播间热度·*/
/** 直播间热度 */
attention: number
}

Expand Down
41 changes: 0 additions & 41 deletions src/parser/INTERACT_WORD.ts

This file was deleted.

80 changes: 80 additions & 0 deletions src/parser/INTERACT_WORD_ENTRY_EFFECT.ts
@@ -0,0 +1,80 @@
import { intToColorHex } from '../utils/color'
import type { Message, User } from '../types/app'

export interface NewComerMsg {
user: User
/** 入场时间,毫秒时间戳 */
timestamp: number
}

const parserNormal = (data: any, roomId: number): NewComerMsg => {
const rawData = data.data
return {
user: {
uid: rawData.uid,
uname: rawData.uname,
face: rawData.face,
badge: rawData.fans_medal?.target_id ? {
active: rawData.fans_medal?.is_lighted,
name: rawData.fans_medal?.medal_name,
level: rawData.fans_medal?.medal_level,
color: intToColorHex(rawData.fans_medal?.medal_color_start),
anchor: {
uid: rawData.fans_medal?.target_id,
uname: '',
room_id: rawData.fans_medal?.anchor_roomid,
is_same_room: rawData.fans_medal?.anchor_roomid === roomId,
}
} : undefined,
identity: {
rank: 0,
guard_level: rawData.privilege_type,
room_admin: false,
}
},
timestamp: Math.ceil(rawData.trigger_time / 1000000),
}
}

const parserGuard = (data: any, roomId: number): NewComerMsg => {
const rawData = data.data
const uname = /<%(.*)%>/.exec(rawData.copy_writing)?.[1] || ''
return {
user: {
uid: rawData.uid,
uname: uname, // 超长会有省略号
identity: {
rank: 0,
guard_level: rawData.privilege_type,
room_admin: false,
}
},
timestamp: Math.ceil(rawData.trigger_time / 1000000),
}
}

const parser = (data: any, roomId: number): NewComerMsg => {
const msgType = data.cmd
if (msgType === 'ENTRY_EFFECT') {
return parserGuard(data, roomId)
} else {
// INTERACT_WORD
return parserNormal(data, roomId)
}
}

export const INTERACT_WORD = {
parser,
eventName: 'INTERACT_WORD' as const,
handlerName: 'onNewComer' as const,
}

export const ENTRY_EFFECT = {
parser,
eventName: 'ENTRY_EFFECT' as const,
handlerName: 'onNewComer' as const,
}

export type Handler = {
onNewComer: (msg: Message<NewComerMsg>) => void
}
11 changes: 7 additions & 4 deletions src/parser/SEND_GIFT.ts
Expand Up @@ -3,13 +3,15 @@ import type { Message, User } from '../types/app'

export interface GiftMsg {
user: User
/** 礼物id·*/
/** 礼物id */
gift_id: number
/** 礼物名称·*/
/** 礼物名称 */
gift_name: string
/** 礼物价格·*/
/** 礼物价格类型 */
coin_type: 'silver' | 'gold'
/** 礼物价格,除以1000为RMB */
price: number
/** 礼物数量·*/
/** 礼物数量 */
amount: number
}

Expand Down Expand Up @@ -39,6 +41,7 @@ const parser = (data: any): GiftMsg => {
},
gift_id: rawData.giftId,
gift_name: rawData.giftName,
coin_type: rawData.coin_type,
price: rawData.price,
amount: rawData.num,
}
Expand Down
8 changes: 4 additions & 4 deletions src/parser/SUPER_CHAT_MESSAGE.ts
Expand Up @@ -2,13 +2,13 @@ import type { Message, User } from '../types/app'

export interface SuperChatMsg {
user: User
/** 弹幕内容·*/
/** 弹幕内容 */
content: string
/** 弹幕颜色·*/
/** 弹幕颜色 */
content_color: string
/** 价格·*/
/** 价格,RMB */
price: number
/** 持续时间·*/
/** 持续时间 */
time: number
}

Expand Down
4 changes: 2 additions & 2 deletions src/parser/WATCHED_CHANGE.ts
@@ -1,9 +1,9 @@
import type { Message } from '../types/app'

export interface WatchedChangeMsg {
/** 累计入场人数·*/
/** 累计入场人数 */
num: number
/** 累计入场人数,格式化输出·*/
/** 累计入场人数,格式化输出 */
text_small: string
}

Expand Down
2 changes: 1 addition & 1 deletion src/parser/index.ts
@@ -1,7 +1,7 @@
export { HEARTBEAT, Handler as AttentionChangeMsgHandler, AttentionChangeMsg } from './HEARTBEAT'
export { DANMU_MSG, Handler as DanmuMsgHandler, DanmuMsg } from './DANMU_MSG'
export { GUARD_BUY, Handler as GuardBuyHandler, GuardBuyMsg } from './GUARD_BUY'
export { INTERACT_WORD, Handler as NewComerMsgHandler, NewComerMsg } from './INTERACT_WORD'
export { INTERACT_WORD, ENTRY_EFFECT, Handler as NewComerMsgHandler, NewComerMsg } from './INTERACT_WORD_ENTRY_EFFECT'
export { SEND_GIFT, Handler as GiftHandler, GiftMsg } from './SEND_GIFT'
export { SUPER_CHAT_MESSAGE, Handler as SuperChatHandler, SuperChatMsg } from './SUPER_CHAT_MESSAGE'
export { WATCHED_CHANGE, Handler as WatchedChangeHandler, WatchedChangeMsg } from './WATCHED_CHANGE'
Expand Down

0 comments on commit 58cbc0c

Please sign in to comment.