chore: format

This commit is contained in:
xiaojunnuo
2026-05-31 01:41:33 +08:00
parent acd440106b
commit 4b57a0d729
557 changed files with 12530 additions and 14039 deletions
@@ -1,135 +1,131 @@
import { BaseNotification, IsNotification, NotificationBody, NotificationInput } from "@certd/pipeline";
import axios from "axios";
/**
* 文档: https://github.com/botuniverse/onebot-11
* 教程: https://ayakasuki.com/
*/
@IsNotification({
name: 'onebot',
title: 'OneBot V11 通知',
desc: '通过动态拼接URL发送 OneBot V11 协议消息',
needPlus: false,
})
export class OneBotNotification extends BaseNotification {
// 基础服务地址(不含路径)
@NotificationInput({
title: '服务地址',
component: {
placeholder: 'http://xxxx.xxxx.xxxx',
},
helper: 'OneBot 服务的基础地址(不包含action路径)',
required: true,
rules: [
{
type: 'url',
message: '请输入有效的HTTP/HTTPS地址'
}
]
})
baseUrl = '';
// 目标类型选择
@NotificationInput({
title: '目标类型',
component: {
name: 'a-select',
options: [
{ value: 'group', label: '群聊' },
{ value: 'private', label: '私聊' },
],
},
required: true,
helper: '选择消息发送的目标类型',
})
targetType = 'group';
// 目标ID配置
@NotificationInput({
title: '目标ID',
component: {
name: 'a-input-number',
placeholder: '123456789',
},
helper: '群聊ID或用户ID(纯数字)',
required: true,
})
targetId = '';
// 鉴权密钥(非必填)
@NotificationInput({
title: '鉴权密钥',
component: {
placeholder: 'xxxxxxxxxx',
},
helper: '(选填)访问API的授权令牌(无token时留空)',
required: false, // 关键修改点
})
accessToken = '';
// 构建完整请求URL(支持无token场景)
private buildFullUrl(): string {
const action = this.targetType === 'group'
? 'send_group_msg'
: 'send_private_msg';
let url = `${this.baseUrl}/${action}`;
// 动态添加access_token参数(仅当存在时)
if (this.accessToken) {
url += `?access_token=${encodeURIComponent(this.accessToken)}`;
}
return url;
}
// 构建消息内容
private buildMessage(body: NotificationBody): string {
return body.title
? `${body.title}\n${body.content}`
: body.content;
}
// 构建请求体(动态字段)
private buildRequestBody(body: NotificationBody): object {
return {
[this.targetType === 'group' ? 'group_id' : 'user_id']: Number(this.targetId),
message: this.buildMessage(body),
auto_escape: false
};
}
// 发送通知主逻辑
async send(body: NotificationBody) {
const fullUrl = this.buildFullUrl();
const requestBody = this.buildRequestBody(body);
try {
console.debug("[ONEBOT] 最终请求URL:", fullUrl);
console.debug("[ONEBOT] 请求体:", JSON.stringify(requestBody));
console.debug("[ONEBOT] 使用Token:", !!this.accessToken); // 明确token使用状态
const response = await axios.post(fullUrl, requestBody, {
timeout: 5000,
headers: {
'Content-Type': 'application/json',
'User-Agent': 'Certd-Notification/1.0'
}
});
// 响应验证(保持不变)
if (response.data?.retcode !== 0) {
throw new Error(`[${response.data.retcode}] ${response.data.message}`);
}
return response.data;
} catch (error) {
console.error('[ONEBOT] 请求失败:', {
url: fullUrl,
tokenUsed: !!this.accessToken, // 记录token使用状态
error: error.response?.data || error.message
});
throw new Error(`OneBot通知发送失败: ${error.message}`);
}
}
}
import { BaseNotification, IsNotification, NotificationBody, NotificationInput } from "@certd/pipeline";
import axios from "axios";
/**
* 文档: https://github.com/botuniverse/onebot-11
* 教程: https://ayakasuki.com/
*/
@IsNotification({
name: "onebot",
title: "OneBot V11 通知",
desc: "通过动态拼接URL发送 OneBot V11 协议消息",
needPlus: false,
})
export class OneBotNotification extends BaseNotification {
// 基础服务地址(不含路径)
@NotificationInput({
title: "服务地址",
component: {
placeholder: "http://xxxx.xxxx.xxxx",
},
helper: "OneBot 服务的基础地址(不包含action路径)",
required: true,
rules: [
{
type: "url",
message: "请输入有效的HTTP/HTTPS地址",
},
],
})
baseUrl = "";
// 目标类型选择
@NotificationInput({
title: "目标类型",
component: {
name: "a-select",
options: [
{ value: "group", label: "群聊" },
{ value: "private", label: "私聊" },
],
},
required: true,
helper: "选择消息发送的目标类型",
})
targetType = "group";
// 目标ID配置
@NotificationInput({
title: "目标ID",
component: {
name: "a-input-number",
placeholder: "123456789",
},
helper: "群聊ID或用户ID(纯数字)",
required: true,
})
targetId = "";
// 鉴权密钥(非必填)
@NotificationInput({
title: "鉴权密钥",
component: {
placeholder: "xxxxxxxxxx",
},
helper: "(选填)访问API的授权令牌(无token时留空)",
required: false, // 关键修改点
})
accessToken = "";
// 构建完整请求URL(支持无token场景)
private buildFullUrl(): string {
const action = this.targetType === "group" ? "send_group_msg" : "send_private_msg";
let url = `${this.baseUrl}/${action}`;
// 动态添加access_token参数(仅当存在时)
if (this.accessToken) {
url += `?access_token=${encodeURIComponent(this.accessToken)}`;
}
return url;
}
// 构建消息内容
private buildMessage(body: NotificationBody): string {
return body.title ? `${body.title}\n${body.content}` : body.content;
}
// 构建请求体(动态字段)
private buildRequestBody(body: NotificationBody): object {
return {
[this.targetType === "group" ? "group_id" : "user_id"]: Number(this.targetId),
message: this.buildMessage(body),
auto_escape: false,
};
}
// 发送通知主逻辑
async send(body: NotificationBody) {
const fullUrl = this.buildFullUrl();
const requestBody = this.buildRequestBody(body);
try {
console.debug("[ONEBOT] 最终请求URL:", fullUrl);
console.debug("[ONEBOT] 请求体:", JSON.stringify(requestBody));
console.debug("[ONEBOT] 使用Token:", !!this.accessToken); // 明确token使用状态
const response = await axios.post(fullUrl, requestBody, {
timeout: 5000,
headers: {
"Content-Type": "application/json",
"User-Agent": "Certd-Notification/1.0",
},
});
// 响应验证(保持不变)
if (response.data?.retcode !== 0) {
throw new Error(`[${response.data.retcode}] ${response.data.message}`);
}
return response.data;
} catch (error) {
console.error("[ONEBOT] 请求失败:", {
url: fullUrl,
tokenUsed: !!this.accessToken, // 记录token使用状态
error: error.response?.data || error.message,
});
throw new Error(`OneBot通知发送失败: ${error.message}`);
}
}
}