koishi-plugin-bilibili-notify 3.0.0-alpha.9 → 3.0.0-beta.1
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/lib/biliAPI.d.ts +6 -21
- package/lib/biliAPI.js +173 -154
- package/lib/blive.d.ts +5 -13
- package/lib/blive.js +13 -33
- package/lib/comRegister.d.ts +15 -53
- package/lib/comRegister.js +784 -1538
- package/lib/database.d.ts +2 -13
- package/lib/database.js +6 -17
- package/lib/generateImg.d.ts +8 -19
- package/lib/generateImg.js +216 -219
- package/lib/index.d.ts +17 -10
- package/lib/index.js +175 -183
- package/lib/type/index.d.ts +52 -0
- package/lib/type/index.js +11 -0
- package/lib/utils/index.d.ts +13 -0
- package/lib/utils/index.js +102 -0
- package/package.json +4 -5
- package/readme.md +27 -35
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export declare enum LiveType {
|
|
2
|
+
NotLiveBroadcast = 0,
|
|
3
|
+
StartBroadcasting = 1,
|
|
4
|
+
LiveBroadcast = 2,
|
|
5
|
+
StopBroadcast = 3,
|
|
6
|
+
FirstLiveBroadcast = 4
|
|
7
|
+
}
|
|
8
|
+
export type ChannelIdArr = Array<{
|
|
9
|
+
channelId: string;
|
|
10
|
+
dynamic: boolean;
|
|
11
|
+
live: boolean;
|
|
12
|
+
liveGuardBuy: boolean;
|
|
13
|
+
atAll: boolean;
|
|
14
|
+
}>;
|
|
15
|
+
export type TargetItem = {
|
|
16
|
+
channelIdArr: ChannelIdArr;
|
|
17
|
+
platform: string;
|
|
18
|
+
};
|
|
19
|
+
export type Target = Array<TargetItem>;
|
|
20
|
+
export type SubItem = {
|
|
21
|
+
id: number;
|
|
22
|
+
uid: string;
|
|
23
|
+
uname: string;
|
|
24
|
+
roomId: string;
|
|
25
|
+
target: Target;
|
|
26
|
+
platform: string;
|
|
27
|
+
live: boolean;
|
|
28
|
+
dynamic: boolean;
|
|
29
|
+
};
|
|
30
|
+
export type SubManager = Array<SubItem>;
|
|
31
|
+
export type MasterInfo = {
|
|
32
|
+
username: string;
|
|
33
|
+
userface: string;
|
|
34
|
+
roomId: number;
|
|
35
|
+
liveOpenFollowerNum: number;
|
|
36
|
+
liveEndFollowerNum: number;
|
|
37
|
+
liveFollowerChange: number;
|
|
38
|
+
};
|
|
39
|
+
export type LiveUsersItem = {
|
|
40
|
+
face: string;
|
|
41
|
+
is_reserve_recall: boolean;
|
|
42
|
+
jump_url: string;
|
|
43
|
+
mid: number;
|
|
44
|
+
room_id: number;
|
|
45
|
+
title: string;
|
|
46
|
+
uname: string;
|
|
47
|
+
};
|
|
48
|
+
export type LiveUsers = {
|
|
49
|
+
count: number;
|
|
50
|
+
group: string;
|
|
51
|
+
items: Array<LiveUsersItem>;
|
|
52
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LiveType = void 0;
|
|
4
|
+
var LiveType;
|
|
5
|
+
(function (LiveType) {
|
|
6
|
+
LiveType[LiveType["NotLiveBroadcast"] = 0] = "NotLiveBroadcast";
|
|
7
|
+
LiveType[LiveType["StartBroadcasting"] = 1] = "StartBroadcasting";
|
|
8
|
+
LiveType[LiveType["LiveBroadcast"] = 2] = "LiveBroadcast";
|
|
9
|
+
LiveType[LiveType["StopBroadcast"] = 3] = "StopBroadcast";
|
|
10
|
+
LiveType[LiveType["FirstLiveBroadcast"] = 4] = "FirstLiveBroadcast";
|
|
11
|
+
})(LiveType || (exports.LiveType = LiveType = {}));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface RetryOptions {
|
|
2
|
+
attempts: number;
|
|
3
|
+
onFailure?: (error: Error, attempts: number) => Promise<void> | void;
|
|
4
|
+
}
|
|
5
|
+
export declare function Retry(options?: RetryOptions): MethodDecorator;
|
|
6
|
+
/**
|
|
7
|
+
* 高阶函数:为函数添加锁机制
|
|
8
|
+
* @param {Function} fn - 需要包装的原始函数
|
|
9
|
+
* @returns {Function} 带锁功能的函数
|
|
10
|
+
*/
|
|
11
|
+
export declare function withLock(fn: any): (...args: any[]) => void;
|
|
12
|
+
export declare function withRetry<T>(fn: (...args: unknown[]) => T | Promise<T>, maxAttempts?: number, delayMs?: number): Promise<T>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Retry = Retry;
|
|
4
|
+
exports.withLock = withLock;
|
|
5
|
+
exports.withRetry = withRetry;
|
|
6
|
+
function Retry(options = { attempts: 3 }) {
|
|
7
|
+
return (
|
|
8
|
+
// biome-ignore lint/complexity/noBannedTypes: <explanation>
|
|
9
|
+
target, propertyKey,
|
|
10
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
11
|
+
descriptor) => {
|
|
12
|
+
const originalMethod = descriptor.value;
|
|
13
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
14
|
+
descriptor.value = async function (...args) {
|
|
15
|
+
let lastError;
|
|
16
|
+
for (let i = 0; i < options.attempts; i++) {
|
|
17
|
+
try {
|
|
18
|
+
return await originalMethod.apply(this, args);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
lastError = error;
|
|
22
|
+
if (options.onFailure) {
|
|
23
|
+
await options.onFailure.call(this, lastError, i + 1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
28
|
+
throw lastError;
|
|
29
|
+
};
|
|
30
|
+
return descriptor;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 高阶函数:为函数添加锁机制
|
|
35
|
+
* @param {Function} fn - 需要包装的原始函数
|
|
36
|
+
* @returns {Function} 带锁功能的函数
|
|
37
|
+
*/
|
|
38
|
+
function withLock(fn) {
|
|
39
|
+
// 判断是否是异步函数
|
|
40
|
+
const isAsync = fn.constructor.name === "AsyncFunction";
|
|
41
|
+
// 定义锁标志
|
|
42
|
+
let locked = false;
|
|
43
|
+
// 判断是否为异步函数
|
|
44
|
+
if (isAsync) {
|
|
45
|
+
// 变为Promise
|
|
46
|
+
return (...args) => {
|
|
47
|
+
// 已加锁则跳过执行
|
|
48
|
+
if (locked)
|
|
49
|
+
return;
|
|
50
|
+
// 获取锁
|
|
51
|
+
locked = true;
|
|
52
|
+
// 将异步函数转为Promise链
|
|
53
|
+
Promise.resolve(fn(...args))
|
|
54
|
+
.catch((err) => {
|
|
55
|
+
// 打印错误
|
|
56
|
+
console.error("Execution error:", err);
|
|
57
|
+
// 重新抛出错误
|
|
58
|
+
throw err;
|
|
59
|
+
})
|
|
60
|
+
.finally(() => {
|
|
61
|
+
// 确保释放锁
|
|
62
|
+
locked = false;
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// 不是异步函数
|
|
67
|
+
return (...args) => {
|
|
68
|
+
// 已加锁则跳过执行
|
|
69
|
+
if (locked)
|
|
70
|
+
return;
|
|
71
|
+
// 获取锁
|
|
72
|
+
locked = true;
|
|
73
|
+
try {
|
|
74
|
+
// 执行函数
|
|
75
|
+
fn(...args);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
// 打印错误
|
|
79
|
+
console.error("Execution error:", err);
|
|
80
|
+
// 重新抛出错误
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
// 无论成功失败都释放锁
|
|
85
|
+
locked = false;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
async function withRetry(fn, maxAttempts = 3, delayMs = 1000) {
|
|
90
|
+
let attempt = 0;
|
|
91
|
+
while (attempt < maxAttempts) {
|
|
92
|
+
try {
|
|
93
|
+
return await fn();
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
attempt++;
|
|
97
|
+
if (attempt >= maxAttempts)
|
|
98
|
+
throw error;
|
|
99
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs * attempt)); // 指数退避
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-bilibili-notify",
|
|
3
3
|
"description": "Koishi bilibili notify plugin",
|
|
4
|
-
"version": "3.0.0-
|
|
4
|
+
"version": "3.0.0-beta.1",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"Akokko <admin@akokko.com>"
|
|
7
7
|
],
|
|
@@ -34,18 +34,17 @@
|
|
|
34
34
|
"luxon": "^3.5.0",
|
|
35
35
|
"md5": "^2.3.0",
|
|
36
36
|
"qrcode": "^1.5.4",
|
|
37
|
+
"segmentit": "^2.0.3",
|
|
37
38
|
"tough-cookie": "^4.1.4"
|
|
38
39
|
},
|
|
39
40
|
"devDependencies": {
|
|
40
|
-
"@
|
|
41
|
+
"@biomejs/biome": "1.9.4",
|
|
41
42
|
"@types/luxon": "^3.4.2",
|
|
42
43
|
"@types/md5": "^2.3.5",
|
|
43
44
|
"@types/qrcode": "^1.5.5",
|
|
44
45
|
"@types/tough-cookie": "^4.0.5",
|
|
45
|
-
"eslint": "^9.20.0",
|
|
46
46
|
"globals": "^15.14.0",
|
|
47
|
-
"koishi-plugin-puppeteer": "^3.9.0"
|
|
48
|
-
"typescript-eslint": "^7.18.1-alpha.3"
|
|
47
|
+
"koishi-plugin-puppeteer": "^3.9.0"
|
|
49
48
|
},
|
|
50
49
|
"koishi": {
|
|
51
50
|
"service": {
|
package/readme.md
CHANGED
|
@@ -53,43 +53,15 @@
|
|
|
53
53
|
|
|
54
54
|
订阅UP主:订阅你想要推送的UP主
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
- 参数说明:
|
|
58
|
-
- `uid` 为必填参数,为 `up主` 的 `uid`
|
|
59
|
-
- `groupId` 为可选参数,为需要推送的群号/频道号,可输入多个群号
|
|
60
|
-
- 选项说明:`bili sub <uid>` 有四个选项:-l -d -m -a
|
|
61
|
-
- `-l` 为订阅UP主直播间,包括直播开播通知,定时推送直播内容,下播通知
|
|
62
|
-
- `-d` 为订阅UP主动态推送,目前实现推送的动态类型有:普通图文动态,转发动态,直播预约动态
|
|
63
|
-
- `-m` 为多平台动态推送,格式为:群号/频道号,群号/频道号,群号/频道号.平台名;群号/频道号,群号/频道号.平台号。如果群号/频道号为 `all` 代表推送该平台下的所有群聊或/频道。在群号/频道号后加 `@` 则代表这个群聊/频道需要@全体成员。订阅TG群组时请使用 `bili sub xxx -m "xxxxxxx"` 这样的格式
|
|
64
|
-
- `-a` 为是否艾特全体成员,对 `-m` 参数不生效
|
|
65
|
-
|
|
66
|
-
例如:
|
|
67
|
-
`-m 3247293,324389,89874324.qq;EDBWIUBIU.qqguild;79324792,3247892.onebot` 代表推送QQ下3247293,324389,89874324这三个群聊,QQ频道下EDBWIUBIU这个频道,Onebot平台下79324792,3247892这两个群聊
|
|
68
|
-
`-m 3247293,324389@,89874324.qq` 代表推送QQ下3247293,324389,89874324这三个群聊,其中群聊324389需要艾特全体成员
|
|
69
|
-
所有分隔符均为英文符号
|
|
70
|
-
|
|
71
|
-
- 例如:
|
|
72
|
-
- `bili sub 1194210119 ` 订阅UID为1194210119的UP主动态推送和直播间
|
|
73
|
-
- `bili sub 1194210119 -d` 订阅UID为1194210119的UP主动态推送
|
|
74
|
-
- `bili sub 1194210119 -l` 订阅UID为1194210119的UP主直播间
|
|
75
|
-
- `bili sub 1194210119 -m 3247293,324389,89874324.qq;all.onebot;EHUIWDBUAWD.qqguild` 订阅UID为1194210119的UP主,向群号为3247293,324389,89874324的QQ群,所有onebot平台下的群聊,频道号为EHUIWDBUAWD的QQ频道平台进行推送
|
|
76
|
-
- `bili sub 1194210119 -a` 订阅UID为1194210119的UP主动态推送和直播间并艾特全体成员
|
|
77
|
-
|
|
78
|
-
取消订阅UP主:取消订阅不需要推送的UP主
|
|
79
|
-
|
|
80
|
-
- 使用指令 `bili unsub <uid>` 取消订阅不需要订阅的UP主
|
|
81
|
-
- 参数说明:`uid` 为必填参数,为 `up主` 的 `uid`
|
|
82
|
-
- 选项说明:`bili unsub <uid>` 有两个选项:-l 和 -d
|
|
83
|
-
- `-l` 为取消订阅UP主直播间
|
|
84
|
-
- `-d` 为取消订阅UP主动态
|
|
85
|
-
- 例如:
|
|
86
|
-
- `bili unsub 123456` 取消订阅UID为123456的UP主动态推送和直播间
|
|
87
|
-
- `bili unsub 123456 -d` 取消订阅UID为123456的UP主动态推送
|
|
88
|
-
- `bili unsub 123456 -dl` 取消订阅UID为123456的UP主动态推送和直播间
|
|
56
|
+
在插件配置中配置需要订阅的UP主
|
|
89
57
|
|
|
90
58
|
查看目前已订阅的UP主:
|
|
91
59
|
|
|
92
|
-
- 使用指令 `bili
|
|
60
|
+
- 使用指令 `bili list`
|
|
61
|
+
|
|
62
|
+
查看目前订阅直播的UP主们的直播情况:
|
|
63
|
+
|
|
64
|
+
- 使用指令 `bili ll`
|
|
93
65
|
|
|
94
66
|
插件的启动、停止和重启
|
|
95
67
|
|
|
@@ -221,6 +193,24 @@
|
|
|
221
193
|
- ver 3.0.0-alpha.7 修复:`ver 3.0.0-alpha.5` 未能解决的bug; 优化:ba代码结构
|
|
222
194
|
- ver 3.0.0-alpha.8 修复:开播通知连续发送两次,登录后不会加载手动订阅中的订阅; 优化:网络请求报错
|
|
223
195
|
- ver 3.0.0-alpha.9 优化:加强直播推送对获取直播信息的错误处理
|
|
196
|
+
- ver 3.0.0-alpha.10 修复:连续推送两次开播通知
|
|
197
|
+
- ver 3.0.0-alpha.11 新增:直播结束后推送弹幕词云,直播推送上舰消息; 修复:直播推送都是同一张画面; 移除:直播推送弹幕消息
|
|
198
|
+
- ver 3.0.0-alpha.12 修复:上一版本无法安装
|
|
199
|
+
- ver 3.0.0-alpha.13 优化:将ESLint替换为Biome; 修复:增加弹幕词云功能产生的bug; 禁用:弹幕词云功能并不能正常运作,暂时将该功能禁用
|
|
200
|
+
- ver 3.0.0-alpha.14 优化:移除不需要的服务
|
|
201
|
+
- ver 3.0.0-alpha.15 修复:启动插件提示发送群组消息失败、直播推送时间显示为负数(不用再特别设置系统时区为UTC+8)
|
|
202
|
+
- ver 3.0.0-alpha.16 重大更新:订阅不再依赖数据库,从指令订阅全面迁移到配置订阅; 修复:直播时长有误; 优化:`bili show` 指令更改为 `bili list`
|
|
203
|
+
- ver 3.0.0-alpha.17 新增:更多的提示语变量,开播,当前粉丝数。正在直播,累计观看人数。下播,粉丝数变化。选项,新增的提示语变量是否展示到推送卡片中
|
|
204
|
+
- ver 3.0.0-alpha.18 移除:直播检测API模式已被废弃; 优化:更多提示语数据显示优化
|
|
205
|
+
- ver 3.0.0-alpha.19 修复:开播提示语粉丝数单位错误; 优化:订阅配置中所有配置项改为必填项
|
|
206
|
+
- ver 3.0.0-alpha.20 优化:订阅配置中开关选项默认为关闭
|
|
207
|
+
- ver 3.0.0-alpha.21 优化:部分代码; 新增:更新插件后,由于机器人还未启动,已开始发送消息报错 `this._request is not a function` ,新增报错后自动重新发送消息的功能
|
|
208
|
+
- ver 3.0.0-alpha.22 优化:订阅配置展示优化
|
|
209
|
+
- ver 3.0.0-alpha.23 新增:指令 `bili ll` 可以查看当前订阅直播的UP主们的开播情况
|
|
210
|
+
- ver 3.0.0-alpha.24 新增:配置项,`cardBasePlateColor` 和 `cardBasePlateBorder`,分别设置卡片底板颜色和底板边框宽度; 优化:部分代码结构
|
|
211
|
+
- ver 3.0.0-alpha.25 修复:输入指令 `bili ll` 时报错 `TypeError: Cannot read properties of null (reading 'items')`,当某个订阅只订阅动态时无法成功订阅且后续订阅都无法加载; 优化:部分代码结构
|
|
212
|
+
- ver 3.0.0-beta.0 移除:配置项 `renderType`,推送卡片渲染模式 `render`,现默认为 `page` 渲染模式; 优化:部分代码结构
|
|
213
|
+
- ver 3.0.0-beta.1 修复:使用动态屏蔽时,同时开启动态debug模式,当检测到屏蔽动态时会直接报错关闭插件; 新增:配置项 `pushImgsInDynamic` 是否推送动态中的图片,默认不开启。开启后会单独推送动态中的图片,上舰信息直播间提示
|
|
224
214
|
|
|
225
215
|
## 交流群
|
|
226
216
|
|
|
@@ -228,7 +218,9 @@
|
|
|
228
218
|
|
|
229
219
|
## 感谢
|
|
230
220
|
|
|
231
|
-
|
|
221
|
+
[koishijs](https://github.com/koishijs/koishi) 感谢官方提供的插件开发框架, 以及技术指导
|
|
222
|
+
[blive-message-listener](https://github.com/ddiu8081/blive-message-listener) 感谢 `ddiu8081` 提供简单方便的B站直播监听依赖
|
|
223
|
+
[bilibili-API-collect](https://github.com/SocialSisterYi/bilibili-API-collect) 感谢 `SocialSisterYi` 提供B站API参考
|
|
232
224
|
|
|
233
225
|
## License
|
|
234
226
|
|