mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-17 05:47:11 +00:00
178 lines
5.5 KiB
JavaScript
178 lines
5.5 KiB
JavaScript
import { Chaite } from 'chaite'
|
|
import common from '../../../lib/common/common.js'
|
|
import ChatGPTConfig from '../config/config.js'
|
|
import { getBotFramework } from './bot.js'
|
|
/**
|
|
* 模板
|
|
* @param cmdPrefix
|
|
* @param name
|
|
* @param variable
|
|
* @param detail
|
|
* @returns {{reg: string, fnc: string}[]}
|
|
*/
|
|
export function createCRUDCommandRules (cmdPrefix, name, variable, detail = true) {
|
|
// make the first letter of variable capable
|
|
const upperVariable = variable.charAt(0).toUpperCase() + variable.slice(1)
|
|
const rules = [
|
|
{
|
|
reg: cmdPrefix + `${name}列表$`,
|
|
fnc: `list${upperVariable}`
|
|
},
|
|
{
|
|
reg: cmdPrefix + `(编辑|修改)${name}`,
|
|
fnc: `edit${upperVariable}`
|
|
},
|
|
{
|
|
reg: cmdPrefix + `(添加|新增)${name}$`,
|
|
fnc: `add${upperVariable}`
|
|
},
|
|
{
|
|
reg: cmdPrefix + `删除${name}`,
|
|
fnc: `remove${upperVariable}`
|
|
}
|
|
]
|
|
const manager = getManagerByName(upperVariable)
|
|
if (detail) {
|
|
rules.push({
|
|
reg: cmdPrefix + `${name}详情`,
|
|
fnc: `detail${upperVariable}`
|
|
})
|
|
this[`detail${upperVariable}`] = async function (e) {
|
|
const verbose = !e.isGroup
|
|
const id = e.msg.replace(new RegExp(cmdPrefix + `${name}详情`), '')
|
|
const instance = await manager.getInstance(id)
|
|
if (instance) {
|
|
e.reply(instance.toFormatedString(verbose))
|
|
} else {
|
|
e.reply(`${name}不存在`)
|
|
}
|
|
}
|
|
}
|
|
// todo
|
|
// 定义对应的函数
|
|
this[`list${upperVariable}`] = async function (e) {
|
|
const verbose = !e.isGroup
|
|
if (manager) {
|
|
const instances = await manager.listInstances()
|
|
if (instances.length === 0) {
|
|
e.reply(`暂无${name}`)
|
|
return true
|
|
}
|
|
const msgs = instances.map(i => {
|
|
return i.toFormatedString(verbose)
|
|
})
|
|
const forwardedMsg = await common.makeForwardMsg(e, msgs, `${name}列表`)
|
|
this.reply(forwardedMsg)
|
|
}
|
|
}
|
|
this[`edit${upperVariable}`] = async function (e) {
|
|
this.reply(`暂不支持编辑${name},请使用后台管理面板编辑`)
|
|
}
|
|
this[`add${upperVariable}`] = async function (e) {
|
|
if (manager) {
|
|
this.reply(`暂不支持添加${name},请使用后台管理面板添加`)
|
|
} else {
|
|
if (variable in ChatGPTConfig.llm) {
|
|
/** @type {string[]} */
|
|
const list = ChatGPTConfig.llm[variable]
|
|
const id = e.msg.replace(new RegExp(cmdPrefix + `(添加|新增)${name}`), '')
|
|
if (list.indexOf(id) > 0) {
|
|
e.reply(`${name}已存在`)
|
|
} else {
|
|
list.push(id)
|
|
e.reply(`已添加${name}`)
|
|
}
|
|
}
|
|
if (variable in ChatGPTConfig.management) {
|
|
if ((/** @type {string[]} **/ChatGPTConfig.management[variable]).indexOf(id) > 0) {
|
|
e.reply(`${name}已存在`)
|
|
} else {
|
|
(/** @type {string[]} **/ChatGPTConfig.management[variable]).push(id)
|
|
e.reply(`已添加${name}`)
|
|
}
|
|
} else {
|
|
e.reply(`暂不支持添加${name},请使用后台管理面板添加`)
|
|
}
|
|
}
|
|
}
|
|
this[`remove${upperVariable}`] = async function (e) {
|
|
const id = e.msg.replace(new RegExp(cmdPrefix + `删除${name}`), '')
|
|
if (manager) {
|
|
const instance = await manager.getInstance(id)
|
|
if (instance) {
|
|
await manager.deleteInstance(id)
|
|
e.reply(`已删除${name}`)
|
|
} else {
|
|
e.reply(`${name}不存在`)
|
|
}
|
|
} else {
|
|
if (variable in ChatGPTConfig.llm) {
|
|
if ((/** @type {string[]} **/ChatGPTConfig.llm[variable]).indexOf(id) > 0) {
|
|
(/** @type {string[]} **/ChatGPTConfig.llm[variable]).splice(
|
|
(/** @type {string[]} **/ChatGPTConfig.llm[variable]).indexOf(id),
|
|
1
|
|
)
|
|
e.reply(`已删除${name}`)
|
|
} else {
|
|
e.reply(`${name}不存在`)
|
|
}
|
|
} else if (variable in ChatGPTConfig.management) {
|
|
if ((/** @type {string[]} **/ChatGPTConfig.management[variable]).indexOf(id) > 0) {
|
|
(/** @type {string[]} **/ChatGPTConfig.management[variable]).splice(
|
|
(/** @type {string[]} **/ChatGPTConfig.management[variable]).indexOf(id),
|
|
1
|
|
)
|
|
e.reply(`已删除${name}`)
|
|
} else {
|
|
e.reply(`${name}不存在`)
|
|
}
|
|
} else {
|
|
e.reply(`暂不支持删除${name},请使用后台管理面板删除`)
|
|
}
|
|
}
|
|
}
|
|
if (getBotFramework() === 'trss') {
|
|
rules.forEach(rule => {
|
|
rule.reg = new RegExp(rule.reg)
|
|
})
|
|
}
|
|
return rules
|
|
}
|
|
|
|
/**
|
|
* 获取管理器
|
|
* @param {string} name
|
|
* @returns {import('chaite').NonExecutableShareableManager | import('chaite').ExecutableShareableManager | null}
|
|
*/
|
|
function getManagerByName (name) {
|
|
switch (name.toLowerCase()) {
|
|
case 'channels': {
|
|
return Chaite.getInstance().getChannelsManager()
|
|
}
|
|
case 'presets': {
|
|
return Chaite.getInstance().getChatPresetManager()
|
|
}
|
|
case 'processors': {
|
|
return Chaite.getInstance().getProcessorsManager()
|
|
}
|
|
case 'tools': {
|
|
return Chaite.getInstance().getToolsManager()
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
const switchCommandPreset = {
|
|
0: ['开启', '关闭'],
|
|
1: ['允许', '禁止']
|
|
}
|
|
export function createSwitchCommandRules (cmdPrefix, name, variable, preset = 0) {
|
|
const upperVariable = variable.charAt(0).toUpperCase() + variable.slice(1)
|
|
const rule = {
|
|
reg: cmdPrefix + `(${switchCommandPreset[preset][0]}|${switchCommandPreset[preset][1]})${name}$`,
|
|
fnc: `switch${upperVariable}`
|
|
}
|
|
if (getBotFramework() === 'trss') {
|
|
rule.reg = new RegExp(rule.reg)
|
|
}
|
|
return rule
|
|
}
|