@bilicli/live-mini
Version:
Bili-Live danmu client, lite version
154 lines (141 loc) • 4.1 kB
JavaScript
// src/instance.ts
import { startListen } from "blive-message-listener";
// src/component/msg/danmu.ts
import ansis2 from "ansis";
// src/component/username.ts
import ansis from "ansis";
// src/utils/parse.ts
var getGuardColor = (level = 0) => {
const colorDict = ["#967E76", "#FF7C28", "#E17AFF", "#00D1F1"];
return colorDict[level];
};
// src/component/username.ts
var usernameCom = (user) => {
var _a, _b, _c;
const options = global.appOptions;
let badge, rank, admin;
if (options.badge && user.badge) {
const badgeColor = user.badge.anchor.is_same_room ? user.badge.color : "#999999";
badge = ansis.bgHex(badgeColor)(` ${user.badge.name} `) + ansis.bgHex("#ffffff").hex(badgeColor)(` ${user.badge.level} `);
}
if (options.rank && ((_a = user.identity) == null ? void 0 : _a.rank)) {
rank = ansis.bgBlue(` \u699C${user.identity.rank} `);
}
if ((_b = user.identity) == null ? void 0 : _b.room_admin) {
admin = ansis.bgRed(` \u623F `);
}
const uname = ansis.hex(getGuardColor((_c = user.identity) == null ? void 0 : _c.guard_level))(user.uname);
const components = [
badge,
rank,
admin,
uname
].filter(Boolean);
return components.join(" ");
};
// src/component/msg/danmu.ts
var danmuType = (msg) => {
if (msg.emoticon) {
return "[\u8868\u60C5]";
} else if (msg.lottery) {
return "[\u62BD\u5956]";
}
return "";
};
var danmuMsgCom = (msg) => {
const components = [
`${usernameCom(msg.user)}:`,
ansis2.yellow(danmuType(msg)),
msg.content
].filter(Boolean);
return components.join(" ");
};
// src/component/msg/superChat.ts
import ansis3 from "ansis";
var superChatMsgCom = (msg) => {
const components = [
`${usernameCom(msg.user)}:`,
`(\xA5${msg.price})`,
ansis3.hex(msg.content_color)(msg.content)
].filter(Boolean);
return components.join(" ");
};
// src/component/msg/gift.ts
import ansis4 from "ansis";
var sendMaster = (msg) => {
var _a;
if ((_a = msg.send_master) == null ? void 0 : _a.uname) {
return `\u7ED9 ${ansis4.magenta(msg.send_master.uname)}`;
}
return "";
};
var giftMsgCom = (msg) => {
const components = [
usernameCom(msg.user),
"\u8D60\u9001\u4E86",
ansis4.magenta(`(\xA5${msg.price / 1e3}) ${msg.gift_name}`),
`* ${msg.amount}`,
sendMaster(msg)
].filter(Boolean);
return components.join(" ");
};
// src/component/msg/guardBuy.ts
import ansis5 from "ansis";
var guardBuyMsgCom = (msg) => {
var _a;
const components = [
`${usernameCom(msg.user)}:`,
`(\xA5${msg.price / 1e3})`,
ansis5.hex(getGuardColor((_a = msg.user.identity) == null ? void 0 : _a.guard_level))(msg.gift_name)
].filter(Boolean);
return components.join(" ");
};
// src/instance.ts
var startInstance = (roomId, options) => {
global.appOptions = options;
const handler = {
onIncomeDanmu: (msg) => {
!msg.body.lottery && console.log(danmuMsgCom(msg.body));
},
onIncomeSuperChat: (msg) => {
console.log(superChatMsgCom(msg.body));
},
onGift: (msg) => {
console.log(giftMsgCom(msg.body));
},
onGuardBuy(msg) {
console.log(guardBuyMsgCom(msg.body));
}
};
startListen(roomId, handler);
};
// src/utils/getInfo.ts
import { $fetch } from "ohmyfetch";
var getRoomInfo = async (roomId) => {
const url = `https://api.live.bilibili.com/room/v1/Room/get_info?room_id=${roomId}`;
const response = await $fetch(url);
return response.code === 0 ? response.data : null;
};
// src/component/roomInfo.ts
import ansis6 from "ansis";
var roomInfoCom = (roomInfo) => {
const components = [
ansis6.bold.green(`${roomInfo.room_id}`),
ansis6.green(`(${roomInfo.parent_area_name}\xB7${roomInfo.area_name})`),
roomInfo.title
];
return components.join(" ");
};
// src/index.ts
var startApp = async (roomId, options) => {
const roomInfo = await getRoomInfo(roomId);
if (!roomInfo) {
console.log("\u623F\u95F4\u4E0D\u5B58\u5728");
return process.exit(1);
}
console.log(roomInfoCom(roomInfo));
startInstance(roomInfo.room_id, options);
};
export {
startApp
};