添加live2d模型自定义 (#374)

* 修复后台API反代地址未能正确显示的问题

* 更新渲染页面配置

* 添加个人聊天模式配置

* 将用户数据获取改到common中

* 修复错误的渲染页面参数

* 修复bug

* 添加Live2D

* 修复渲染页面错误

* 修复渲染传入值

* 更新渲染

* 修复图表渲染bug

* 调整live2d模型大小

* 修复live2d无法关闭问题

* 修复错误的传值

* 修复ai命名

* 更新渲染

* 添加用户独立设定

* 更新渲染配置适配个人设置

* 修复合并导致的渲染文件异常删除

* 修复用户数据缺失问题

* 修复旧版本数据缺失问题

* 修复bing参数不存在问题,兼容miao的截图

* 修复受限token重试时不被排除的问题

* 修复个人模式下结束对话的模式错误

* 更新渲染页面,将预览版转为正式版

* 修复传统渲染无法调用截图功能的问题
This commit is contained in:
HalcyonAlcedo 2023-04-19 23:40:52 +08:00 committed by GitHub
parent 36a51856c5
commit 73c88cce83
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
61 changed files with 170 additions and 68 deletions

View file

@ -216,7 +216,8 @@ export class chatgpt extends plugin {
* @returns {Promise<void>}
*/
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') {
// let client = new SlackClaudeClient({
// slackUserToken: Config.slackUserToken,
@ -1073,7 +1074,7 @@ export class chatgpt extends plugin {
async renderImage (e, use, content, prompt, quote = [], mood = '', suggest = '', imgUrls = []) {
let cacheData = { file: '', cacheUrl: Config.cacheUrl }
const template = use !== 'bing' ? 'content/ChatGPT/index' : 'content/Bing/index'
if (Config.preview) {
if (!Config.oldview) {
cacheData.file = randomString()
const cacheresOption = {
method: 'POST',

View file

@ -321,7 +321,7 @@ export class help extends plugin {
}
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) {

View file

@ -580,12 +580,12 @@ export function supportGuoba () {
component: 'Input'
},
{
label: '以下为预览版配置',
label: '以下为后台与渲染相关配置',
component: 'Divider'
},
{
field: 'preview',
label: '预览版本',
field: 'oldview',
label: '旧版本渲染',
bottomHelpMessage: '开启预览版本',
component: 'Switch'
},
@ -624,7 +624,19 @@ export function supportGuoba () {
label: '允许群获取后台地址',
bottomHelpMessage: '是否允许群获取后台地址,关闭后将只能私聊获取',
component: 'Switch'
}
},
{
field: 'live2d',
label: 'Live2D显示',
bottomHelpMessage: '开启Live2D显示',
component: 'Switch'
},
{
field: 'live2dModel',
label: 'Live2D模型',
bottomHelpMessage: '选择Live2D使用的模型',
component: 'Input'
},
],
// 获取配置数据方法(用于前端填充显示数据)
getConfigData () {

View file

@ -115,6 +115,93 @@
"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",

View file

@ -80,7 +80,7 @@ export async function createServer() {
const stream = fs.createReadStream('plugins/chatgpt-plugin/server/static/index.html')
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 user = usertoken.find(user => user.token === token)
if (!user) {
@ -206,6 +206,7 @@ export async function createServer() {
model: body.model,
mood: body.content.mood || 'blandness',
live2d: Config.live2d,
live2dModel: Config.live2dModel,
time: new Date()
}
fs.writeFileSync(filepath, JSON.stringify(data))

View file

@ -17,4 +17,4 @@
* 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>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -6,7 +6,7 @@ import fs from 'node:fs'
import path from 'node:path'
import buffer from 'buffer'
import yaml from 'yaml'
// import puppeteer from '../../../lib/puppeteer/puppeteer.js'
import puppeteer from '../../../lib/puppeteer/puppeteer.js'
import { Config } from './config.js'
// export function markdownToText (markdown) {
// return remark()
@ -15,7 +15,7 @@ import { Config } from './config.js'
// .toString()
// }
let puppeteer
let _puppeteer
try {
const Puppeteer = (await import('../../../renderers/puppeteer/lib/puppeteer.js')).default
let puppeteerCfg = {}
@ -27,10 +27,10 @@ try {
puppeteerCfg = {}
}
}
puppeteer = new Puppeteer(puppeteerCfg)
_puppeteer = new Puppeteer(puppeteerCfg)
} catch (e) {
logger.warn('未能加载puppeteer尝试降级到Yunzai的puppeteer尝试')
puppeteer = (await import('../../../lib/puppeteer/puppeteer.js')).default
_puppeteer = puppeteer
}
let localIP = ''
@ -326,8 +326,8 @@ export async function render (e, pluginKey, htmlPath, data = {}, renderCfg = {})
}
export async function renderUrl (e, url, renderCfg = {}) {
await puppeteer.browserInit()
const page = await puppeteer.browser.newPage()
await _puppeteer.browserInit()
const page = await _puppeteer.browser.newPage()
let base64
try {
await page.goto(url, { timeout: 120000 })
@ -342,10 +342,10 @@ export async function renderUrl (e, url, renderCfg = {}) {
} catch (error) {
logger.error(`${url}图片生成失败:${error}`)
/** 关闭浏览器 */
if (puppeteer.browser) {
await puppeteer.browser.close().catch((err) => logger.error(err))
if (_puppeteer.browser) {
await _puppeteer.browser.close().catch((err) => logger.error(err))
}
puppeteer.browser = false
_puppeteer.browser = false
}
if (renderCfg.retType === 'base64') {

View file

@ -81,13 +81,14 @@ const defaultConfig = {
maxNumUserMessagesInConversation: 20,
sydneyApologyIgnored: true,
enforceMaster: false,
preview: false,
oldview: false,
serverPort: 3321,
serverHost: '',
viewHost: '',
chatViewWidth: 1280,
chatViewBotName: '',
live2d: true,
live2dModel: 'default',
groupAdminPage: false,
enablePrivateChat: false,
groupWhitelist: [],