@zhin.js/plugin-bilibili 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -2
- package/commands/bili/list/index.js +26 -0
- package/commands/bili/live/index.js +31 -0
- package/commands/bili/sub/index.js +68 -0
- package/commands/bili/unsub/index.js +35 -0
- package/lib/api.d.ts +68 -0
- package/lib/api.js +298 -0
- package/lib/api.js.map +1 -0
- package/lib/channel.d.ts +15 -0
- package/lib/channel.js +47 -0
- package/lib/channel.js.map +1 -0
- package/lib/config.d.ts +15 -0
- package/lib/config.js +35 -0
- package/lib/config.js.map +1 -0
- package/lib/format.d.ts +5 -0
- package/lib/format.js +42 -0
- package/lib/format.js.map +1 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +7 -0
- package/lib/index.js.map +1 -0
- package/lib/permission.d.ts +15 -0
- package/lib/permission.js +20 -0
- package/lib/permission.js.map +1 -0
- package/lib/poll.d.ts +45 -0
- package/lib/poll.js +260 -0
- package/lib/poll.js.map +1 -0
- package/lib/runtime.d.ts +22 -0
- package/lib/runtime.js +3 -0
- package/lib/runtime.js.map +1 -0
- package/lib/store.d.ts +52 -0
- package/lib/store.js +141 -0
- package/lib/store.js.map +1 -0
- package/lib/wbi.d.ts +5 -0
- package/lib/wbi.js +50 -0
- package/lib/wbi.js.map +1 -0
- package/package.json +104 -3
- package/plugin.js +65 -0
- package/schema.json +62 -0
- package/skills/bilibili/SKILL.md +46 -0
- package/skills/bilibili/tools/bili_list_subscriptions/index.js +34 -0
- package/skills/bilibili/tools/bili_live_status/index.js +39 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bilibili
|
|
3
|
+
description: >-
|
|
4
|
+
B 站(哔哩哔哩)直播与 UP 主订阅查询能力。当用户想知道某个直播间是否在播、
|
|
5
|
+
某个 UP 主有没有开播,或想看看当前订阅了哪些 UP 主时使用。
|
|
6
|
+
订阅的增删由聊天命令 bili sub / bili unsub 管理,推送由后台定时任务完成。
|
|
7
|
+
keywords:
|
|
8
|
+
- bilibili
|
|
9
|
+
- b站
|
|
10
|
+
- 哔哩哔哩
|
|
11
|
+
- 直播
|
|
12
|
+
- 开播
|
|
13
|
+
- up主
|
|
14
|
+
- 动态
|
|
15
|
+
- 订阅
|
|
16
|
+
tags:
|
|
17
|
+
- bilibili
|
|
18
|
+
- live
|
|
19
|
+
- subscription
|
|
20
|
+
tools:
|
|
21
|
+
- bili_live_status
|
|
22
|
+
- bili_list_subscriptions
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# B 站订阅技能
|
|
26
|
+
|
|
27
|
+
## 工具
|
|
28
|
+
|
|
29
|
+
| 工具 | 用途 | 说明 |
|
|
30
|
+
|------|------|------|
|
|
31
|
+
| `bili_live_status` | 查询开播状态 | 传直播间号(`room`)或 UP 主 UID(`uid`),返回是否在播、标题、链接 |
|
|
32
|
+
| `bili_list_subscriptions` | 查看订阅 | 列出本插件实例的全部 UP 主订阅,按会话分组 |
|
|
33
|
+
|
|
34
|
+
**Example:**
|
|
35
|
+
```
|
|
36
|
+
用户: 嘉然现在在播吗?直播间 22637261
|
|
37
|
+
→ bili_live_status(room="22637261")
|
|
38
|
+
|
|
39
|
+
用户: 我们订阅了哪些 UP 主?
|
|
40
|
+
→ bili_list_subscriptions()
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 注意
|
|
44
|
+
|
|
45
|
+
- 订阅的增加 / 删除走聊天命令 `bili sub <uid> [all|live|dynamic]`、`bili unsub <uid>`,不是 AI 工具。
|
|
46
|
+
- 推送有随机延迟和退避,B 站风控时会暂停一段时间,属于正常现象。
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { bilibiliRuntimeToken } from "../../../../lib/runtime.js";
|
|
5
|
+
import { getBiliSubs } from "../../../../lib/store.js";
|
|
6
|
+
export default defineAgentTool({
|
|
7
|
+
description: '列出所有 B 站 UP 主订阅(按会话分组)',
|
|
8
|
+
requiresApproval: 'never',
|
|
9
|
+
tags: ['bilibili'],
|
|
10
|
+
keywords: ['b站订阅', 'up主', 'bilibili subscriptions'],
|
|
11
|
+
inputSchema: z.object({}),
|
|
12
|
+
async execute(_input, context) {
|
|
13
|
+
const Subs = getBiliSubs(context.use(bilibiliRuntimeToken).db);
|
|
14
|
+
if (!Subs)
|
|
15
|
+
return 'B 站订阅数据库尚未就绪';
|
|
16
|
+
const rows = await Subs.select();
|
|
17
|
+
if (rows.length === 0)
|
|
18
|
+
return '暂无任何 B 站订阅';
|
|
19
|
+
const grouped = new Map();
|
|
20
|
+
for (const row of rows) {
|
|
21
|
+
const key = `${String(row.channel_type)}:${String(row.channel_id)}`;
|
|
22
|
+
const list = grouped.get(key) ?? [];
|
|
23
|
+
list.push(`${String(row.uname || row.uid)}(UID ${String(row.uid)},${String(row.kinds || 'all')})`);
|
|
24
|
+
grouped.set(key, list);
|
|
25
|
+
}
|
|
26
|
+
const lines = [];
|
|
27
|
+
for (const [channel, subs] of grouped) {
|
|
28
|
+
lines.push(`[${channel}]`);
|
|
29
|
+
for (const sub of subs)
|
|
30
|
+
lines.push(` - ${sub}`);
|
|
31
|
+
}
|
|
32
|
+
return `B 站订阅总览 (${rows.length} 条):\n${lines.join('\n')}`;
|
|
33
|
+
},
|
|
34
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { parseRoomId, parseUid } from "../../../../lib/api.js";
|
|
5
|
+
import { formatRoom, liveStatusText } from "../../../../lib/format.js";
|
|
6
|
+
import { bilibiliRuntimeToken } from "../../../../lib/runtime.js";
|
|
7
|
+
export default defineAgentTool({
|
|
8
|
+
description: '查询 B 站直播间或 UP 主当前是否在直播',
|
|
9
|
+
requiresApproval: 'never',
|
|
10
|
+
tags: ['bilibili'],
|
|
11
|
+
keywords: ['b站', '直播', '开播', 'bilibili live'],
|
|
12
|
+
inputSchema: z.object({
|
|
13
|
+
room: z.string().optional().describe('直播间号或直播间链接'),
|
|
14
|
+
uid: z.string().optional().describe('UP 主 UID 或空间链接'),
|
|
15
|
+
}),
|
|
16
|
+
async execute({ room, uid }, context) {
|
|
17
|
+
const { client } = context.use(bilibiliRuntimeToken);
|
|
18
|
+
try {
|
|
19
|
+
const roomId = room ? parseRoomId(room) : undefined;
|
|
20
|
+
if (roomId) {
|
|
21
|
+
const info = await client.getRoomInfo(roomId);
|
|
22
|
+
const live = info.uid ? (await client.getLiveStatus([info.uid])).get(info.uid) : undefined;
|
|
23
|
+
return formatRoom(info, live?.uname ?? '', live?.liveTime ?? 0);
|
|
24
|
+
}
|
|
25
|
+
const upUid = uid ? parseUid(uid) : undefined;
|
|
26
|
+
if (!upUid)
|
|
27
|
+
return '请提供直播间号(room)或 UP 主 UID(uid)';
|
|
28
|
+
const live = (await client.getLiveStatus([upUid])).get(upUid);
|
|
29
|
+
if (!live)
|
|
30
|
+
return `UID ${upUid} 没有开通直播间`;
|
|
31
|
+
return [`${live.uname || upUid}:${liveStatusText(live.liveStatus)}`, live.title && `标题:${live.title}`, live.url]
|
|
32
|
+
.filter(Boolean)
|
|
33
|
+
.join('\n');
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return `查询失败:${error.message}`;
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
});
|