From 73a817329fb33fc20c3c0fb57776903a55b72aee Mon Sep 17 00:00:00 2001 From: baiyu-yu <135424680+baiyu-yu@users.noreply.github.com> Date: Mon, 24 Nov 2025 16:36:04 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=E4=BF=AE=E6=94=B9tti=E8=BF=94?= =?UTF-8?q?=E5=9B=9Eurl=EF=BC=8C=E6=B7=BB=E5=8A=A0tti=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tool/tool_image.ts | 66 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 5 deletions(-) diff --git a/src/tool/tool_image.ts b/src/tool/tool_image.ts index 0bd7728..6519a97 100644 --- a/src/tool/tool_image.ts +++ b/src/tool/tool_image.ts @@ -1,7 +1,9 @@ +import { AIManager } from "../AI/AI"; import { Image } from "../AI/image"; import { logger } from "../logger"; import { ConfigManager } from "../config/configManager"; import { Tool } from "./tool"; +import { generateId } from "../utils/utils"; export function registerImage() { const toolITT = new Tool({ @@ -102,14 +104,22 @@ export function registerImage() { negative_prompt: { type: 'string', description: '不希望图片中出现的内容描述' + }, + save: { + type: "boolean", + description: "是否保存图片" + }, + name: { + type: "string", + description: "如果保存图片,图片的名称" } }, - required: ['prompt'] + required: ['prompt' , 'save' , 'name'] } } }); - toolTTI.solve = async (ctx, msg, _, args) => { - const { prompt, negative_prompt } = args; + toolTTI.solve = async (ctx, msg, ai, args) => { + const { prompt, negative_prompt, save, name } = args; const ext = seal.ext.find('AIDrawing'); if (!ext) { @@ -117,9 +127,55 @@ export function registerImage() { return { content: `未找到AIDrawing依赖,请提示用户安装AIDrawing依赖`, images: [] }; } + // 切换到当前会话ai + if (!ctx.isPrivate) ai = AIManager.getAI(ctx.group.groupId); + + const kws = ["tti", name]; + try { - await globalThis.aiDrawing.generateImage(prompt, ctx, msg, negative_prompt); - return { content: `图像生成请求已发送`, images: [] }; + // 新版 AIDrawing + if (globalThis.aiDrawing && typeof globalThis.aiDrawing.sendImageRequest === 'function') { + const imageUrl = await globalThis.aiDrawing.sendImageRequest(prompt, negative_prompt); + + const img = new Image(); + img.id = `${name}_${generateId()}`; + + if (save) { + img.file = imageUrl; + try { + await img.urlToBase64(); + } catch (e) { + logger.error(`将图片URL转换为base64失败: ${e}`); + img.file = imageUrl; + } + } else { + img.file = imageUrl; + } + + img.format = img.format || 'unknown'; + img.content = `AI绘图<|img:${img.id}|>\n${prompt ? `描述: ${prompt}` : '' }\n${negative_prompt ? `不希望出现: ${negative_prompt}` : '' }`; + + if (save) ai.memory.addMemory(ctx, ai, [], [], kws, [img], img.content); + + return { content: `生成成功,请使用<|img:${img.id}|>发送`, images: [img] }; + } + + // 兼容旧版 AIDrawing + if (globalThis.aiDrawing && typeof globalThis.aiDrawing.generateImage === 'function') { + try { + await globalThis.aiDrawing.generateImage(prompt, ctx, msg, negative_prompt); + if (save) { + logger.warning('旧版 AIDrawing,无法直接保存图片'); + return { content: `图像生成请求已发送`, images: [] }; + } + return { content: `图像生成请求已发送`, images: [] }; + } catch (e) { + logger.error(`图像生成失败::${e}`); + return { content: `图像生成失败:${e}`, images: [] }; + } + } + logger.error('未找到可用的 AIDrawing 接口,AIDrawing插件可能存在问题'); + return { content: `未找到可用的 AIDrawing 接口, AIDrawing插件可能存在问题`, images: [] }; } catch (e) { logger.error(`图像生成失败:${e}`); return { content: `图像生成失败:${e}`, images: [] }; From 00d89637efabe11e3fd8d536f78fb04a33cd5ee0 Mon Sep 17 00:00:00 2001 From: baiyu-yu <135424680+baiyu-yu@users.noreply.github.com> Date: Wed, 10 Dec 2025 09:10:31 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0tti=E8=BF=94?= =?UTF-8?q?=E5=9B=9Ebase64=E7=9A=84=E6=83=85=E5=86=B5=E5=A4=84=E7=90=86?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E7=AE=A1=E6=98=AF=E5=90=A6=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E9=83=BD=E5=B0=86=E5=9B=BE=E7=89=87url=E8=BD=AC=E4=B8=BAbase64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tool/tool_image.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/tool/tool_image.ts b/src/tool/tool_image.ts index 47f1d3b..fc83e6c 100644 --- a/src/tool/tool_image.ts +++ b/src/tool/tool_image.ts @@ -85,21 +85,18 @@ export function registerImage() { try { // 新版 AIDrawing if (globalThis.aiDrawing && typeof globalThis.aiDrawing.sendImageRequest === 'function') { - const imageUrl = await globalThis.aiDrawing.sendImageRequest(prompt, negative_prompt); - + const result = await globalThis.aiDrawing.sendImageRequest(prompt, negative_prompt); const img = new Image(); img.id = `${name}_${generateId()}`; - - if (save) { - img.file = imageUrl; + if (result.startsWith("http://") || result.startsWith("https://")) { try { await img.urlToBase64(); } catch (e) { logger.error(`将图片URL转换为base64失败: ${e}`); - img.file = imageUrl; + img.file = result; } } else { - img.file = imageUrl; + img.file = result; } img.format = img.format || 'unknown';