UNPKG

@bilicli/live-mini

Version:

Bili-Live danmu client, lite version

154 lines (141 loc) 4.1 kB
// 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 };