koishi-plugin-comic 1.0.11 → 1.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/lib/tools.js DELETED
@@ -1,317 +0,0 @@
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
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.TOOL_CLASSES = exports.ComicBrowseTool = exports.ComicCategoryTool = exports.ComicLeaderboardTool = exports.ComicDownloadTool = exports.ComicDetailTool = exports.ComicSearchTool = void 0;
37
- exports.registerComicTools = registerComicTools;
38
- const koishi_1 = require("koishi");
39
- const zod_1 = require("zod");
40
- const fs = __importStar(require("fs"));
41
- const path = __importStar(require("path"));
42
- const os = __importStar(require("os"));
43
- const url_1 = require("url");
44
- const comic_api_1 = require("./comic-api");
45
- // StructuredTool is provided at runtime by chatluna's @langchain/core dependency.
46
- // Using require() avoids TypeScript's deep generic recursion on @langchain/core 0.3.x types.
47
- // eslint-disable-next-line @typescript-eslint/no-var-requires
48
- const StructuredToolBase = require('@langchain/core/tools').StructuredTool;
49
- const srcLabel = (s) => (s === 'jm' ? '禁漫' : s === 'bika' ? '哔咔' : '');
50
- function getSession(config) {
51
- return config?.configurable?.session;
52
- }
53
- class ComicSearchTool extends StructuredToolBase {
54
- constructor(api) {
55
- super({});
56
- this.api = api;
57
- this.name = 'comic_search';
58
- this.description = '聚合搜索漫画(禁漫天堂 JM + 哔咔 Bika 双平台),返回匹配的漫画列表,含来源、ID、标题、作者。若漫画名称模糊、含缩写或拼写错误,请先用联网搜索工具确认其准确标题/别名/作者后再调用本工具。返回的 ID 可用于 comic_detail 或 comic_download。';
59
- this.schema = zod_1.z.object({
60
- keyword: zod_1.z.string().describe('搜索关键词,漫画名称、作者或角色名。'),
61
- });
62
- }
63
- async _call(input) {
64
- try {
65
- const result = await this.api.search(input.keyword);
66
- const jm = (result.all_results?.jm || []).map((c) => ({ ...c, source: 'jm' }));
67
- const bika = (result.all_results?.bika || []).map((c) => ({ ...c, source: 'bika' }));
68
- if (jm.length === 0 && bika.length === 0) {
69
- return JSON.stringify({ keyword: input.keyword, total: 0, message: '没有找到任何结果' });
70
- }
71
- return JSON.stringify({
72
- keyword: input.keyword,
73
- best_match: result.best_match || null,
74
- total: jm.length + bika.length,
75
- results: [...jm, ...bika].map((c) => ({
76
- source: c.source,
77
- source_label: srcLabel(c.source),
78
- id: c.id,
79
- title: c.title,
80
- author: c.author || '佚名',
81
- })),
82
- }, null, 2);
83
- }
84
- catch (e) {
85
- return `搜索失败: ${e.message}`;
86
- }
87
- }
88
- }
89
- exports.ComicSearchTool = ComicSearchTool;
90
- class ComicDetailTool extends StructuredToolBase {
91
- constructor(api) {
92
- super({});
93
- this.api = api;
94
- this.name = 'comic_detail';
95
- this.description = '查看单个漫画的详情和章节列表。需要提供来源(jm/bika)和漫画 ID(可从 comic_search 获得)。返回标题、作者、简介、章节数及章节 ID 列表。';
96
- this.schema = zod_1.z.object({
97
- source: zod_1.z.enum(['jm', 'bika']).describe("漫画来源:'jm'(禁漫天堂) 或 'bika'(哔咔)。"),
98
- id: zod_1.z.string().describe('漫画 ID。禁漫为纯数字,哔咔为 24 位十六进制字符串。'),
99
- });
100
- }
101
- async _call(input) {
102
- try {
103
- const detail = await this.api.detail(input.source, input.id);
104
- if (!detail?.title)
105
- return '未找到该漫画';
106
- return JSON.stringify({
107
- source: input.source,
108
- source_label: srcLabel(input.source),
109
- id: input.id,
110
- title: detail.title,
111
- author: detail.author || '佚名',
112
- description: (detail.description || '无描述').slice(0, 300),
113
- chapter_count: detail.chapters?.length || 0,
114
- chapters: (detail.chapters || []).slice(0, 50).map((ch) => ({ id: ch.id, name: ch.name })),
115
- }, null, 2);
116
- }
117
- catch (e) {
118
- return `获取详情失败: ${e.message}`;
119
- }
120
- }
121
- }
122
- exports.ComicDetailTool = ComicDetailTool;
123
- class ComicDownloadTool extends StructuredToolBase {
124
- constructor(api) {
125
- super({});
126
- this.api = api;
127
- this.name = 'comic_download';
128
- this.description = '下载漫画并将加密 PDF 发送到当前会话。可接受漫画 ID 或漫画名字(名字会自动搜索解析)。若名字不准确、带缩写或搜不到,请先用联网搜索工具确认准确名称后再调用。下载成功后会把 PDF 文件和解密密码发送给用户。';
129
- this.schema = zod_1.z.object({
130
- id: zod_1.z.string().describe('漫画 ID 或漫画名字。'),
131
- chapterId: zod_1.z.string().optional().describe('章节 ID,省略则下载第一话。'),
132
- });
133
- }
134
- async _call(input, _runManager, config) {
135
- const session = getSession(config);
136
- try {
137
- const resolved = await this.api.resolveTarget(input.id);
138
- if (!resolved)
139
- return '未找到相关漫画,请尝试其他关键词或提供正确的 ID。';
140
- const { source, id: targetId } = resolved;
141
- const detail = await this.api.detail(source, targetId);
142
- if (!detail?.title)
143
- return '未找到该漫画';
144
- if (!detail.chapters?.length)
145
- return '该漫画没有可下载的章节';
146
- const chapter = input.chapterId
147
- ? detail.chapters.find((c) => c.id === input.chapterId)
148
- : detail.chapters[0];
149
- if (!chapter)
150
- return `未找到章节 ${input.chapterId}`;
151
- const totalChapters = detail.chapters.length;
152
- const password = this.api.resolvePassword(source, targetId, chapter.id);
153
- const url = this.api.buildDownloadUrl(source, targetId, chapter.id, detail.title, chapter.name, password);
154
- const buffer = await this.api.downloadPdf(url);
155
- if (buffer.length < 100)
156
- return '下载失败:返回数据异常';
157
- const cleanTitle = source === 'jm' ? `jm${targetId}` : (0, comic_api_1.sanitizeFilename)(detail.title);
158
- const tempFilePath = path.join(os.tmpdir(), `${cleanTitle}.pdf`);
159
- await fs.promises.writeFile(tempFilePath, buffer);
160
- if (session) {
161
- try {
162
- await session.send(koishi_1.h.file((0, url_1.pathToFileURL)(tempFilePath).href));
163
- await session.send(`🔑 该 PDF 已加密,解密密码为:${password}`);
164
- }
165
- finally {
166
- fs.promises.unlink(tempFilePath).catch(() => { });
167
- }
168
- const more = totalChapters > 1 && !input.chapterId
169
- ? `(该漫画共 ${totalChapters} 话,本次发送第一话「${chapter.name}」,如需其他话请指定章节 ID)`
170
- : '';
171
- return `已将《${detail.title} - ${chapter.name}》的 PDF 发送到会话,解密密码:${password}。${more}`;
172
- }
173
- fs.promises.unlink(tempFilePath).catch(() => { });
174
- return '下载完成,但当前上下文无法发送文件。';
175
- }
176
- catch (e) {
177
- return `下载失败: ${e.message}`;
178
- }
179
- }
180
- }
181
- exports.ComicDownloadTool = ComicDownloadTool;
182
- class ComicLeaderboardTool extends StructuredToolBase {
183
- constructor(api) {
184
- super({});
185
- this.api = api;
186
- this.name = 'comic_leaderboard';
187
- this.description = '查看漫画排行榜,聚合禁漫天堂和哔咔两个平台。可指定时间范围:day(日榜)/week(周榜)/month(月榜)/total(总榜),默认 day。';
188
- this.schema = zod_1.z.object({
189
- mode: zod_1.z.enum(['day', 'week', 'month', 'total']).optional().describe('排行榜时间范围,默认 day。'),
190
- });
191
- }
192
- async _call(input) {
193
- const mode = input.mode || 'day';
194
- try {
195
- const [jm, bika] = await Promise.all([
196
- this.api.get('/api/jm/leaderboard', { mode }).catch(() => null),
197
- this.api.get('/api/bika/leaderboard', { mode }).catch(() => null),
198
- ]);
199
- return JSON.stringify({
200
- mode,
201
- jm: (jm?.success !== false && jm?.data) ? jm.data.map((c) => ({ id: c.id, title: c.title, author: c.author || '佚名' })) : [],
202
- bika: (bika?.success !== false && bika?.data) ? bika.data.map((c) => ({ id: c.id, title: c.title, author: c.author || '佚名' })) : [],
203
- }, null, 2);
204
- }
205
- catch (e) {
206
- return `获取排行榜失败: ${e.message}`;
207
- }
208
- }
209
- }
210
- exports.ComicLeaderboardTool = ComicLeaderboardTool;
211
- class ComicCategoryTool extends StructuredToolBase {
212
- constructor(api) {
213
- super({});
214
- this.api = api;
215
- this.name = 'comic_category';
216
- this.description = '按分类/标签浏览漫画,聚合禁漫天堂和哔咔两个平台。需要提供分类名称(如「单行本」「同人」「韩漫」等)。';
217
- this.schema = zod_1.z.object({
218
- name: zod_1.z.string().describe('分类名称。'),
219
- });
220
- }
221
- async _call(input) {
222
- try {
223
- const [jm, bika] = await Promise.all([
224
- this.api.get('/api/jm/category', { name: input.name }).catch(() => null),
225
- this.api.get('/api/bika/category', { name: input.name }).catch(() => null),
226
- ]);
227
- const jmData = (jm?.success !== false && jm?.data) ? jm.data : [];
228
- const bikaData = (bika?.success !== false && bika?.data) ? bika.data : [];
229
- if (jmData.length === 0 && bikaData.length === 0) {
230
- return JSON.stringify({ category: input.name, total: 0, message: `分类「${input.name}」暂无数据` });
231
- }
232
- return JSON.stringify({
233
- category: input.name,
234
- jm: jmData.map((c) => ({ id: c.id, title: c.title, author: c.author || '佚名' })),
235
- bika: bikaData.map((c) => ({ id: c.id, title: c.title, author: c.author || '佚名' })),
236
- }, null, 2);
237
- }
238
- catch (e) {
239
- return `获取分类失败: ${e.message}`;
240
- }
241
- }
242
- }
243
- exports.ComicCategoryTool = ComicCategoryTool;
244
- class ComicBrowseTool extends StructuredToolBase {
245
- constructor(api) {
246
- super({});
247
- this.api = api;
248
- this.name = 'comic_browse';
249
- this.description = '浏览漫画发现内容,聚合禁漫天堂和哔咔两个平台。mode=latest 查看最近更新,mode=random 获取随机推荐,默认 latest。';
250
- this.schema = zod_1.z.object({
251
- mode: zod_1.z.enum(['latest', 'random']).optional().describe("浏览模式:'latest'(最近更新) 或 'random'(随机推荐),默认 latest。"),
252
- });
253
- }
254
- async _call(input) {
255
- const mode = input.mode || 'latest';
256
- const endpoint = mode === 'random' ? 'random' : 'latest';
257
- try {
258
- const [jm, bika] = await Promise.all([
259
- this.api.get(`/api/jm/${endpoint}`).catch(() => null),
260
- this.api.get(`/api/bika/${endpoint}`).catch(() => null),
261
- ]);
262
- let jmData = (jm?.success !== false && jm?.data) ? jm.data : [];
263
- let bikaData = (bika?.success !== false && bika?.data) ? bika.data : [];
264
- if (mode === 'random') {
265
- jmData = jmData.length ? [jmData[Math.floor(Math.random() * jmData.length)]] : [];
266
- bikaData = bikaData.length ? [bikaData[Math.floor(Math.random() * bikaData.length)]] : [];
267
- }
268
- return JSON.stringify({
269
- mode,
270
- jm: jmData.map((c) => ({ id: c.id, title: c.title, author: c.author || '佚名' })),
271
- bika: bikaData.map((c) => ({ id: c.id, title: c.title, author: c.author || '佚名' })),
272
- }, null, 2);
273
- }
274
- catch (e) {
275
- return `浏览失败: ${e.message}`;
276
- }
277
- }
278
- }
279
- exports.ComicBrowseTool = ComicBrowseTool;
280
- exports.TOOL_CLASSES = [
281
- ComicSearchTool,
282
- ComicDetailTool,
283
- ComicDownloadTool,
284
- ComicLeaderboardTool,
285
- ComicCategoryTool,
286
- ComicBrowseTool,
287
- ];
288
- function registerComicTools(ctx, api) {
289
- for (const ToolClass of exports.TOOL_CLASSES) {
290
- const probe = new ToolClass(api);
291
- const toolName = probe.name;
292
- const toolDescription = probe.description;
293
- ctx.effect(() => ctx.chatluna.platform.registerTool(toolName, {
294
- name: toolName,
295
- description: toolDescription,
296
- selector() {
297
- return true;
298
- },
299
- createTool() {
300
- return new ToolClass(api);
301
- },
302
- meta: {
303
- source: 'extension',
304
- group: 'comic',
305
- tags: ['comic', 'manga', 'jmcomic', 'bika'],
306
- defaultAvailability: {
307
- enabled: true,
308
- main: true,
309
- chatluna: true,
310
- characterScope: 'all',
311
- },
312
- },
313
- }));
314
- }
315
- return exports.TOOL_CLASSES.length;
316
- }
317
- //# sourceMappingURL=tools.js.map
package/lib/tools.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}