添加live2d模型自定义 (#374)
* 修复后台API反代地址未能正确显示的问题 * 更新渲染页面配置 * 添加个人聊天模式配置 * 将用户数据获取改到common中 * 修复错误的渲染页面参数 * 修复bug * 添加Live2D * 修复渲染页面错误 * 修复渲染传入值 * 更新渲染 * 修复图表渲染bug * 调整live2d模型大小 * 修复live2d无法关闭问题 * 修复错误的传值 * 修复ai命名 * 更新渲染 * 添加用户独立设定 * 更新渲染配置适配个人设置 * 修复合并导致的渲染文件异常删除 * 修复用户数据缺失问题 * 修复旧版本数据缺失问题 * 修复bing参数不存在问题,兼容miao的截图 * 修复受限token重试时不被排除的问题 * 修复个人模式下结束对话的模式错误 * 更新渲染页面,将预览版转为正式版 * 修复传统渲染无法调用截图功能的问题
|
|
@ -216,7 +216,8 @@ export class chatgpt extends plugin {
|
||||||
* @returns {Promise<void>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
async destroyConversations (e) {
|
async destroyConversations (e) {
|
||||||
let use = await redis.get('CHATGPT:USE')
|
const userData = await getUserData(e.user_id)
|
||||||
|
const use = (userData.mode === 'default' ? null : userData.mode) || await redis.get('CHATGPT:USE')
|
||||||
if (use === 'claude') {
|
if (use === 'claude') {
|
||||||
// let client = new SlackClaudeClient({
|
// let client = new SlackClaudeClient({
|
||||||
// slackUserToken: Config.slackUserToken,
|
// slackUserToken: Config.slackUserToken,
|
||||||
|
|
@ -1073,7 +1074,7 @@ export class chatgpt extends plugin {
|
||||||
async renderImage (e, use, content, prompt, quote = [], mood = '', suggest = '', imgUrls = []) {
|
async renderImage (e, use, content, prompt, quote = [], mood = '', suggest = '', imgUrls = []) {
|
||||||
let cacheData = { file: '', cacheUrl: Config.cacheUrl }
|
let cacheData = { file: '', cacheUrl: Config.cacheUrl }
|
||||||
const template = use !== 'bing' ? 'content/ChatGPT/index' : 'content/Bing/index'
|
const template = use !== 'bing' ? 'content/ChatGPT/index' : 'content/Bing/index'
|
||||||
if (Config.preview) {
|
if (!Config.oldview) {
|
||||||
cacheData.file = randomString()
|
cacheData.file = randomString()
|
||||||
const cacheresOption = {
|
const cacheresOption = {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
|
|
||||||
|
|
@ -321,7 +321,7 @@ export class help extends plugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
async help (e) {
|
async help (e) {
|
||||||
if (Config.preview) { await renderUrl(e, `http://127.0.0.1:${Config.serverPort || 3321}/help/`, { Viewport: { width: 800, height: 600 } }) } else { await render(e, 'chatgpt-plugin', 'help/index', { helpData, version }) }
|
if (!Config.oldview) { await renderUrl(e, `http://127.0.0.1:${Config.serverPort || 3321}/help/`, { Viewport: { width: 800, height: 600 } }) } else { await render(e, 'chatgpt-plugin', 'help/index', { helpData, version }) }
|
||||||
}
|
}
|
||||||
|
|
||||||
async newHelp (e) {
|
async newHelp (e) {
|
||||||
|
|
|
||||||
|
|
@ -580,12 +580,12 @@ export function supportGuoba () {
|
||||||
component: 'Input'
|
component: 'Input'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '以下为预览版配置',
|
label: '以下为后台与渲染相关配置',
|
||||||
component: 'Divider'
|
component: 'Divider'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'preview',
|
field: 'oldview',
|
||||||
label: '预览版本',
|
label: '旧版本渲染',
|
||||||
bottomHelpMessage: '开启预览版本',
|
bottomHelpMessage: '开启预览版本',
|
||||||
component: 'Switch'
|
component: 'Switch'
|
||||||
},
|
},
|
||||||
|
|
@ -624,7 +624,19 @@ export function supportGuoba () {
|
||||||
label: '允许群获取后台地址',
|
label: '允许群获取后台地址',
|
||||||
bottomHelpMessage: '是否允许群获取后台地址,关闭后将只能私聊获取',
|
bottomHelpMessage: '是否允许群获取后台地址,关闭后将只能私聊获取',
|
||||||
component: 'Switch'
|
component: 'Switch'
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
field: 'live2d',
|
||||||
|
label: 'Live2D显示',
|
||||||
|
bottomHelpMessage: '开启Live2D显示',
|
||||||
|
component: 'Switch'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'live2dModel',
|
||||||
|
label: 'Live2D模型',
|
||||||
|
bottomHelpMessage: '选择Live2D使用的模型',
|
||||||
|
component: 'Input'
|
||||||
|
},
|
||||||
],
|
],
|
||||||
// 获取配置数据方法(用于前端填充显示数据)
|
// 获取配置数据方法(用于前端填充显示数据)
|
||||||
getConfigData () {
|
getConfigData () {
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,93 @@
|
||||||
"tip": "管理员功能"
|
"tip": "管理员功能"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"设定": [
|
||||||
|
{
|
||||||
|
"icon": "fas fa-paint-brush",
|
||||||
|
"title": "查看设定列表",
|
||||||
|
"text": "查看所有设定列表,以转发消息形式",
|
||||||
|
"list": [
|
||||||
|
"#chatgpt设定列表"
|
||||||
|
],
|
||||||
|
"tip": "管理员功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": "fas fa-paint-brush",
|
||||||
|
"title": "查看设定",
|
||||||
|
"text": "查看指定名字的设定内容。其中API默认和Sydney默认为锅巴面板配置的设定",
|
||||||
|
"list": [
|
||||||
|
"#chatgpt查看设定<设定名>"
|
||||||
|
],
|
||||||
|
"tip": "管理员功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": "fas fa-toggle-on",
|
||||||
|
"title": "添加设定",
|
||||||
|
"text": "添加一个设定,分此输入设定名称和设定内容。如果名字已存在,则会覆盖(相当于修改)",
|
||||||
|
"list": [
|
||||||
|
"#chatgpt添加设定"
|
||||||
|
],
|
||||||
|
"tip": "管理员功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": "fas fa-toggle-on",
|
||||||
|
"title": "使用设定",
|
||||||
|
"text": "使用某个设定。",
|
||||||
|
"list": [
|
||||||
|
"#chatgpt使用设定<设定名>"
|
||||||
|
],
|
||||||
|
"tip": "管理员功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": "fas fa-toggle-on",
|
||||||
|
"title": "上传设定",
|
||||||
|
"text": "上传设定",
|
||||||
|
"list": [
|
||||||
|
"#chatgpt上传设定",
|
||||||
|
"#chatgpt分享设定",
|
||||||
|
"#chatgpt共享设定"
|
||||||
|
],
|
||||||
|
"tip": "管理员功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": "fas fa-toggle-on",
|
||||||
|
"title": "删除共享设定",
|
||||||
|
"text": "从远端删除,只能删除自己上传的设定,根据机器人主人qq号判断。",
|
||||||
|
"list": [
|
||||||
|
"#chatgpt删除共享设定<设定名>",
|
||||||
|
"#chatgpt取消共享设定<设定名>",
|
||||||
|
"#chatgpt撤销共享设定<设定名>"
|
||||||
|
],
|
||||||
|
"tip": "管理员功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": "fas fa-toggle-on",
|
||||||
|
"title": "搜索设定",
|
||||||
|
"text": "搜索公开的设定。默认返回前十条,使用页码X可以翻页,使用关键词可以检索。页码从1开始。",
|
||||||
|
"list": [
|
||||||
|
"#chatgpt(在线)浏览设定(+关键词)(页码X)"
|
||||||
|
],
|
||||||
|
"tip": "管理员功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": "fas fa-toggle-on",
|
||||||
|
"title": "预览设定详情",
|
||||||
|
"text": "根据设定名称预览云端设定的详情信息。",
|
||||||
|
"list": [
|
||||||
|
"#chatgpt预览设定详情<设定名>"
|
||||||
|
],
|
||||||
|
"tip": "管理员功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": "fas fa-toggle-on",
|
||||||
|
"title": "导入设定",
|
||||||
|
"text": "导入其他人分享的设定。注意:相同名字的设定,会覆盖本地已有的设定",
|
||||||
|
"list": [
|
||||||
|
"#chatgpt导入设定"
|
||||||
|
],
|
||||||
|
"tip": "管理员功能"
|
||||||
|
}
|
||||||
|
],
|
||||||
"插件管理": [
|
"插件管理": [
|
||||||
{
|
{
|
||||||
"icon": "fas fa-list",
|
"icon": "fas fa-list",
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ export async function createServer() {
|
||||||
const stream = fs.createReadStream('plugins/chatgpt-plugin/server/static/index.html')
|
const stream = fs.createReadStream('plugins/chatgpt-plugin/server/static/index.html')
|
||||||
reply.type('text/html').send(stream)
|
reply.type('text/html').send(stream)
|
||||||
})
|
})
|
||||||
await server.get('/admin/*', (request, reply) => {
|
await server.get('/admin*', (request, reply) => {
|
||||||
const token = request.cookies.token || 'unknown'
|
const token = request.cookies.token || 'unknown'
|
||||||
const user = usertoken.find(user => user.token === token)
|
const user = usertoken.find(user => user.token === token)
|
||||||
if (!user) {
|
if (!user) {
|
||||||
|
|
@ -206,6 +206,7 @@ export async function createServer() {
|
||||||
model: body.model,
|
model: body.model,
|
||||||
mood: body.content.mood || 'blandness',
|
mood: body.content.mood || 'blandness',
|
||||||
live2d: Config.live2d,
|
live2d: Config.live2d,
|
||||||
|
live2dModel: Config.live2dModel,
|
||||||
time: new Date()
|
time: new Date()
|
||||||
}
|
}
|
||||||
fs.writeFileSync(filepath, JSON.stringify(data))
|
fs.writeFileSync(filepath, JSON.stringify(data))
|
||||||
|
|
|
||||||
|
|
@ -17,4 +17,4 @@
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width,initial-scale=1"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="apple-touch-icon" sizes="76x76" href="/apple-icon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css"/><script src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.6.3/mermaid.min.js"></script><title>ChatGPT-Plugin</title><script defer="defer" type="module" src="/js/chunk-vendors.0c5008ba.js"></script><script defer="defer" type="module" src="/js/app.19884e8a.js"></script><link href="/css/chunk-vendors.0ede84b4.css" rel="stylesheet"><link href="/css/app.db850df4.css" rel="stylesheet"><script defer="defer" src="/js/chunk-vendors-legacy.d7bc9e51.js" nomodule></script><script defer="defer" src="/js/app-legacy.71dc29c8.js" nomodule></script></head><body class="text-blueGray-700 antialiased"><noscript><strong>We're sorry but vue-notus doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width,initial-scale=1"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="apple-touch-icon" sizes="76x76" href="/apple-icon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css"/><script src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.6.3/mermaid.min.js"></script><title>ChatGPT-Plugin</title><script defer="defer" type="module" src="/js/chunk-vendors.59d1ab94.js"></script><script defer="defer" type="module" src="/js/app.e532d95e.js"></script><link href="/css/chunk-vendors.0ede84b4.css" rel="stylesheet"><link href="/css/app.db850df4.css" rel="stylesheet"><script defer="defer" src="/js/chunk-vendors-legacy.40504512.js" nomodule></script><script defer="defer" src="/js/app-legacy.1aff05a1.js" nomodule></script></head><body class="text-blueGray-700 antialiased"><noscript><strong>We're sorry but vue-notus doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
|
||||||
21
server/static/js/app-legacy.1aff05a1.js
Normal file
1
server/static/js/app-legacy.1aff05a1.js.map
Normal file
21
server/static/js/app.e532d95e.js
Normal file
1
server/static/js/app.e532d95e.js.map
Normal file
1
server/static/js/chunk-vendors-legacy.40504512.js.map
Normal file
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 217 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
|
|
@ -6,7 +6,7 @@ import fs from 'node:fs'
|
||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import buffer from 'buffer'
|
import buffer from 'buffer'
|
||||||
import yaml from 'yaml'
|
import yaml from 'yaml'
|
||||||
// import puppeteer from '../../../lib/puppeteer/puppeteer.js'
|
import puppeteer from '../../../lib/puppeteer/puppeteer.js'
|
||||||
import { Config } from './config.js'
|
import { Config } from './config.js'
|
||||||
// export function markdownToText (markdown) {
|
// export function markdownToText (markdown) {
|
||||||
// return remark()
|
// return remark()
|
||||||
|
|
@ -15,7 +15,7 @@ import { Config } from './config.js'
|
||||||
// .toString()
|
// .toString()
|
||||||
// }
|
// }
|
||||||
|
|
||||||
let puppeteer
|
let _puppeteer
|
||||||
try {
|
try {
|
||||||
const Puppeteer = (await import('../../../renderers/puppeteer/lib/puppeteer.js')).default
|
const Puppeteer = (await import('../../../renderers/puppeteer/lib/puppeteer.js')).default
|
||||||
let puppeteerCfg = {}
|
let puppeteerCfg = {}
|
||||||
|
|
@ -27,10 +27,10 @@ try {
|
||||||
puppeteerCfg = {}
|
puppeteerCfg = {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
puppeteer = new Puppeteer(puppeteerCfg)
|
_puppeteer = new Puppeteer(puppeteerCfg)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.warn('未能加载puppeteer,尝试降级到Yunzai的puppeteer尝试')
|
logger.warn('未能加载puppeteer,尝试降级到Yunzai的puppeteer尝试')
|
||||||
puppeteer = (await import('../../../lib/puppeteer/puppeteer.js')).default
|
_puppeteer = puppeteer
|
||||||
}
|
}
|
||||||
|
|
||||||
let localIP = ''
|
let localIP = ''
|
||||||
|
|
@ -326,8 +326,8 @@ export async function render (e, pluginKey, htmlPath, data = {}, renderCfg = {})
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function renderUrl (e, url, renderCfg = {}) {
|
export async function renderUrl (e, url, renderCfg = {}) {
|
||||||
await puppeteer.browserInit()
|
await _puppeteer.browserInit()
|
||||||
const page = await puppeteer.browser.newPage()
|
const page = await _puppeteer.browser.newPage()
|
||||||
let base64
|
let base64
|
||||||
try {
|
try {
|
||||||
await page.goto(url, { timeout: 120000 })
|
await page.goto(url, { timeout: 120000 })
|
||||||
|
|
@ -342,10 +342,10 @@ export async function renderUrl (e, url, renderCfg = {}) {
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`${url}图片生成失败:${error}`)
|
logger.error(`${url}图片生成失败:${error}`)
|
||||||
/** 关闭浏览器 */
|
/** 关闭浏览器 */
|
||||||
if (puppeteer.browser) {
|
if (_puppeteer.browser) {
|
||||||
await puppeteer.browser.close().catch((err) => logger.error(err))
|
await _puppeteer.browser.close().catch((err) => logger.error(err))
|
||||||
}
|
}
|
||||||
puppeteer.browser = false
|
_puppeteer.browser = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (renderCfg.retType === 'base64') {
|
if (renderCfg.retType === 'base64') {
|
||||||
|
|
|
||||||
|
|
@ -81,13 +81,14 @@ const defaultConfig = {
|
||||||
maxNumUserMessagesInConversation: 20,
|
maxNumUserMessagesInConversation: 20,
|
||||||
sydneyApologyIgnored: true,
|
sydneyApologyIgnored: true,
|
||||||
enforceMaster: false,
|
enforceMaster: false,
|
||||||
preview: false,
|
oldview: false,
|
||||||
serverPort: 3321,
|
serverPort: 3321,
|
||||||
serverHost: '',
|
serverHost: '',
|
||||||
viewHost: '',
|
viewHost: '',
|
||||||
chatViewWidth: 1280,
|
chatViewWidth: 1280,
|
||||||
chatViewBotName: '',
|
chatViewBotName: '',
|
||||||
live2d: true,
|
live2d: true,
|
||||||
|
live2dModel: 'default',
|
||||||
groupAdminPage: false,
|
groupAdminPage: false,
|
||||||
enablePrivateChat: false,
|
enablePrivateChat: false,
|
||||||
groupWhitelist: [],
|
groupWhitelist: [],
|
||||||
|
|
|
||||||