koishi-plugin-hhs-huatu 0.3.0 → 0.3.2
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/index.d.ts +1 -1
- package/lib/index.js +86 -30
- package/package.json +1 -1
package/lib/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context } from 'koishi';
|
|
2
2
|
import { Config } from './config';
|
|
3
|
-
export declare const usage = "\n## hhs-huatu \u63D2\u4EF6\n\nHHS\u7ED8\u56FE\u63D2\u4EF6\u4EA4\u6D41QQ\u7FA4\uFF1A[112879548](https://qm.qq.com/q/4nKKvckKbu) \u6709\u95EE\u9898\u6B22\u8FCE\u52A0\u7FA4\u8BA8\u8BBA\uFF01\n\n\u672C\u63D2\u4EF6\u57FA\u4E8E\u4F18\u79C0\u7684[novelai-bot](https://bot.novelai.dev/)\u9879\u76EE\u8FDB\u884C\u4E8C\u6B21\u5F00\u53D1\uFF0C\u589E\u6DFB\u591A\u9879\u5B9E\u7528\u529F\u80FD\uFF0C\u63D0\u4F9B\u66F4\u52A0\u667A\u80FD\u3001\u4FBF\u6377\u7684AI\u7ED8\u56FE\u4F53\u9A8C\uFF01\n\n### \u4E3B\u8981\u7279\u8272\n\n- **\u667A\u80FD\u961F\u5217\u7CFB\u7EDF**\uFF1A\u89E3\u51B3\u591A\u4EFB\u52A1\u5E76\u53D1\u65F6\u7684429\u9519\u8BEF\u95EE\u9898\uFF0C\uFF08\u6CE8\u610F\uFF1A\u4F60\u4F7F\u7528\u7684nai\u8D26\u53F7\u9700\u8981\u662F\u72EC\u4EAB\uFF0C\u4E0D\u7136\u4E5F\u662F\u53EF\u80FD\u4F1A\u51FA\u73B0429\u9519\u8BEF\uFF09\n- **\u4F1A\u5458\u7279\u6743\u7CFB\u7EDF**\uFF1A\u4E3A\u91CD\u5EA6\u7528\u6237\u63D0\u4F9B\u66F4\u597D\u4F53\u9A8C\uFF0C\u5305\u62EC\u66F4\u9AD8\u7684\u6BCF\u65E5\u4F7F\u7528\u9650\u5236\u548C\u66F4\u77ED\u7684\u51B7\u5374\u65F6\u95F4\n- **\u56FE\u7247\u5BA1\u6838\u7CFB\u7EDF**\uFF1A\u81EA\u52A8\u8FC7\u6EE4\u4E0D\u5F53\u5185\u5BB9\uFF0C\u652F\u6301\u591A\u79CD\u5BA1\u6838\u7B56\u7565\uFF0C\u4FDD\u969C\u5185\u5BB9\u5B89\u5168\n- **\u652F\u6301\u4EE5\u56FE\u753B\u56FE**\uFF1A\u521D\u6B65\u5BF9nai\u7684\u4EE5\u56FE\u753B\u56FE\u8FDB\u884C\u9002\u914D\uFF0C\u540E\u7EED\u53EF\u80FD\u6301\u7EED\u4F18\u5316\n- **\u4FBF\u6377\u91CD\u753B\u529F\u80FD**\uFF1A\u4E00\u952E\u91CD\u65B0\u751F\u6210\u4E4B\u524D\u7684\u4F5C\u54C1\uFF0C\u652F\u6301\"\u91CD\u753B\"\u3001\"\u91CD\u753B\u4E00\u4E0B\"\u3001\"\u91CD\u753B\u4E24\u5F20\"\u7B49\u591A\u79CD\u6307\u4EE4\u5F62\u5F0F\n- **\u89D2\u8272\u63D0\u793A\u8BCD\u529F\u80FD**\uFF1A\u652F\u6301\u8BBE\u7F6E\u89D2\u8272\u63D0\u793A\u8BCD\uFF0C\u7528\u5F15\u53F7\u5C06\u89D2\u8272\u63D0\u793A\u8BCD\u62EC\u8D77\u6765\uFF0C\u7528\u5206\u53F7 ; \u6216 \uFF1B\u5206\u9694\u89D2\u8272\u3002\u76EE\u524D\u4EC5\u9002\u914Dv4/v4.5\u6A21\u578B\u3002\n### \u89D2\u8272\u63D0\u793A\u8BCD\u529F\u80FD\n\u652F\u6301\u7684\u6A21\u578B\n- \u2705 nai-diffusion-4-curated-preview\n- \u2705 nai-diffusion-4-full \n- \u2705 nai-diffusion-4-5-curated\n- \u2705 nai-diffusion-4-5-full\n-K \u53C2\u6570\u4F7F\u7528\u65B9\u5F0F\nnai4/nai4c/nai4-5/nai4-5c -K \"\u89D2\u82721\u63D0\u793A\u8BCD@\u4F4D\u7F6E1 --uc:\u8D1F\u5411\u63D0\u793A1;\u89D2\u82722\u63D0\u793A\u8BCD@\u4F4D\u7F6E2 --uc:\u8D1F\u5411\u63D0\u793A2\"\n**\u4F4D\u7F6E\u5750\u6807\u8868\uFF085\u00D75\u7F51\u683C\uFF09\uFF1A**\n```\n A B C D E\n1 A1 B1 C1 D1 E1 (\u9876\u90E8)\n2 A2 B2 C2 D2 E2\n3 A3 B3 C3 D3 E3 (\u4E2D\u5FC3)\n4 A4 B4 C4 D4 E4\n5 A5 B5 C5 D5 E5 (\u5E95\u90E8)\n (\u5DE6) (\u53F3)\n```\n\u5DF2\u6CE8\u518C\u6307\u4EE4nai4\uFF0Cnai4c\uFF0Cnai4-5\uFF0Cnai4-5c\uFF0C\u5206\u522B\u53EF\u4EE5\u76F4\u63A5\u8C03\u7528novelai\u4E0D\u540C\u6A21\u578B\n\u65B0\u589E-R\u53C2\u6570\u6307\u4EE4\uFF0C\u7528\u4E8E\u8C03\u6574cfg_rescale\u6570\u503C\uFF08\u53CA\u914D\u7F6E\u4E2Drescale\u7684\u503C\uFF09\u8303\u56F40-1\u3002\n### \u4F7F\u7528\u63D0\u793A\uFF08\u70B9\u51FB\u5F53\u524D\u7248\u672C\u67E5\u770B\u66F4\u591A\u8BF4\u660E\uFF09\n\n\u53D1\u9001\"help nai\"\u67E5\u770B\u57FA\u7840\u6307\u4EE4\uFF0C\"help \u4F1A\u5458\"\u4E86\u89E3\u4F1A\u5458\u76F8\u5173\u529F\u80FD\u3002\n\u7FA4\u5185\u673A\u5668\u4EBA\u5DF2\u642D\u8F7D\u672C\u63D2\u4EF6\uFF0C\u514D\u8D39\u4F53\u9A8C\uFF01\u5982\u679C\u63D2\u4EF6\u6709\u4EFB\u4F55\u95EE\u9898\uFF0C\u6B22\u8FCE\u53CD\u9988\uFF01[112879548](https://qm.qq.com/q/4nKKvckKbu)\n\u63D2\u4EF6\u95EE\u9898\u53EF\u4EE5\u8054\u7CFB\u4F5C\u8005\uFF1Aqq 2275438102\n";
|
|
3
|
+
export declare const usage = "\n## hhs-huatu \u63D2\u4EF6\n\nHHS\u7ED8\u56FE\u63D2\u4EF6\u4EA4\u6D41QQ\u7FA4\uFF1A[112879548](https://qm.qq.com/q/4nKKvckKbu) \u6709\u95EE\u9898\u6B22\u8FCE\u52A0\u7FA4\u8BA8\u8BBA\uFF01\n\n\u672C\u63D2\u4EF6\u57FA\u4E8E\u4F18\u79C0\u7684[novelai-bot](https://bot.novelai.dev/)\u9879\u76EE\u8FDB\u884C\u4E8C\u6B21\u5F00\u53D1\uFF0C\u589E\u6DFB\u591A\u9879\u5B9E\u7528\u529F\u80FD\uFF0C\u63D0\u4F9B\u66F4\u52A0\u667A\u80FD\u3001\u4FBF\u6377\u7684AI\u7ED8\u56FE\u4F53\u9A8C\uFF01\n\n### \u4E3B\u8981\u7279\u8272\n\n- **\u667A\u80FD\u961F\u5217\u7CFB\u7EDF**\uFF1A\u89E3\u51B3\u591A\u4EFB\u52A1\u5E76\u53D1\u65F6\u7684429\u9519\u8BEF\u95EE\u9898\uFF0C\uFF08\u6CE8\u610F\uFF1A\u4F60\u4F7F\u7528\u7684nai\u8D26\u53F7\u9700\u8981\u662F\u72EC\u4EAB\uFF0C\u4E0D\u7136\u4E5F\u662F\u53EF\u80FD\u4F1A\u51FA\u73B0429\u9519\u8BEF\uFF09\n- **\u4F1A\u5458\u7279\u6743\u7CFB\u7EDF**\uFF1A\u4E3A\u91CD\u5EA6\u7528\u6237\u63D0\u4F9B\u66F4\u597D\u4F53\u9A8C\uFF0C\u5305\u62EC\u66F4\u9AD8\u7684\u6BCF\u65E5\u4F7F\u7528\u9650\u5236\u548C\u66F4\u77ED\u7684\u51B7\u5374\u65F6\u95F4\n- **\u56FE\u7247\u5BA1\u6838\u7CFB\u7EDF**\uFF1A\u81EA\u52A8\u8FC7\u6EE4\u4E0D\u5F53\u5185\u5BB9\uFF0C\u652F\u6301\u591A\u79CD\u5BA1\u6838\u7B56\u7565\uFF0C\u4FDD\u969C\u5185\u5BB9\u5B89\u5168\n- **\u652F\u6301\u4EE5\u56FE\u753B\u56FE**\uFF1A\u521D\u6B65\u5BF9nai\u7684\u4EE5\u56FE\u753B\u56FE\u8FDB\u884C\u9002\u914D\uFF0C\u540E\u7EED\u53EF\u80FD\u6301\u7EED\u4F18\u5316\n- **\u4FBF\u6377\u91CD\u753B\u529F\u80FD**\uFF1A\u4E00\u952E\u91CD\u65B0\u751F\u6210\u4E4B\u524D\u7684\u4F5C\u54C1\uFF0C\u652F\u6301\"\u91CD\u753B\"\u3001\"\u91CD\u753B\u4E00\u4E0B\"\u3001\"\u91CD\u753B\u4E24\u5F20\"\u7B49\u591A\u79CD\u6307\u4EE4\u5F62\u5F0F\n- **\u89D2\u8272\u63D0\u793A\u8BCD\u529F\u80FD**\uFF1A\u652F\u6301\u8BBE\u7F6E\u89D2\u8272\u63D0\u793A\u8BCD\uFF0C\u7528\u5F15\u53F7\u5C06\u89D2\u8272\u63D0\u793A\u8BCD\u62EC\u8D77\u6765\uFF0C\u7528\u5206\u53F7 ; \u6216 \uFF1B\u5206\u9694\u89D2\u8272\u3002\u76EE\u524D\u4EC5\u9002\u914Dv4/v4.5\u6A21\u578B\u3002\n- **\u5BFC\u6F14\u5DE5\u5177**\uFF1A\u652F\u6301\u591A\u79CD\u56FE\u50CF\u5904\u7406\u5DE5\u5177\uFF0C\u5305\u62EC\u7EBF\u7A3F\u63D0\u53D6\u3001\u7D20\u63CF\u8F6C\u6362\u3001\u80CC\u666F\u79FB\u9664\u3001\u56FE\u50CF\u4E0A\u8272\u3001\u8868\u60C5\u4FEE\u6539\u3001\u5220\u6587\u5B57\u7B49\u3002\u53D1\u9001\u201Chelp \u5BFC\u6F14\u5DE5\u5177\u201D\u67E5\u770B\u8BE6\u7EC6\u8BF4\u660E\u3002\n### \u89D2\u8272\u63D0\u793A\u8BCD\u529F\u80FD\n\u652F\u6301\u7684\u6A21\u578B\n- \u2705 nai-diffusion-4-curated-preview\n- \u2705 nai-diffusion-4-full \n- \u2705 nai-diffusion-4-5-curated\n- \u2705 nai-diffusion-4-5-full\n-K \u53C2\u6570\u4F7F\u7528\u65B9\u5F0F\nnai4/nai4c/nai4-5/nai4-5c -K \"\u89D2\u82721\u63D0\u793A\u8BCD@\u4F4D\u7F6E1 --uc:\u8D1F\u5411\u63D0\u793A1;\u89D2\u82722\u63D0\u793A\u8BCD@\u4F4D\u7F6E2 --uc:\u8D1F\u5411\u63D0\u793A2\"\n**\u4F4D\u7F6E\u5750\u6807\u8868\uFF085\u00D75\u7F51\u683C\uFF09\uFF1A**\n```\n A B C D E\n1 A1 B1 C1 D1 E1 (\u9876\u90E8)\n2 A2 B2 C2 D2 E2\n3 A3 B3 C3 D3 E3 (\u4E2D\u5FC3)\n4 A4 B4 C4 D4 E4\n5 A5 B5 C5 D5 E5 (\u5E95\u90E8)\n (\u5DE6) (\u53F3)\n```\n\u5DF2\u6CE8\u518C\u6307\u4EE4nai4\uFF0Cnai4c\uFF0Cnai4-5\uFF0Cnai4-5c\uFF0C\u5206\u522B\u53EF\u4EE5\u76F4\u63A5\u8C03\u7528novelai\u4E0D\u540C\u6A21\u578B\n\u65B0\u589E-R\u53C2\u6570\u6307\u4EE4\uFF0C\u7528\u4E8E\u8C03\u6574cfg_rescale\u6570\u503C\uFF08\u53CA\u914D\u7F6E\u4E2Drescale\u7684\u503C\uFF09\u8303\u56F40-1\u3002\n### \u4F7F\u7528\u63D0\u793A\uFF08\u70B9\u51FB\u5F53\u524D\u7248\u672C\u67E5\u770B\u66F4\u591A\u8BF4\u660E\uFF09\n\n\u53D1\u9001\"help nai\"\u67E5\u770B\u57FA\u7840\u6307\u4EE4\uFF0C\"help \u4F1A\u5458\"\u4E86\u89E3\u4F1A\u5458\u76F8\u5173\u529F\u80FD\u3002\n\u7FA4\u5185\u673A\u5668\u4EBA\u5DF2\u642D\u8F7D\u672C\u63D2\u4EF6\uFF0C\u514D\u8D39\u4F53\u9A8C\uFF01\u5982\u679C\u63D2\u4EF6\u6709\u4EFB\u4F55\u95EE\u9898\uFF0C\u6B22\u8FCE\u53CD\u9988\uFF01[112879548](https://qm.qq.com/q/4nKKvckKbu)\n\u63D2\u4EF6\u95EE\u9898\u53EF\u4EE5\u8054\u7CFB\u4F5C\u8005\uFF1Aqq 2275438102\n";
|
|
4
4
|
export * from './config';
|
|
5
5
|
export declare const reactive = true;
|
|
6
6
|
export declare const name = "hhs-huatu";
|
package/lib/index.js
CHANGED
|
@@ -1983,13 +1983,13 @@ var MembershipSystem = class {
|
|
|
1983
1983
|
this.userData[userId] = {
|
|
1984
1984
|
isMember: false,
|
|
1985
1985
|
membershipExpiry: 0,
|
|
1986
|
-
dailyUsage:
|
|
1986
|
+
dailyUsage: drawCount,
|
|
1987
1987
|
lastUsed: now,
|
|
1988
1988
|
dailyLimit: this.config.nonMemberDailyLimit
|
|
1989
1989
|
};
|
|
1990
1990
|
return;
|
|
1991
1991
|
}
|
|
1992
|
-
this.userData[userId].dailyUsage
|
|
1992
|
+
this.userData[userId].dailyUsage += drawCount;
|
|
1993
1993
|
this.userData[userId].lastUsed = now;
|
|
1994
1994
|
this.saveUserData();
|
|
1995
1995
|
}
|
|
@@ -2058,6 +2058,7 @@ HHS绘图插件交流QQ群:[112879548](https://qm.qq.com/q/4nKKvckKbu) 有问
|
|
|
2058
2058
|
- **支持以图画图**:初步对nai的以图画图进行适配,后续可能持续优化
|
|
2059
2059
|
- **便捷重画功能**:一键重新生成之前的作品,支持"重画"、"重画一下"、"重画两张"等多种指令形式
|
|
2060
2060
|
- **角色提示词功能**:支持设置角色提示词,用引号将角色提示词括起来,用分号 ; 或 ;分隔角色。目前仅适配v4/v4.5模型。
|
|
2061
|
+
- **导演工具**:支持多种图像处理工具,包括线稿提取、素描转换、背景移除、图像上色、表情修改、删文字等。发送“help 导演工具”查看详细说明。
|
|
2061
2062
|
### 角色提示词功能
|
|
2062
2063
|
支持的模型
|
|
2063
2064
|
- ✅ nai-diffusion-4-curated-preview
|
|
@@ -2274,7 +2275,7 @@ function apply(ctx, config) {
|
|
|
2274
2275
|
}, "step");
|
|
2275
2276
|
const resolution2 = /* @__PURE__ */ __name((source, session) => {
|
|
2276
2277
|
if (source in orientMap) return orientMap[source];
|
|
2277
|
-
const cap = source.match(/^(\d+)[
|
|
2278
|
+
const cap = source.match(/^(\d+)[x×X*](\d+)$/i);
|
|
2278
2279
|
if (!cap) throw new Error();
|
|
2279
2280
|
const width = closestMultiple(+cap[1]);
|
|
2280
2281
|
const height = closestMultiple(+cap[2]);
|
|
@@ -2916,6 +2917,9 @@ function apply(ctx, config) {
|
|
|
2916
2917
|
__name(getContent, "getContent");
|
|
2917
2918
|
ctx.logger.debug(`${session.uid}: ${finalPrompt}`);
|
|
2918
2919
|
const messageIds = await session.send(getContent());
|
|
2920
|
+
if (config.membershipEnabled) {
|
|
2921
|
+
membershipSystem.incrementUsage(session.userId, 1);
|
|
2922
|
+
}
|
|
2919
2923
|
if (messageIds.length && config.recallTimeout) {
|
|
2920
2924
|
ctx.setTimeout(() => {
|
|
2921
2925
|
for (const id of messageIds) {
|
|
@@ -3486,13 +3490,29 @@ function apply(ctx, config) {
|
|
|
3486
3490
|
]);
|
|
3487
3491
|
});
|
|
3488
3492
|
if (config.memberDebugCommandEnabled) {
|
|
3489
|
-
ctx.command("novelai.member-debug", "会员系统调试指令").userFields(["authority"]).alias("会员调试").option("cleanup", "-c 立即执行会员信息清理").option("remind", "-r 立即执行会员到期提醒").option("status", "-s 查看定时任务状态").action(async ({ session, options: options2 }) => {
|
|
3493
|
+
ctx.command("novelai.member-debug", "会员系统调试指令").userFields(["authority"]).alias("会员调试").option("cleanup", "-c 立即执行会员信息清理").option("remind", "-r 立即执行会员到期提醒").option("status", "-s 查看定时任务状态").option("resetUsage", "-u <userId:string> 重置指定用户的使用次数").action(async ({ session, options: options2 }) => {
|
|
3490
3494
|
if (session.user.authority < config.memberDebugCommandAuthLv) {
|
|
3491
3495
|
return `权限不足,需要权限等级 ${config.memberDebugCommandAuthLv} 或以上`;
|
|
3492
3496
|
}
|
|
3493
3497
|
if (!config.membershipEnabled) {
|
|
3494
3498
|
return "会员系统未启用";
|
|
3495
3499
|
}
|
|
3500
|
+
if (options2.resetUsage) {
|
|
3501
|
+
const targetId = options2.resetUsage;
|
|
3502
|
+
if (!userData[targetId]) {
|
|
3503
|
+
return `用户 ${targetId} 不存在`;
|
|
3504
|
+
}
|
|
3505
|
+
userData[targetId].dailyUsage = 0;
|
|
3506
|
+
await membershipSystem.saveUserData();
|
|
3507
|
+
const user = userData[targetId];
|
|
3508
|
+
const dailyLimit = user.isMember ? config.memberDailyLimit : config.nonMemberDailyLimit;
|
|
3509
|
+
const remaining = dailyLimit - user.dailyUsage;
|
|
3510
|
+
return `✅ 已重置用户 ${targetId} 的使用次数
|
|
3511
|
+
当前状态:${user.isMember ? "会员" : "非会员"}
|
|
3512
|
+
每日限额:${dailyLimit} 次
|
|
3513
|
+
已使用:${user.dailyUsage} 次
|
|
3514
|
+
剩余:${remaining} 次`;
|
|
3515
|
+
}
|
|
3496
3516
|
if (options2.status) {
|
|
3497
3517
|
let statusMsg = "【会员系统状态】\n\n";
|
|
3498
3518
|
if (config.memberCleanupEnabled) {
|
|
@@ -3588,7 +3608,7 @@ function apply(ctx, config) {
|
|
|
3588
3608
|
await membershipSystem.checkAndRemindExpiringMembers();
|
|
3589
3609
|
return "✅ 提醒完成!请查看控制台日志获取详细信息。";
|
|
3590
3610
|
}
|
|
3591
|
-
return "请使用以下选项:\n-c 立即执行会员信息清理\n-r 立即执行会员到期提醒\n-s
|
|
3611
|
+
return "请使用以下选项:\n-c 立即执行会员信息清理\n-r 立即执行会员到期提醒\n-s 查看定时任务状态\n-u 重置指定用户的使用次数";
|
|
3592
3612
|
});
|
|
3593
3613
|
}
|
|
3594
3614
|
if (config.directorToolsEnabled !== false) {
|
|
@@ -3688,6 +3708,11 @@ NovelAI Director Tools 图像处理工具
|
|
|
3688
3708
|
• emotion - 表情修改(需要指定表情)
|
|
3689
3709
|
• declutter - 删文字
|
|
3690
3710
|
|
|
3711
|
+
发送图片的方式:
|
|
3712
|
+
✅ 直接发送:[图片] + 指令
|
|
3713
|
+
✅ 回复图片:回复包含图片的消息 + 指令
|
|
3714
|
+
✅ 等待发送:先发送指令,再发送图片(60秒内)
|
|
3715
|
+
|
|
3691
3716
|
使用方法:
|
|
3692
3717
|
1. 基础工具(无需额外参数):
|
|
3693
3718
|
线稿 [图片]
|
|
@@ -3746,9 +3771,43 @@ NovelAI Director Tools 图像处理工具
|
|
|
3746
3771
|
return "";
|
|
3747
3772
|
}
|
|
3748
3773
|
})).toString(true);
|
|
3774
|
+
if (!imgUrl && session.quote) {
|
|
3775
|
+
import_koishi4.h.transform(import_koishi4.h.parse(session.quote.content), {
|
|
3776
|
+
img(attrs) {
|
|
3777
|
+
imgUrl = attrs.src;
|
|
3778
|
+
return "";
|
|
3779
|
+
}
|
|
3780
|
+
});
|
|
3781
|
+
if (config.debugLog && imgUrl) {
|
|
3782
|
+
ctx.logger.info(`[Director Tools] 从引用消息中提取到图片`);
|
|
3783
|
+
}
|
|
3784
|
+
}
|
|
3749
3785
|
if (!imgUrl) {
|
|
3750
|
-
ctx.logger.
|
|
3751
|
-
|
|
3786
|
+
ctx.logger.info("[Director Tools] 消息中未找到图片,等待用户发送");
|
|
3787
|
+
const promptMsg = await session.send("请60s内发送图片");
|
|
3788
|
+
try {
|
|
3789
|
+
const userInput = await session.prompt(6e4);
|
|
3790
|
+
if (!userInput) {
|
|
3791
|
+
ctx.logger.warn("[Director Tools] 用户超时未发送图片");
|
|
3792
|
+
return "⏱️ 超时未收到图片,操作已取消";
|
|
3793
|
+
}
|
|
3794
|
+
import_koishi4.h.transform(import_koishi4.h.parse(userInput), {
|
|
3795
|
+
img(attrs) {
|
|
3796
|
+
imgUrl = attrs.src;
|
|
3797
|
+
return "";
|
|
3798
|
+
}
|
|
3799
|
+
});
|
|
3800
|
+
if (!imgUrl) {
|
|
3801
|
+
ctx.logger.warn("[Director Tools] 用户发送的消息中没有图片");
|
|
3802
|
+
return "❌ 未检测到图片,操作已取消\n\n请确保发送的是图片消息";
|
|
3803
|
+
}
|
|
3804
|
+
if (config.debugLog) {
|
|
3805
|
+
ctx.logger.info(`[Director Tools] 从用户发送的消息中提取到图片`);
|
|
3806
|
+
}
|
|
3807
|
+
} catch (err) {
|
|
3808
|
+
ctx.logger.error(`[Director Tools] 等待用户输入时出错: ${err.message}`);
|
|
3809
|
+
return "❌ 等待图片时出错,操作已取消";
|
|
3810
|
+
}
|
|
3752
3811
|
}
|
|
3753
3812
|
let cleanedPrompt = cleanedInput.replace(/^(director|导演工具)\s+/i, "").replace(/^(director\.\w+|表情|改表情|上色|线稿|素描|去背景|移除背景|去杂乱|清理图片|删文字|提取线稿|转素描)\s*/i, "").trim();
|
|
3754
3813
|
if (config.debugLog) {
|
|
@@ -4018,6 +4077,9 @@ defry 仅用于 colorize 和 emotion 工具`;
|
|
|
4018
4077
|
try {
|
|
4019
4078
|
await executeDirectorTask();
|
|
4020
4079
|
queueSystem.userTasks[userId]--;
|
|
4080
|
+
if (config.membershipEnabled) {
|
|
4081
|
+
membershipSystem.incrementUsage(userId, 1);
|
|
4082
|
+
}
|
|
4021
4083
|
resolveTask(void 0);
|
|
4022
4084
|
if (config.debugLog) {
|
|
4023
4085
|
ctx.logger.info(`[Director Tools] 任务执行成功`);
|
|
@@ -4043,39 +4105,32 @@ defry 仅用于 colorize 和 emotion 工具`;
|
|
|
4043
4105
|
executeWhenReady();
|
|
4044
4106
|
});
|
|
4045
4107
|
});
|
|
4046
|
-
ctx.command("director.lineart", "提取线稿").alias("线稿", "提取线稿").userFields(["authority"]).usage("从图像中提取线稿\n\n
|
|
4047
|
-
const inputContent = session.content || "";
|
|
4048
|
-
let imgUrl;
|
|
4049
|
-
import_koishi4.h.transform(import_koishi4.h.parse(inputContent), {
|
|
4050
|
-
img(attrs) {
|
|
4051
|
-
imgUrl = attrs.src;
|
|
4052
|
-
return "";
|
|
4053
|
-
}
|
|
4054
|
-
});
|
|
4055
|
-
if (!imgUrl) {
|
|
4056
|
-
return "❌ 请发送图片\n\n例如:[图片] 线稿";
|
|
4057
|
-
}
|
|
4108
|
+
ctx.command("director.lineart", "提取线稿").alias("线稿", "提取线稿").userFields(["authority"]).usage("从图像中提取线稿\n\n使用方法:\n• [图片] 线稿\n• 回复图片消息发送:线稿\n• 先发送指令:线稿(然后发图)").action(({ session }) => {
|
|
4058
4109
|
return session.execute(`director lineart`);
|
|
4059
4110
|
});
|
|
4060
|
-
ctx.command("director.sketch", "转换为素描").alias("素描", "转素描").userFields(["authority"]).usage("将图像转换为素描风格\n\n
|
|
4111
|
+
ctx.command("director.sketch", "转换为素描").alias("素描", "转素描").userFields(["authority"]).usage("将图像转换为素描风格\n\n使用方法:\n• [图片] 素描\n• 回复图片消息发送:素描\n• 先发送指令:素描(然后发图)").action(({ session }) => {
|
|
4061
4112
|
return session.execute(`director sketch`);
|
|
4062
4113
|
});
|
|
4063
|
-
ctx.command("director.bg-removal", "移除背景").alias("移除背景", "去背景").userFields(["authority"]).usage("移除图像背景(消耗较多 Anlas,需要启用)\n\n
|
|
4114
|
+
ctx.command("director.bg-removal", "移除背景").alias("移除背景", "去背景").userFields(["authority"]).usage("移除图像背景(消耗较多 Anlas,需要启用)\n\n使用方法:\n• [图片] 去背景\n• 回复图片消息发送:去背景\n• 先发送指令:去背景(然后发图)").action(({ session }) => {
|
|
4064
4115
|
if (config.directorToolsBgRemovalEnabled !== true) {
|
|
4065
4116
|
return "❌ 背景移除功能未启用\n\n该功能消耗较多 Anlas,需要管理员在配置中启用\n配置项:directorToolsBgRemovalEnabled: true";
|
|
4066
4117
|
}
|
|
4067
4118
|
return session.execute(`director bg-removal`);
|
|
4068
4119
|
});
|
|
4069
|
-
ctx.command("director.declutter", "去除杂乱元素").alias("去杂乱", "清理图片", "删文字").userFields(["authority"]).usage("去除图像中的杂乱元素\n\n
|
|
4120
|
+
ctx.command("director.declutter", "去除杂乱元素").alias("去杂乱", "清理图片", "删文字").userFields(["authority"]).usage("去除图像中的杂乱元素\n\n使用方法:\n• [图片] 删文字\n• 回复图片消息发送:删文字\n• 先发送指令:删文字(然后发图)").action(({ session }) => {
|
|
4070
4121
|
return session.execute(`director declutter`);
|
|
4071
4122
|
});
|
|
4072
4123
|
ctx.command("director.colorize [prompt:text]", "图像上色").alias("上色").userFields(["authority"]).option("defry", "-d <defry:number>", { fallback: config.directorToolsDefaultDefry ?? 0 }).usage(`
|
|
4073
4124
|
为图像上色(提示词可选)
|
|
4074
4125
|
|
|
4075
4126
|
使用方法:
|
|
4076
|
-
|
|
4077
|
-
|
|
4078
|
-
|
|
4127
|
+
• [图片] 上色
|
|
4128
|
+
• 上色 [tags] [图片]
|
|
4129
|
+
• 上色 -d 2 [tags] # 然后发送图片
|
|
4130
|
+
• 回复图片消息发送:上色 [tags]
|
|
4131
|
+
|
|
4132
|
+
参数说明:
|
|
4133
|
+
-d <0-5> 调整强度,值越高变化越小
|
|
4079
4134
|
`).action(({ session, options: options2 }, prompt) => {
|
|
4080
4135
|
const defryArg = options2.defry !== (config.directorToolsDefaultDefry ?? 0) ? ` -d ${options2.defry}` : "";
|
|
4081
4136
|
if (prompt) {
|
|
@@ -4085,16 +4140,17 @@ defry 仅用于 colorize 和 emotion 工具`;
|
|
|
4085
4140
|
}
|
|
4086
4141
|
});
|
|
4087
4142
|
ctx.command("director.emotion <emotion:text>", "表情修改").alias("改表情").userFields(["authority"]).option("defry", "-d <defry:number>", { fallback: config.directorToolsDefaultDefry ?? 0 }).usage(`
|
|
4088
|
-
|
|
4143
|
+
修改角色表情
|
|
4089
4144
|
|
|
4090
4145
|
支持的表情:
|
|
4091
4146
|
平静、开心、伤心、生气、害怕、吃惊、疲惫、兴奋、紧张、思考、困惑、害羞、
|
|
4092
4147
|
厌恶、得意、无聊、大笑、恼怒、激情、尴尬、担心、爱意、坚定、受伤、调皮
|
|
4093
4148
|
|
|
4094
4149
|
使用方法:
|
|
4095
|
-
|
|
4096
|
-
|
|
4097
|
-
|
|
4150
|
+
• [图片] 改表情 开心
|
|
4151
|
+
• 改表情 happy # 然后发送图片
|
|
4152
|
+
• 改表情 happy -d 1 [图片]
|
|
4153
|
+
• 回复图片消息发送:改表情 开心
|
|
4098
4154
|
|
|
4099
4155
|
参数说明:
|
|
4100
4156
|
-d <0-5> 值越高变化越小,更保留原表情
|
|
@@ -4105,7 +4161,7 @@ defry 仅用于 colorize 和 emotion 工具`;
|
|
|
4105
4161
|
支持的表情:
|
|
4106
4162
|
${Object.keys(EMOTION_MAP).join("、")}
|
|
4107
4163
|
|
|
4108
|
-
|
|
4164
|
+
例如:改表情 开心`;
|
|
4109
4165
|
}
|
|
4110
4166
|
const defryArg = options2.defry !== (config.directorToolsDefaultDefry ?? 0) ? ` -d ${options2.defry}` : "";
|
|
4111
4167
|
return session.execute(`director emotion ${emotion}${defryArg}`);
|