koishi-plugin-comic 1.0.1 → 1.0.3

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 CHANGED
@@ -1,57 +1,22 @@
1
1
  import { Context, Schema } from 'koishi';
2
- declare module 'koishi' {
3
- interface Context {
4
- chatluna?: {
5
- platform: {
6
- registerTool(name: string, options: any): void;
7
- };
8
- };
9
- }
10
- }
11
- export declare const inject: {
12
- required: string[];
13
- optional: string[];
14
- };
15
- export declare const usage = "\n<h2>\u805A\u5408\u6F2B\u753B\u641C\u7D22\u4E0E\u4E0B\u8F7D\u63D2\u4EF6</h2>\n<p>\u4F7F\u7528\u524D\u8BF7\u5148\u90E8\u7F72 <a href=\"https://github.com/lumia1998/comic-api\">comic-api</a> \u540E\u7AEF\u670D\u52A1</p>\n<p>\u652F\u6301\u7981\u6F2B\u5929\u5802(JM)\u548C\u54D4\u5494\u6F2B\u753B(Bika)\u53CC\u5E73\u53F0\u805A\u5408\u641C\u7D22</p>\n\n<h3>ChatLuna \u5DE5\u5177</h3>\n<p>\u5B89\u88C5 chatluna \u540E\u81EA\u52A8\u6CE8\u518C <code>comic</code> \u5DE5\u5177\uFF0CLLM \u53EF\u76F4\u63A5\u8C03\u7528\u641C\u7D22\u3001\u4E0B\u8F7D\u3001\u6392\u884C\u699C\u7B49\u529F\u80FD\u3002</p>\n\n<h3>\u547D\u4EE4\u5217\u8868</h3>\n<ul>\n <li><code>comic search &lt;\u5173\u952E\u8BCD&gt;</code> - \u805A\u5408\u641C\u7D22\u6F2B\u753B</li>\n <li><code>comic download &lt;jm|bika&gt; &lt;ID&gt; [\u7AE0\u8282ID]</code> - \u4E0B\u8F7D\u6F2B\u753BPDF</li>\n <li><code>comic detail &lt;jm|bika&gt; &lt;ID&gt;</code> - \u67E5\u770B\u6F2B\u753B\u8BE6\u60C5</li>\n <li><code>comic leaderboard [jm|bika] [day|week|month|total]</code> - \u6392\u884C\u699C</li>\n <li><code>comic category &lt;jm|bika&gt; &lt;\u5206\u7C7B\u540D&gt;</code> - \u5206\u7C7B\u6D4F\u89C8</li>\n <li><code>comic latest [jm|bika]</code> - \u6700\u8FD1\u66F4\u65B0</li>\n <li><code>comic random [jm|bika]</code> - \u968F\u673A\u63A8\u8350</li>\n</ul>\n";
2
+ export declare const inject: string[];
3
+ export declare const usage = "\n<h2>\u805A\u5408\u6F2B\u753B\u641C\u7D22\u4E0E\u4E0B\u8F7D\u63D2\u4EF6</h2>\n<p>\u4F7F\u7528\u524D\u8BF7\u5148\u90E8\u7F72 <a href=\"https://github.com/lumia1998/comic-api\">comic-api</a> \u540E\u7AEF\u670D\u52A1</p>\n<p>\u652F\u6301\u7981\u6F2B\u5929\u5802(JM)\u548C\u54D4\u5494\u6F2B\u753B(Bika)\u53CC\u5E73\u53F0\u805A\u5408\u641C\u7D22</p>\n<h3>\u547D\u4EE4\u5217\u8868</h3>\n<ul>\n <li><code>comic [\u5173\u952E\u8BCD]</code> - \u805A\u5408\u641C\u7D22/\u76F4\u63A5\u4E0B\u8F7D\u6F2B\u753B</li>\n <li><code>comic search &lt;\u5173\u952E\u8BCD&gt;</code> - \u805A\u5408\u641C\u7D22\u6F2B\u753B</li>\n <li><code>comic download &lt;ID&gt; [\u7AE0\u8282ID]</code> - \u4E0B\u8F7D\u6F2B\u753BPDF</li>\n <li><code>comic detail &lt;ID&gt;</code> - \u67E5\u770B\u6F2B\u753B\u8BE6\u60C5</li>\n <li><code>comic leaderboard [\u7C7B\u578B]</code> - \u6392\u884C\u699C</li>\n <li><code>comic category &lt;\u5206\u7C7B\u540D&gt;</code> - \u5206\u7C7B\u6D4F\u89C8</li>\n <li><code>comic latest</code> - \u6700\u8FD1\u66F4\u65B0</li>\n <li><code>comic random</code> - \u968F\u673A\u63A8\u8350</li>\n</ul>\n";
16
4
  export interface Config {
17
5
  apiBase: string;
18
- defaultSource: string;
19
6
  concurrency: number;
20
7
  logInfo: boolean;
21
- tool: {
22
- enabled: boolean;
23
- name: string;
24
- description: string;
25
- };
8
+ pdfPassword?: string;
26
9
  }
27
10
  export declare const Config: Schema<Schemastery.ObjectS<{
28
11
  apiBase: Schema<string, string>;
29
- defaultSource: Schema<"jm" | "bika", "jm" | "bika">;
30
12
  concurrency: Schema<number, number>;
31
13
  logInfo: Schema<boolean, boolean>;
32
- tool: Schema<Schemastery.ObjectS<{
33
- enabled: Schema<boolean, boolean>;
34
- name: Schema<string, string>;
35
- description: Schema<string, string>;
36
- }>, Schemastery.ObjectT<{
37
- enabled: Schema<boolean, boolean>;
38
- name: Schema<string, string>;
39
- description: Schema<string, string>;
40
- }>>;
14
+ pdfPassword: Schema<string, string>;
41
15
  }>, Schemastery.ObjectT<{
42
16
  apiBase: Schema<string, string>;
43
- defaultSource: Schema<"jm" | "bika", "jm" | "bika">;
44
17
  concurrency: Schema<number, number>;
45
18
  logInfo: Schema<boolean, boolean>;
46
- tool: Schema<Schemastery.ObjectS<{
47
- enabled: Schema<boolean, boolean>;
48
- name: Schema<string, string>;
49
- description: Schema<string, string>;
50
- }>, Schemastery.ObjectT<{
51
- enabled: Schema<boolean, boolean>;
52
- name: Schema<string, string>;
53
- description: Schema<string, string>;
54
- }>>;
19
+ pdfPassword: Schema<string, string>;
55
20
  }>>;
56
21
  export declare function apply(ctx: Context, config: Config): void;
57
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAK,MAAM,QAAQ,CAAA;AAI3C,OAAO,QAAQ,QAAQ,CAAC;IACtB,UAAU,OAAO;QACf,QAAQ,CAAC,EAAE;YACT,QAAQ,EAAE;gBACR,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAAA;aAC/C,CAAA;SACF,CAAA;KACF;CACF;AAED,eAAO,MAAM,MAAM;;;CAGlB,CAAA;AAED,eAAO,MAAM,KAAK,8yCAkBjB,CAAA;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoBjB,CAAA;AAqLF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAwajD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAc,MAAM,QAAQ,CAAA;AAOpD,eAAO,MAAM,MAAM,UAAW,CAAA;AAE9B,eAAO,MAAM,KAAK,qlCAejB,CAAA;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,MAAM;;;;;;;;;;GAYjB,CAAA;AAsEF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAibjD"}
package/lib/index.js CHANGED
@@ -1,54 +1,101 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.Config = exports.usage = exports.inject = void 0;
4
37
  exports.apply = apply;
5
38
  const koishi_1 = require("koishi");
6
- const tools_1 = require("@langchain/core/tools");
7
- const zod_1 = require("zod");
8
- exports.inject = {
9
- required: ['http'],
10
- optional: ['chatluna']
11
- };
12
- exports.usage = `
13
- <h2>聚合漫画搜索与下载插件</h2>
14
- <p>使用前请先部署 <a href="https://github.com/lumia1998/comic-api">comic-api</a> 后端服务</p>
15
- <p>支持禁漫天堂(JM)和哔咔漫画(Bika)双平台聚合搜索</p>
16
-
17
- <h3>ChatLuna 工具</h3>
18
- <p>安装 chatluna 后自动注册 <code>comic</code> 工具,LLM 可直接调用搜索、下载、排行榜等功能。</p>
19
-
20
- <h3>命令列表</h3>
21
- <ul>
22
- <li><code>comic search &lt;关键词&gt;</code> - 聚合搜索漫画</li>
23
- <li><code>comic download &lt;jm|bika&gt; &lt;ID&gt; [章节ID]</code> - 下载漫画PDF</li>
24
- <li><code>comic detail &lt;jm|bika&gt; &lt;ID&gt;</code> - 查看漫画详情</li>
25
- <li><code>comic leaderboard [jm|bika] [day|week|month|total]</code> - 排行榜</li>
26
- <li><code>comic category &lt;jm|bika&gt; &lt;分类名&gt;</code> - 分类浏览</li>
27
- <li><code>comic latest [jm|bika]</code> - 最近更新</li>
28
- <li><code>comic random [jm|bika]</code> - 随机推荐</li>
29
- </ul>
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const os = __importStar(require("os"));
42
+ const url_1 = require("url");
43
+ const crypto_1 = require("crypto");
44
+ exports.inject = ['http'];
45
+ exports.usage = `
46
+ <h2>聚合漫画搜索与下载插件</h2>
47
+ <p>使用前请先部署 <a href="https://github.com/lumia1998/comic-api">comic-api</a> 后端服务</p>
48
+ <p>支持禁漫天堂(JM)和哔咔漫画(Bika)双平台聚合搜索</p>
49
+ <h3>命令列表</h3>
50
+ <ul>
51
+ <li><code>comic [关键词]</code> - 聚合搜索/直接下载漫画</li>
52
+ <li><code>comic search &lt;关键词&gt;</code> - 聚合搜索漫画</li>
53
+ <li><code>comic download &lt;ID&gt; [章节ID]</code> - 下载漫画PDF</li>
54
+ <li><code>comic detail &lt;ID&gt;</code> - 查看漫画详情</li>
55
+ <li><code>comic leaderboard [类型]</code> - 排行榜</li>
56
+ <li><code>comic category &lt;分类名&gt;</code> - 分类浏览</li>
57
+ <li><code>comic latest</code> - 最近更新</li>
58
+ <li><code>comic random</code> - 随机推荐</li>
59
+ </ul>
30
60
  `;
31
61
  exports.Config = koishi_1.Schema.object({
32
62
  apiBase: koishi_1.Schema.string()
33
63
  .description('comic-api 后端地址')
34
64
  .default('http://127.0.0.1:8699'),
35
- defaultSource: koishi_1.Schema.union(['jm', 'bika'])
36
- .description('默认漫画源')
37
- .default('jm'),
38
65
  concurrency: koishi_1.Schema.number()
39
66
  .description('下载并发数')
40
67
  .default(4),
41
68
  logInfo: koishi_1.Schema.boolean()
42
69
  .description('打印 API 调用日志')
43
70
  .default(false),
44
- tool: koishi_1.Schema.object({
45
- enabled: koishi_1.Schema.boolean().default(true).description('开启后自动注册 ChatLuna 工具'),
46
- name: koishi_1.Schema.string().default('comic').description('工具名称'),
47
- description: koishi_1.Schema.string()
48
- .default('漫画搜索与下载工具。支持禁漫天堂(JM)和哔咔漫画(Bika)双平台聚合搜索、查看详情、下载PDF、排行榜、分类浏览、最近更新、随机推荐。')
49
- .description('工具描述')
50
- }).description('ChatLuna 工具设置')
71
+ pdfPassword: koishi_1.Schema.string()
72
+ .description('PDF 统一加密密码 (留空则使用动态生成的6位密码并自动提示)'),
51
73
  });
74
+ function getPdfPassword(source, comicId, chapterId) {
75
+ const src = source.trim().toLowerCase();
76
+ const seed = `${src}:${comicId}:${chapterId}`;
77
+ const hash = (0, crypto_1.createHash)('sha256').update(seed).digest('hex');
78
+ const value = parseInt(hash.slice(0, 12), 16) % 1000000;
79
+ return value.toString().padStart(6, '0');
80
+ }
81
+ function sanitizeFilename(name) {
82
+ return name.replace(/[\\/:*?"<>|]/g, '_').replace(/\s+/g, '').replace(/_+/g, '_').replace(/^_+|_+$/g, '') || 'comic';
83
+ }
84
+ function determineSource(id) {
85
+ const clean = id.trim();
86
+ const hasJm = /jm/i.test(clean) || /禁漫/i.test(clean);
87
+ const digitMatch = clean.match(/\d+/);
88
+ if (hasJm && digitMatch) {
89
+ return { source: 'jm', id: digitMatch[0] };
90
+ }
91
+ if (/^\d+$/.test(clean)) {
92
+ return { source: 'jm', id: clean };
93
+ }
94
+ if (/^[0-9a-fA-F]{24}$/.test(clean)) {
95
+ return { source: 'bika', id: clean };
96
+ }
97
+ return null;
98
+ }
52
99
  function formatComics(comics, sourceLabel = '') {
53
100
  if (!comics || comics.length === 0)
54
101
  return '没有找到相关漫画。';
@@ -57,136 +104,6 @@ function formatComics(comics, sourceLabel = '') {
57
104
  return `${i + 1}. [${src}|${c.id}] ${c.title} 作者:${c.author || '佚名'}`;
58
105
  }).join('\n');
59
106
  }
60
- const comicToolSchema = zod_1.z.object({
61
- action: zod_1.z.enum(['search', 'detail', 'leaderboard', 'category', 'latest', 'random'])
62
- .describe('操作类型:search=搜索, detail=详情, leaderboard=排行榜, category=分类, latest=最近更新, random=随机推荐'),
63
- keyword: zod_1.z.string().optional()
64
- .describe('搜索关键词(action=search 时必填)'),
65
- source: zod_1.z.enum(['jm', 'bika']).optional()
66
- .describe('漫画源:jm=禁漫天堂, bika=哔咔漫画。不填则使用默认源'),
67
- comic_id: zod_1.z.string().optional()
68
- .describe('漫画ID(action=detail 时必填)'),
69
- mode: zod_1.z.enum(['day', 'week', 'month', 'total']).optional()
70
- .describe('排行榜时间维度(action=leaderboard 时使用):day=日榜, week=周榜, month=月榜, total=总榜'),
71
- category_name: zod_1.z.string().optional()
72
- .describe('分类名称(action=category 时必填)。禁漫分类: latest/doujin/single/short/hanman/meishi/cosplay/3d。哔咔分类: 嗶咔漢化/同人/全彩/少女漫畫/耽美/妹子/治癒/都市/冒險'),
73
- page: zod_1.z.number().int().min(1).optional()
74
- .describe('页码(action=leaderboard/category/latest 时使用),默认1')
75
- });
76
- class ComicTool extends tools_1.StructuredTool {
77
- constructor(ctx, cfg) {
78
- super({});
79
- this.ctx = ctx;
80
- this.cfg = cfg;
81
- this.schema = comicToolSchema;
82
- this.name = (cfg.tool.name || 'comic').trim();
83
- this.description =
84
- (cfg.tool.description || '').trim()
85
- || '漫画搜索与下载工具。支持禁漫天堂(JM)和哔咔漫画(Bika)双平台。';
86
- }
87
- async _call(input) {
88
- const logger = this.ctx.logger('comic');
89
- const source = input.source || this.cfg.defaultSource;
90
- const apiBase = this.cfg.apiBase.replace(/\/+$/, '');
91
- async function apiGet(path, params) {
92
- let url = apiBase + path;
93
- if (params) {
94
- const qs = new URLSearchParams(params).toString();
95
- if (qs)
96
- url += '?' + qs;
97
- }
98
- const res = await fetch(url);
99
- return res.json();
100
- }
101
- try {
102
- switch (input.action) {
103
- case 'search': {
104
- if (!input.keyword)
105
- return JSON.stringify({ error: '搜索时 keyword 不能为空' });
106
- const result = await apiGet('/api/search', { keyword: input.keyword });
107
- const jmList = result.all_results?.jm || [];
108
- const bikaList = result.all_results?.bika || [];
109
- const all = [
110
- ...jmList.map(c => ({ ...c, source: 'jm' })),
111
- ...bikaList.map(c => ({ ...c, source: 'bika' }))
112
- ];
113
- return JSON.stringify({
114
- keyword: input.keyword,
115
- best_match: result.best_match,
116
- total: all.length,
117
- results: all.slice(0, 20)
118
- });
119
- }
120
- case 'detail': {
121
- if (!input.comic_id)
122
- return JSON.stringify({ error: '查看详情时 comic_id 不能为空' });
123
- const detail = await apiGet(`/api/comic/${source}/${input.comic_id}`);
124
- if (!detail?.title)
125
- return JSON.stringify({ error: '未找到该漫画' });
126
- return JSON.stringify({
127
- title: detail.title,
128
- author: detail.author,
129
- description: detail.description,
130
- source: detail.source || source,
131
- chapter_count: detail.chapters?.length || 0,
132
- chapters: detail.chapters?.slice(0, 30) || []
133
- });
134
- }
135
- case 'leaderboard': {
136
- const mode = input.mode || 'day';
137
- const page = String(input.page || 1);
138
- const result = await apiGet(`/api/${source}/leaderboard`, { mode, page });
139
- return JSON.stringify({
140
- source,
141
- mode,
142
- page: Number(page),
143
- total: result.data?.length || 0,
144
- results: result.data || []
145
- });
146
- }
147
- case 'category': {
148
- if (!input.category_name)
149
- return JSON.stringify({ error: '分类浏览时 category_name 不能为空' });
150
- const page = String(input.page || 1);
151
- const result = await apiGet(`/api/${source}/category`, {
152
- name: input.category_name,
153
- page
154
- });
155
- return JSON.stringify({
156
- source,
157
- category: input.category_name,
158
- page: Number(page),
159
- total: result.data?.length || 0,
160
- results: result.data || []
161
- });
162
- }
163
- case 'latest': {
164
- const page = String(input.page || 1);
165
- const result = await apiGet(`/api/${source}/latest`, { page });
166
- return JSON.stringify({
167
- source,
168
- page: Number(page),
169
- total: result.data?.length || 0,
170
- results: result.data || []
171
- });
172
- }
173
- case 'random': {
174
- const result = await apiGet(`/api/${source}/random`);
175
- return JSON.stringify({
176
- source,
177
- result: result.data || null
178
- });
179
- }
180
- default:
181
- return JSON.stringify({ error: '未知操作类型' });
182
- }
183
- }
184
- catch (err) {
185
- logger.error('工具调用失败:', err.message);
186
- return JSON.stringify({ error: err.message || '请求失败' });
187
- }
188
- }
189
- }
190
107
  function apply(ctx, config) {
191
108
  const logger = ctx.logger('comic');
192
109
  async function apiGet(path, params) {
@@ -201,11 +118,145 @@ function apply(ctx, config) {
201
118
  const res = await ctx.http.get(url);
202
119
  return res;
203
120
  }
204
- // ========== Helper Functions ==========
205
- async function downloadComic(session, source, id, chapterId) {
121
+ // Parent command 'comic' routing logic
122
+ ctx.command('comic [keyword:text]', '聚合漫画搜索与下载。若用户给的名字不准确、包含缩写或搜不到,请调用联网工具搜索获取准确的漫画名称、关联角色或作者,然后再进行搜索或下载。')
123
+ .action(async ({ session }, keyword) => {
124
+ if (!session)
125
+ return;
126
+ if (!keyword) {
127
+ return session.execute('help comic');
128
+ }
129
+ const clean = keyword.trim();
130
+ const resolved = determineSource(clean);
131
+ if (resolved) {
132
+ if (resolved.source === 'jm' && parseInt(resolved.id, 10) <= 100) {
133
+ return session.execute(`comic search ${keyword}`);
134
+ }
135
+ return session.execute(`comic download ${resolved.id}`);
136
+ }
137
+ // Fallback to search
138
+ return session.execute(`comic search ${keyword}`);
139
+ });
140
+ // comic search <keyword>
141
+ ctx.command('comic search <keyword:text>', '聚合搜索漫画(禁漫+哔咔)。若漫画名称模糊、拼写错误或搜不到,请先调用联网工具搜索获取其准确别名、正式标题或作者后,再重试搜索。')
142
+ .action(async ({ session }, keyword) => {
143
+ if (!keyword)
144
+ return '请输入搜索关键词';
145
+ try {
146
+ const result = await apiGet('/api/search', { keyword });
147
+ const parts = [];
148
+ if (result.best_match?.title) {
149
+ const bm = result.best_match;
150
+ const srcLabel = bm.source === 'jm' ? '禁漫' : '哔咔';
151
+ parts.push(`🏆 最佳匹配 [${srcLabel}|${bm.id}]:`);
152
+ parts.push(` ${bm.title} 作者:${bm.author || '佚名'}`);
153
+ parts.push('');
154
+ }
155
+ const jmList = result.all_results?.jm || [];
156
+ const bikaList = result.all_results?.bika || [];
157
+ const all = [];
158
+ const jmItems = jmList.map(c => ({ ...c, source: 'jm' }));
159
+ const bikaItems = bikaList.map(c => ({ ...c, source: 'bika' }));
160
+ if (jmItems.length > 0 || bikaItems.length > 0) {
161
+ parts.push(`共找到 ${jmItems.length + bikaItems.length} 个结果:\n`);
162
+ let currentIndex = 1;
163
+ if (jmItems.length > 0) {
164
+ parts.push('【 禁漫天堂 (JMComic) 】');
165
+ for (const item of jmItems) {
166
+ all.push(item);
167
+ parts.push(` ${currentIndex}. [禁漫|${item.id}] ${item.title} 作者:${item.author || '佚名'}`);
168
+ currentIndex++;
169
+ }
170
+ parts.push('');
171
+ }
172
+ if (bikaItems.length > 0) {
173
+ parts.push('【 哔咔漫画 (Bika) 】');
174
+ for (const item of bikaItems) {
175
+ all.push(item);
176
+ parts.push(` ${currentIndex}. [哔咔|${item.id}] ${item.title} 作者:${item.author || '佚名'}`);
177
+ currentIndex++;
178
+ }
179
+ parts.push('');
180
+ }
181
+ parts.push('输入序号(例如:1)或「源|ID」(例如:禁漫|12345)进行下载');
182
+ if (session) {
183
+ await session.send(parts.join('\n'));
184
+ const answer = await session.prompt(30000);
185
+ if (!answer)
186
+ return;
187
+ const cleanAnswer = answer.trim();
188
+ let targetId = '';
189
+ const index = parseInt(cleanAnswer, 10);
190
+ if (!isNaN(index) && index > 0 && index <= all.length) {
191
+ const selected = all[index - 1];
192
+ targetId = selected.id;
193
+ }
194
+ else {
195
+ const match = cleanAnswer.match(/^(?:禁漫|哔咔|jm|bika)[||](.+)$/i);
196
+ if (match) {
197
+ targetId = match[1].trim();
198
+ }
199
+ else {
200
+ targetId = cleanAnswer;
201
+ }
202
+ }
203
+ if (targetId) {
204
+ return session.execute(`comic download ${targetId}`);
205
+ }
206
+ return;
207
+ }
208
+ else {
209
+ return parts.join('\n');
210
+ }
211
+ }
212
+ else {
213
+ return '没有找到任何结果';
214
+ }
215
+ }
216
+ catch (err) {
217
+ logger.error('搜索失败:', err.message);
218
+ return `搜索失败: ${err.message}`;
219
+ }
220
+ });
221
+ // comic download <id> [chapterId]
222
+ ctx.command('comic download <id:string> [chapterId:string]', '下载漫画PDF。可接受漫画ID或本子名字。提示:若名字不准确、带有缩写或搜不到,可先调用联网工具搜索获取准确本子名、角色或关联画师,再进行下载。')
223
+ .action(async ({ session }, id, chapterId) => {
224
+ if (!id)
225
+ return '用法: comic download <ID> [章节ID]';
226
+ if (!session)
227
+ return '此命令仅支持在会话中使用';
228
+ let source;
229
+ let targetId = id;
230
+ const resolved = determineSource(id);
231
+ if (resolved) {
232
+ source = resolved.source;
233
+ targetId = resolved.id;
234
+ }
235
+ else {
236
+ await session.send(`正在搜索并解析本子名「${id}」...`);
237
+ try {
238
+ const searchResult = await apiGet('/api/search', { keyword: id });
239
+ const jmList = searchResult.all_results?.jm || [];
240
+ const bikaList = searchResult.all_results?.bika || [];
241
+ if (jmList.length > 0) {
242
+ source = 'jm';
243
+ targetId = jmList[0].id;
244
+ }
245
+ else if (bikaList.length > 0) {
246
+ source = 'bika';
247
+ targetId = bikaList[0].id;
248
+ }
249
+ else {
250
+ return '未找到相关漫画,请尝试其他关键词或输入正确的ID。';
251
+ }
252
+ }
253
+ catch (err) {
254
+ return `搜索本子名失败: ${err.message}`;
255
+ }
256
+ }
206
257
  try {
207
258
  await session.send('正在获取漫画详情...');
208
- const detail = await apiGet(`/api/comic/${source}/${id}`);
259
+ const detail = await apiGet(`/api/comic/${source}/${targetId}`);
209
260
  if (!detail?.title)
210
261
  return '未找到该漫画';
211
262
  if (!detail.chapters?.length)
@@ -221,20 +272,34 @@ function apply(ctx, config) {
221
272
  await session.send(`该漫画共 ${totalChapters} 话,正在下载第一话: ${chapterName}`);
222
273
  }
223
274
  await session.send(`正在下载「${detail.title} - ${chapterName}」...`);
275
+ const pdfPassword = config.pdfPassword || getPdfPassword(source, targetId, chapter.id);
224
276
  const downloadUrl = config.apiBase.replace(/\/+$/, '')
225
- + `/api/download/${source}/${id}/${chapter.id}`
277
+ + `/api/download/${source}/${targetId}/${chapter.id}`
226
278
  + `?title=${encodeURIComponent(detail.title)}`
227
279
  + `&chapter=${encodeURIComponent(chapterName)}`
280
+ + `&password=${encodeURIComponent(pdfPassword)}`
228
281
  + `&concurrency=${config.concurrency}`;
229
282
  if (config.logInfo)
230
283
  logger.info(`Downloading: ${downloadUrl}`);
231
284
  const response = await ctx.http.get(downloadUrl, { responseType: 'arraybuffer' });
232
285
  const buffer = Buffer.from(response);
233
- if (buffer.length < 100)
286
+ if (buffer.length < 100) {
234
287
  return '下载失败:返回数据异常';
235
- const filename = `${id}_${chapter.id}.pdf`;
236
- const fileElement = koishi_1.h.file(buffer, 'application/pdf', { filename });
237
- await session.send(fileElement);
288
+ }
289
+ const cleanTitle = source === 'jm' ? `jm${targetId}` : sanitizeFilename(detail.title);
290
+ const filename = `${cleanTitle}.pdf`;
291
+ const tempFilePath = path.join(os.tmpdir(), filename);
292
+ await fs.promises.writeFile(tempFilePath, buffer);
293
+ try {
294
+ const fileUrl = (0, url_1.pathToFileURL)(tempFilePath).href;
295
+ await session.send(koishi_1.h.file(fileUrl));
296
+ await session.send(`🔑 该 PDF 已加密,解密密码为:${pdfPassword}`);
297
+ }
298
+ finally {
299
+ fs.promises.unlink(tempFilePath).catch((err) => {
300
+ logger.error('Failed to delete temp file:', err.message);
301
+ });
302
+ }
238
303
  if (totalChapters > 1 && !chapterId) {
239
304
  return `这是第一话,共 ${totalChapters} 话。如需其他话请指定章节ID。\n章节列表:\n${detail.chapters.slice(0, 20).map((ch, i) => `${i + 1}. [${ch.id}] ${ch.name}`).join('\n')}${totalChapters > 20 ? `\n... 共 ${totalChapters} 话` : ''}`;
240
305
  }
@@ -244,11 +309,19 @@ function apply(ctx, config) {
244
309
  logger.error('下载失败:', err.message);
245
310
  return `下载失败: ${err.message}`;
246
311
  }
247
- }
248
- async function fetchAndShowDetail(session, source, id) {
312
+ });
313
+ // comic detail <id>
314
+ ctx.command('comic detail <id:string>', '查看漫画详情和章节列表')
315
+ .action(async ({ session }, id) => {
316
+ if (!id)
317
+ return '用法: comic detail <ID>';
318
+ const resolved = determineSource(id);
319
+ if (!resolved) {
320
+ return '无效的 ID 格式。禁漫 ID 应为纯数字,哔咔 ID 应为 24 位十六进制字符。';
321
+ }
322
+ const { source, id: targetId } = resolved;
249
323
  try {
250
- await session.send('正在获取详情...');
251
- const detail = await apiGet(`/api/comic/${source}/${id}`);
324
+ const detail = await apiGet(`/api/comic/${source}/${targetId}`);
252
325
  if (!detail?.title)
253
326
  return '未找到该漫画';
254
327
  const srcLabel = source === 'jm' ? '禁漫' : '哔咔';
@@ -263,7 +336,7 @@ function apply(ctx, config) {
263
336
  const first = detail.chapters[0];
264
337
  parts.push(`\n第一话: [${first.id}] ${first.name}`);
265
338
  if (detail.chapters.length > 1) {
266
- parts.push(`共 ${detail.chapters.length} 话,如需下载请用 comic download 命令`);
339
+ parts.push(`共 ${detail.chapters.length} 话,如需下载请使用 comic download <ID> [章节ID]`);
267
340
  }
268
341
  }
269
342
  return parts.join('\n');
@@ -272,342 +345,162 @@ function apply(ctx, config) {
272
345
  logger.error('获取详情失败:', err.message);
273
346
  return `获取详情失败: ${err.message}`;
274
347
  }
275
- }
276
- // ========== Koishi 命令 ==========
277
- ctx.command('comic', '聚合漫画搜索与下载');
278
- ctx.command('comic.search <keyword:text>', '聚合搜索漫画(禁漫+哔咔)')
279
- .alias('搜漫画')
280
- .alias('漫画搜索')
281
- .action(async ({ session }, keyword) => {
282
- if (!keyword)
283
- return '请输入搜索关键词';
284
- if (!session)
285
- return '此命令仅支持在会话中使用';
348
+ });
349
+ // comic leaderboard [mode]
350
+ ctx.command('comic leaderboard [mode:string]', '查看排行榜')
351
+ .action(async ({ session }, mode) => {
352
+ const targetMode = (mode || 'day').toLowerCase();
353
+ if (!['day', 'week', 'month', 'total'].includes(targetMode)) {
354
+ return 'mode 必须是 day/week/month/total';
355
+ }
286
356
  try {
287
- const result = await apiGet('/api/search', { keyword });
357
+ const [jmResult, bikaResult] = await Promise.all([
358
+ apiGet('/api/jm/leaderboard', { mode: targetMode }).catch(() => null),
359
+ apiGet('/api/bika/leaderboard', { mode: targetMode }).catch(() => null),
360
+ ]);
361
+ const modeMap = { day: '日榜', week: '周榜', month: '月榜', total: '总榜' };
288
362
  const parts = [];
289
- if (result.best_match?.title) {
290
- const bm = result.best_match;
291
- const srcLabel = bm.source === 'jm' ? '禁漫' : '哔咔';
292
- parts.push(`🏆 最佳匹配 [${srcLabel}|${bm.id}]:`);
293
- parts.push(` ${bm.title} 作者:${bm.author || '佚名'}`);
363
+ if (jmResult && jmResult.success !== false && jmResult.data?.length) {
364
+ const comics = jmResult.data.map(c => ({ ...c, source: 'jm' }));
365
+ parts.push(`【 禁漫天堂 (JMComic) ${modeMap[targetMode]} 】`);
366
+ parts.push(formatComics(comics, '禁漫'));
294
367
  parts.push('');
295
368
  }
296
- const jmList = result.all_results?.jm || [];
297
- const bikaList = result.all_results?.bika || [];
298
- const all = [...jmList.map(c => ({ ...c, source: 'jm' })), ...bikaList.map(c => ({ ...c, source: 'bika' }))];
299
- if (all.length > 0) {
300
- if (all.length > 5) {
301
- parts.push(`找到 ${all.length} 个结果,已生成合并转发记录:`);
302
- await session.send(parts.join('\n'));
303
- const msgElements = all.map((c, i) => {
304
- const src = c.source === 'jm' ? '禁漫' : '哔咔';
305
- return (0, koishi_1.h)('message', `${i + 1}. [${src}|${c.id}] ${c.title} 作者:${c.author || '佚名'}`);
306
- });
307
- msgElements.push((0, koishi_1.h)('message', '💡 回复序号(如 1)直接下载第一话,回复其他任意内容退出。'));
308
- await session.send((0, koishi_1.h)('message', { forward: true }, msgElements));
309
- }
310
- else {
311
- parts.push(`找到 ${all.length} 个结果:`);
312
- parts.push(formatComics(all));
313
- parts.push('');
314
- parts.push('💡 回复序号(如 1)直接下载第一话,回复其他任意内容退出。');
315
- await session.send(parts.join('\n'));
316
- }
317
- const answer = await session.prompt(30000);
318
- if (!answer)
319
- return;
320
- const trimmed = answer.trim();
321
- const index = parseInt(trimmed, 10);
322
- if (!isNaN(index) && index >= 1 && index <= all.length) {
323
- const chosen = all[index - 1];
324
- return downloadComic(session, chosen.source, chosen.id);
325
- }
369
+ else {
370
+ parts.push(`【 禁漫天堂 (JMComic) ${modeMap[targetMode]} 】`);
371
+ parts.push('暂无数据或获取失败');
372
+ parts.push('');
373
+ }
374
+ if (bikaResult && bikaResult.success !== false && bikaResult.data?.length) {
375
+ const comics = bikaResult.data.map(c => ({ ...c, source: 'bika' }));
376
+ parts.push(`【 哔咔漫画 (Bika) ${modeMap[targetMode]} 】`);
377
+ parts.push(formatComics(comics, '哔咔'));
378
+ parts.push('');
326
379
  }
327
380
  else {
328
- return '没有找到任何结果';
381
+ parts.push(`【 哔咔漫画 (Bika) ${modeMap[targetMode]} 】`);
382
+ parts.push('暂无数据或获取失败');
383
+ parts.push('');
329
384
  }
385
+ return parts.join('\n');
330
386
  }
331
387
  catch (err) {
332
- logger.error('搜索失败:', err.message);
333
- return `搜索失败: ${err.message}`;
388
+ logger.error('获取排行榜失败:', err.message);
389
+ return `获取排行榜失败: ${err.message}`;
334
390
  }
335
391
  });
336
- ctx.command('comic.detail <query:text>', '查看漫画详情和章节列表(支持关键词搜索或“源 ID”直接查询)')
337
- .alias('漫画详情')
338
- .action(async ({ session }, query) => {
339
- if (!query)
340
- return '用法: comic detail <关键词> 或 comic detail <jm|bika> <ID>';
341
- if (!session)
342
- return '此命令仅支持在会话中使用';
343
- let source = '';
344
- let id = '';
345
- // 尝试解析直接查询格式,支持 "jm 12345"、"bika:abcde"、"jm12345" 等形式
346
- const directMatch = query.trim().match(/^(jm|bika)(?:\s+|:|:)(\S+)/i);
347
- const directMatchNoSpace = query.trim().match(/^(jm|bika)(\d+|[a-zA-Z0-9]{24})/i);
348
- if (directMatch) {
349
- source = directMatch[1].toLowerCase();
350
- id = directMatch[2];
351
- }
352
- else if (directMatchNoSpace) {
353
- source = directMatchNoSpace[1].toLowerCase();
354
- id = directMatchNoSpace[2];
355
- }
356
- if (source && id) {
357
- return fetchAndShowDetail(session, source, id);
358
- }
359
- // 否则,作为关键词进行聚合搜索
392
+ // comic category <name>
393
+ ctx.command('comic category <name:string>', '按分类浏览漫画')
394
+ .action(async ({ session }, name) => {
395
+ if (!name)
396
+ return '用法: comic category <分类名>';
360
397
  try {
361
- await session.send(`正在搜索「${query}」...`);
362
- const result = await apiGet('/api/search', { keyword: query });
363
- const jmList = result.all_results?.jm || [];
364
- const bikaList = result.all_results?.bika || [];
365
- const all = [...jmList.map(c => ({ ...c, source: 'jm' })), ...bikaList.map(c => ({ ...c, source: 'bika' }))];
366
- if (all.length === 0) {
367
- return `没有找到关于「${query}」的漫画。`;
368
- }
369
- if (all.length === 1) {
370
- const chosen = all[0];
371
- return fetchAndShowDetail(session, chosen.source, chosen.id);
372
- }
398
+ const [jmResult, bikaResult] = await Promise.all([
399
+ apiGet('/api/jm/category', { name }).catch(() => null),
400
+ apiGet('/api/bika/category', { name }).catch(() => null),
401
+ ]);
373
402
  const parts = [];
374
- if (result.best_match?.title) {
375
- const bm = result.best_match;
376
- const srcLabel = bm.source === 'jm' ? '禁漫' : '哔咔';
377
- parts.push(`🏆 最佳匹配 [${srcLabel}|${bm.id}]: ${bm.title}`);
403
+ let hasResults = false;
404
+ if (jmResult && jmResult.success !== false && jmResult.data?.length) {
405
+ const comics = jmResult.data.map(c => ({ ...c, source: 'jm' }));
406
+ parts.push(`【 禁漫天堂 (JMComic) 分类「${name} 】`);
407
+ parts.push(formatComics(comics, '禁漫'));
378
408
  parts.push('');
409
+ hasResults = true;
379
410
  }
380
- if (all.length > 5) {
381
- parts.push(`找到 ${all.length} 个结果,已生成合并转发记录:`);
382
- await session.send(parts.join('\n'));
383
- const msgElements = all.map((c, i) => {
384
- const src = c.source === 'jm' ? '禁漫' : '哔咔';
385
- return (0, koishi_1.h)('message', `${i + 1}. [${src}|${c.id}] ${c.title} 作者:${c.author || '佚名'}`);
386
- });
387
- msgElements.push((0, koishi_1.h)('message', `💡 请回复序号(1-${all.length})查看详情,或回复其他任意内容退出。`));
388
- await session.send((0, koishi_1.h)('message', { forward: true }, msgElements));
389
- }
390
- else {
391
- parts.push(`找到以下多个结果,请回复序号(1-${all.length})查看详情,或回复其他任意内容退出:`);
392
- parts.push(formatComics(all));
393
- await session.send(parts.join('\n'));
394
- }
395
- const answer = await session.prompt(30000);
396
- if (!answer)
397
- return;
398
- const trimmed = answer.trim();
399
- const index = parseInt(trimmed, 10);
400
- if (!isNaN(index) && index >= 1 && index <= all.length) {
401
- const chosen = all[index - 1];
402
- return fetchAndShowDetail(session, chosen.source, chosen.id);
411
+ if (bikaResult && bikaResult.success !== false && bikaResult.data?.length) {
412
+ const comics = bikaResult.data.map(c => ({ ...c, source: 'bika' }));
413
+ parts.push(`【 哔咔漫画 (Bika) 分类「${name}」 】`);
414
+ parts.push(formatComics(comics, '哔咔'));
415
+ parts.push('');
416
+ hasResults = true;
403
417
  }
404
- else {
405
- return '输入无效,已退出。';
418
+ if (!hasResults) {
419
+ return `两平台分类「${name}」均暂无数据或获取失败`;
406
420
  }
421
+ return parts.join('\n');
407
422
  }
408
423
  catch (err) {
409
- logger.error('详情搜索失败:', err.message);
410
- return `查询失败: ${err.message}`;
424
+ logger.error('获取分类失败:', err.message);
425
+ return `获取分类失败: ${err.message}`;
411
426
  }
412
427
  });
413
- ctx.command('comic.download <query:text>', '下载漫画PDF(支持关键词搜索或“源 ID”直接下载)')
414
- .alias('下载漫画')
415
- .alias('漫画下载')
416
- .alias('comic dl')
417
- .action(async ({ session }, query) => {
418
- if (!query)
419
- return '用法: comic download <关键词> 或 comic download <jm|bika> <ID>';
420
- if (!session)
421
- return '此命令仅支持在会话中使用';
422
- let source = '';
423
- let id = '';
424
- let chapterId = '';
425
- // 尝试解析直接下载格式,支持 "jm 12345"、"bika:abcde"、"jm12345" 等形式
426
- const directMatch = query.trim().match(/^(jm|bika)(?:\s+|:|:)(\S+)(?:\s+(\S+))?$/i);
427
- const directMatchNoSpace = query.trim().match(/^(jm|bika)(\d+|[a-zA-Z0-9]{24})(?:\s+(\S+))?$/i);
428
- if (directMatch) {
429
- source = directMatch[1].toLowerCase();
430
- id = directMatch[2];
431
- chapterId = directMatch[3] || '';
432
- }
433
- else if (directMatchNoSpace) {
434
- source = directMatchNoSpace[1].toLowerCase();
435
- id = directMatchNoSpace[2];
436
- chapterId = directMatchNoSpace[3] || '';
437
- }
438
- if (source && id) {
439
- return downloadComic(session, source, id, chapterId);
440
- }
441
- // 否则,作为关键词进行聚合搜索
428
+ // comic latest
429
+ ctx.command('comic latest', '查看最近更新')
430
+ .action(async ({ session }) => {
442
431
  try {
443
- await session.send(`正在搜索「${query}」...`);
444
- const result = await apiGet('/api/search', { keyword: query });
445
- const jmList = result.all_results?.jm || [];
446
- const bikaList = result.all_results?.bika || [];
447
- const all = [...jmList.map(c => ({ ...c, source: 'jm' })), ...bikaList.map(c => ({ ...c, source: 'bika' }))];
448
- if (all.length === 0) {
449
- return `没有找到关于「${query}」的漫画。`;
450
- }
451
- if (all.length === 1) {
452
- const chosen = all[0];
453
- await session.send(`仅找到一个匹配结果,正在下载「${chosen.title}」...`);
454
- return downloadComic(session, chosen.source, chosen.id);
455
- }
432
+ const [jmResult, bikaResult] = await Promise.all([
433
+ apiGet('/api/jm/latest').catch(() => null),
434
+ apiGet('/api/bika/latest').catch(() => null),
435
+ ]);
456
436
  const parts = [];
457
- if (result.best_match?.title) {
458
- const bm = result.best_match;
459
- const srcLabel = bm.source === 'jm' ? '禁漫' : '哔咔';
460
- parts.push(`🏆 最佳匹配 [${srcLabel}|${bm.id}]: ${bm.title}`);
437
+ if (jmResult && jmResult.success !== false && jmResult.data?.length) {
438
+ const comics = jmResult.data.map(c => ({ ...c, source: 'jm' }));
439
+ parts.push(' 禁漫天堂 (JMComic) 最近更新 ');
440
+ parts.push(formatComics(comics, '禁漫'));
461
441
  parts.push('');
462
442
  }
463
- if (all.length > 5) {
464
- parts.push(`找到 ${all.length} 个结果,已生成合并转发记录:`);
465
- await session.send(parts.join('\n'));
466
- const msgElements = all.map((c, i) => {
467
- const src = c.source === 'jm' ? '禁漫' : '哔咔';
468
- return (0, koishi_1.h)('message', `${i + 1}. [${src}|${c.id}] ${c.title} 作者:${c.author || '佚名'}`);
469
- });
470
- msgElements.push((0, koishi_1.h)('message', `💡 请回复序号(1-${all.length})下载,或回复其他任意内容退出。`));
471
- await session.send((0, koishi_1.h)('message', { forward: true }, msgElements));
472
- }
473
443
  else {
474
- parts.push(`找到以下多个结果,请回复序号(1-${all.length})下载,或回复其他任意内容退出:`);
475
- parts.push(formatComics(all));
476
- await session.send(parts.join('\n'));
444
+ parts.push('【 禁漫天堂 (JMComic) 最近更新 】');
445
+ parts.push('暂无数据或获取失败');
446
+ parts.push('');
477
447
  }
478
- const answer = await session.prompt(30000);
479
- if (!answer)
480
- return;
481
- const trimmed = answer.trim();
482
- const index = parseInt(trimmed, 10);
483
- if (!isNaN(index) && index >= 1 && index <= all.length) {
484
- const chosen = all[index - 1];
485
- return downloadComic(session, chosen.source, chosen.id);
448
+ if (bikaResult && bikaResult.success !== false && bikaResult.data?.length) {
449
+ const comics = bikaResult.data.map(c => ({ ...c, source: 'bika' }));
450
+ parts.push('【 哔咔漫画 (Bika) 最近更新 】');
451
+ parts.push(formatComics(comics, '哔咔'));
452
+ parts.push('');
486
453
  }
487
454
  else {
488
- return '输入无效,已退出下载。';
455
+ parts.push('【 哔咔漫画 (Bika) 最近更新 】');
456
+ parts.push('暂无数据或获取失败');
457
+ parts.push('');
489
458
  }
490
- }
491
- catch (err) {
492
- logger.error('下载搜索失败:', err.message);
493
- return `下载失败: ${err.message}`;
494
- }
495
- });
496
- ctx.command('comic.leaderboard [source:string] [mode:string]', '查看排行榜')
497
- .alias('漫画榜单')
498
- .alias('漫画排行')
499
- .action(async ({ session }, source, mode) => {
500
- source = (source || config.defaultSource).toLowerCase();
501
- if (source !== 'jm' && source !== 'bika')
502
- return 'source 必须是 jm 或 bika';
503
- mode = mode || 'day';
504
- if (!['day', 'week', 'month', 'total'].includes(mode))
505
- return 'mode 必须是 day/week/month/total';
506
- try {
507
- const result = await apiGet(`/api/${source}/leaderboard`, { mode });
508
- const srcLabel = source === 'jm' ? '禁漫' : '哔咔';
509
- const modeMap = { day: '日榜', week: '周榜', month: '月榜', total: '总榜' };
510
- if (!result.data?.length)
511
- return `${srcLabel} ${modeMap[mode]}暂无数据`;
512
- const comics = result.data.map(c => ({ ...c, source }));
513
- return `[${srcLabel} ${modeMap[mode]}]\n${formatComics(comics)}`;
514
- }
515
- catch (err) {
516
- logger.error('获取排行榜失败:', err.message);
517
- return `获取排行榜失败: ${err.message}`;
518
- }
519
- });
520
- ctx.command('comic.category <source:string> <name:string>', '按分类浏览漫画')
521
- .alias('漫画分类')
522
- .action(async ({ session }, source, name) => {
523
- if (!source || !name)
524
- return '用法: comic category <jm|bika> <分类名>';
525
- source = source.toLowerCase();
526
- if (source !== 'jm' && source !== 'bika')
527
- return 'source 必须 is jm 或 bika';
528
- try {
529
- const result = await apiGet(`/api/${source}/category`, { name });
530
- const srcLabel = source === 'jm' ? '禁漫' : '哔咔';
531
- if (!result.data?.length)
532
- return `${srcLabel} 分类「${name}」暂无数据`;
533
- const comics = result.data.map(c => ({ ...c, source }));
534
- return `[${srcLabel} 分类「${name}」]\n${formatComics(comics)}`;
535
- }
536
- catch (err) {
537
- logger.error('获取分类失败:', err.message);
538
- return `获取分类失败: ${err.message}`;
539
- }
540
- });
541
- ctx.command('comic.latest [source:string]', '查看最近更新')
542
- .alias('最新漫画')
543
- .alias('漫画更新')
544
- .action(async ({ session }, source) => {
545
- source = (source || config.defaultSource).toLowerCase();
546
- if (source !== 'jm' && source !== 'bika')
547
- return 'source 必须是 jm 或 bika';
548
- try {
549
- const result = await apiGet(`/api/${source}/latest`);
550
- const srcLabel = source === 'jm' ? '禁漫' : '哔咔';
551
- if (!result.data?.length)
552
- return `${srcLabel} 最近更新暂无数据`;
553
- const comics = result.data.map(c => ({ ...c, source }));
554
- return `[${srcLabel} 最近更新]\n${formatComics(comics)}`;
459
+ return parts.join('\n');
555
460
  }
556
461
  catch (err) {
557
462
  logger.error('获取最近更新失败:', err.message);
558
463
  return `获取最近更新失败: ${err.message}`;
559
464
  }
560
465
  });
561
- ctx.command('comic.random [source:string]', '随机推荐漫画')
562
- .alias('随机漫画')
563
- .action(async ({ session }, source) => {
564
- source = (source || config.defaultSource).toLowerCase();
565
- if (source !== 'jm' && source !== 'bika')
566
- return 'source 必须是 jm 或 bika';
466
+ // comic random
467
+ ctx.command('comic random', '随机推荐漫画')
468
+ .action(async ({ session }) => {
567
469
  try {
568
- const result = await apiGet(`/api/${source}/random`);
569
- const srcLabel = source === 'jm' ? '禁漫' : '哔咔';
570
- const comic = result.data;
571
- if (!comic?.title)
572
- return `${srcLabel} 随机推荐暂无数据`;
573
- const item = { ...comic, source };
574
- return `[${srcLabel} 随机推荐]\n${formatComics([item])}`;
470
+ const [jmResult, bikaResult] = await Promise.all([
471
+ apiGet('/api/jm/random').catch(() => null),
472
+ apiGet('/api/bika/random').catch(() => null),
473
+ ]);
474
+ const parts = [];
475
+ if (jmResult && jmResult.success !== false && jmResult.data?.length) {
476
+ const comics = jmResult.data;
477
+ const comic = comics[Math.floor(Math.random() * comics.length)];
478
+ if (comic?.title) {
479
+ const item = { ...comic, source: 'jm' };
480
+ parts.push('【 禁漫天堂 (JMComic) 随机推荐 】');
481
+ parts.push(formatComics([item], '禁漫'));
482
+ parts.push('');
483
+ }
484
+ }
485
+ if (bikaResult && bikaResult.success !== false && bikaResult.data?.length) {
486
+ const comics = bikaResult.data;
487
+ const comic = comics[Math.floor(Math.random() * comics.length)];
488
+ if (comic?.title) {
489
+ const item = { ...comic, source: 'bika' };
490
+ parts.push('【 哔咔漫画 (Bika) 随机推荐 】');
491
+ parts.push(formatComics([item], '哔咔'));
492
+ parts.push('');
493
+ }
494
+ }
495
+ if (parts.length === 0) {
496
+ return '两平台随机推荐均暂无数据或获取失败';
497
+ }
498
+ return parts.join('\n');
575
499
  }
576
500
  catch (err) {
577
501
  logger.error('获取随机推荐失败:', err.message);
578
502
  return `获取随机推荐失败: ${err.message}`;
579
503
  }
580
504
  });
581
- // ========== ChatLuna 工具注册 ==========
582
- ctx.on('ready', async () => {
583
- if (!config.tool.enabled)
584
- return;
585
- if (!ctx.chatluna) {
586
- logger.info('chatluna 未安装,跳过注册 ChatLuna 工具');
587
- return;
588
- }
589
- const toolName = (config.tool.name || 'comic').trim() || 'comic';
590
- ctx.chatluna.platform.registerTool(toolName, {
591
- description: config.tool.description || '漫画搜索与下载工具',
592
- selector() {
593
- return true;
594
- },
595
- createTool() {
596
- return new ComicTool(ctx, config);
597
- },
598
- meta: {
599
- source: 'extension',
600
- group: 'comic',
601
- tags: ['comic', 'manga', 'jmcomic', 'bika'],
602
- defaultAvailability: {
603
- enabled: true,
604
- main: true,
605
- chatluna: true,
606
- characterScope: 'all'
607
- }
608
- }
609
- });
610
- logger.info(`ChatLuna 工具「${toolName}」已注册`);
611
- });
612
505
  }
613
506
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,45 +1,48 @@
1
- {
2
- "name": "koishi-plugin-comic",
3
- "description": "聚合漫画搜索与下载插件,支持禁漫天堂和哔咔漫画,需要自部署 comic-api 后端。支持 ChatLuna 工具调用。",
4
- "version": "1.0.1",
5
- "main": "lib/index.js",
6
- "typings": "lib/index.d.ts",
7
- "files": [
8
- "lib",
9
- "dist"
10
- ],
11
- "license": "MIT",
12
- "keywords": [
13
- "chatbot",
14
- "koishi",
15
- "plugin",
16
- "comic",
17
- "jmcomic",
18
- "bika",
19
- "chatluna"
20
- ],
21
- "peerDependencies": {
22
- "koishi": "^4.18.9",
23
- "koishi-plugin-chatluna": "^1.3.0"
24
- },
25
- "peerDependenciesMeta": {
26
- "koishi-plugin-chatluna": {
27
- "optional": true
28
- }
29
- },
30
- "koishi": {
31
- "service": {
32
- "required": ["http"],
33
- "optional": ["chatluna"]
34
- }
35
- },
36
- "dependencies": {
37
- "@koishijs/plugin-http": "^0.6.0",
38
- "@langchain/core": "^0.3.80",
39
- "zod": "3.25.76"
40
- },
41
- "devDependencies": {
42
- "koishi": "^4.18.9",
43
- "typescript": "^5.0.0"
44
- }
45
- }
1
+ {
2
+ "name": "koishi-plugin-comic",
3
+ "description": "聚合漫画搜索与下载插件,支持禁漫天堂和哔咔漫画,需要自部署 comic-api 后端",
4
+ "version": "1.0.3",
5
+ "main": "lib/index.js",
6
+ "typings": "lib/index.d.ts",
7
+ "files": [
8
+ "lib",
9
+ "dist"
10
+ ],
11
+ "license": "MIT",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/lumia1998/koishi-plugin-comic.git"
15
+ },
16
+ "bugs": {
17
+ "url": "https://github.com/lumia1998/koishi-plugin-comic/issues"
18
+ },
19
+ "homepage": "https://github.com/lumia1998/koishi-plugin-comic#readme",
20
+ "contributors": [
21
+ "lumia.wang <fenglian19980510@gmail.com>"
22
+ ],
23
+ "keywords": [
24
+ "chatbot",
25
+ "koishi",
26
+ "plugin",
27
+ "comic",
28
+ "jmcomic",
29
+ "bika"
30
+ ],
31
+ "peerDependencies": {
32
+ "koishi": "^4.0.0"
33
+ },
34
+ "koishi": {
35
+ "service": {
36
+ "required": [
37
+ "http"
38
+ ]
39
+ }
40
+ },
41
+ "dependencies": {
42
+ "@koishijs/plugin-http": "^0.6.0"
43
+ },
44
+ "devDependencies": {
45
+ "koishi": "^4.0.0",
46
+ "typescript": "^5.0.0"
47
+ }
48
+ }