mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 21:37:11 +00:00
独立render功能,图片模式添加引用回复 (#204)
* 修复引用转发,默认bing模式并发 * 开启stream增加稳定性 * fix: remove queue element only in non-bing mode * 使用chatgpt-api自带的超时逻辑,文字过多时启动切换到图片输出防止被吞 * Update chat.js * 添加Bing专用的图片输出样式 * 添加chatgpt的新图片模式,临时处理切换api导致的对话异常 * 修改bing样式表 * 为图片添加外部页面缓存 * 为图片模式添加MathJax * feat: add switch for qrcode * 防止script攻击 * 修复网页模板错误 * 修复bing页面引用错误 * 缓存服务器异常时处理 * 添加默认配置加载 * 修复配置文件路径错误 * 删除重复的模板文件,修复二维码地址错误 * 修正图片渲染错误 * 修复引用渲染错误 * 二维码网址统一改为使用本地配置 * 添加关闭思考提示的配置项 * 修复在Windows上无法载入配置文件的问题 * 修复关闭qr的情况下渲染错误 * 改为使用base64传递返回数据 * 当异常过多时使用图片输出 * 添加锅巴面板配置支持 * 补充遗漏的默认配置 * 修复qr模式下引用未被传递的问题 * 修复未将引用数据传输给缓存服务器的问题 * 删除无用的bingTimeoutMs配置项 * 添加消息队列超时弹出 * 优化图片模式处理,解决对话队列卡住的问题 * 添加对图片ocr的支持 * 添加图片识别配置项 * 添加黑名单配置项 * 修复一些bug * 修改锅巴配置格式和描述 * 传入数据也使用markdown * 图片识别换行改为marked兼容 * 添加绘图CD配置项 * 独立render模块,添加图片回复引用 --------- Co-authored-by: ikechan8370 <geyinchibuaa@gmail.com>
This commit is contained in:
parent
eb25ba1bfa
commit
7b58f20578
6 changed files with 95 additions and 6 deletions
|
|
@ -4,6 +4,7 @@ import { exec } from 'child_process'
|
|||
import lodash from 'lodash'
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import puppeteer from '../../../lib/puppeteer/puppeteer.js'
|
||||
// export function markdownToText (markdown) {
|
||||
// return remark()
|
||||
// .use(stripMarkdown)
|
||||
|
|
@ -217,4 +218,72 @@ export function mkdirs (dirname) {
|
|||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param pluginKey plugin key
|
||||
* @param htmlPath html文件路径,相对于plugin resources目录
|
||||
* @param data 渲染数据
|
||||
* @param renderCfg 渲染配置
|
||||
* @param renderCfg.retType 返回值类型
|
||||
* * default/空:自动发送图片,返回true
|
||||
* * msgId:自动发送图片,返回msg id
|
||||
* * base64: 不自动发送图像,返回图像base64数据
|
||||
* @param renderCfg.beforeRender({data}) 可改写渲染的data数据
|
||||
* @returns {Promise<boolean>}
|
||||
*/
|
||||
export async function render (e, pluginKey, htmlPath, data = {}, renderCfg = {}) {
|
||||
// 处理传入的path
|
||||
htmlPath = htmlPath.replace(/.html$/, '')
|
||||
let paths = lodash.filter(htmlPath.split('/'), (p) => !!p)
|
||||
htmlPath = paths.join('/')
|
||||
// 创建目录
|
||||
const mkdir = (check) => {
|
||||
let currDir = `${process.cwd()}/data`
|
||||
for (let p of check.split('/')) {
|
||||
currDir = `${currDir}/${p}`
|
||||
if (!fs.existsSync(currDir)) {
|
||||
fs.mkdirSync(currDir)
|
||||
}
|
||||
}
|
||||
return currDir
|
||||
}
|
||||
mkdir(`html/${pluginKey}/${htmlPath}`)
|
||||
// 自动计算pluResPath
|
||||
let pluResPath = `../../../${lodash.repeat('../', paths.length)}plugins/${pluginKey}/resources/`
|
||||
// 渲染data
|
||||
data = {
|
||||
...data,
|
||||
_plugin: pluginKey,
|
||||
_htmlPath: htmlPath,
|
||||
pluResPath,
|
||||
tplFile: `./plugins/${pluginKey}/resources/${htmlPath}.html`,
|
||||
saveId: data.saveId || data.save_id || paths[paths.length - 1],
|
||||
pageGotoParams: {
|
||||
waitUntil: 'networkidle0'
|
||||
}
|
||||
}
|
||||
// 处理beforeRender
|
||||
if (renderCfg.beforeRender) {
|
||||
data = renderCfg.beforeRender({ data }) || data
|
||||
}
|
||||
// 保存模板数据
|
||||
if (process.argv.includes('web-debug')) {
|
||||
// debug下保存当前页面的渲染数据,方便模板编写与调试
|
||||
// 由于只用于调试,开发者只关注自己当时开发的文件即可,暂不考虑app及plugin的命名冲突
|
||||
let saveDir = mkdir(`ViewData/${pluginKey}`)
|
||||
let file = `${saveDir}/${data._htmlPath.split('/').join('_')}.json`
|
||||
fs.writeFileSync(file, JSON.stringify(data))
|
||||
}
|
||||
// 截图
|
||||
let base64 = await puppeteer.screenshot(`${pluginKey}/${htmlPath}`, data)
|
||||
if (renderCfg.retType === 'base64') {
|
||||
return base64
|
||||
}
|
||||
let ret = true
|
||||
if (base64) {
|
||||
ret = await e.reply(base64)
|
||||
}
|
||||
return renderCfg.retType === 'msgId' ? ret : true
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue