feat: claude的设定

This commit is contained in:
ikechan8370 2023-04-17 12:48:01 +08:00
parent a2d903a2ae
commit 06fd121950
5 changed files with 79 additions and 8 deletions

View file

@ -27,6 +27,7 @@ import ChatGLMClient from '../utils/chatglm.js'
import { convertFaces } from '../utils/face.js'
import uploadRecord from '../utils/uploadRecord.js'
import {SlackClaudeClient} from "../utils/slack/slackClient.js";
import {getPromptByName} from "../utils/prompts.js";
try {
await import('keyv')
} catch (err) {
@ -174,6 +175,10 @@ export class chatgpt extends plugin {
reg: '^#chatgpt删除对话',
fnc: 'deleteConversation',
permission: 'master'
},
{
reg: '^#claude开启新对话',
fnc: 'newClaudeConversation'
}
]
})
@ -1390,6 +1395,14 @@ export class chatgpt extends plugin {
slackUserToken: Config.slackUserToken,
slackChannelId: Config.slackChannelId
})
let conversationId = await redis.get(`CHATGPT:SLACK_CONVERSATION:${e.sender.user_id}`)
if (!conversationId) {
// 如果是新对话
if (Config.slackClaudeEnableGlobalPreset && Config.slackClaudeGlobalPreset) {
// 先发送设定
await client.sendMessage(Config.slackClaudeGlobalPreset, e)
}
}
let text = await client.sendMessage(prompt, e)
return {
text
@ -1449,6 +1462,39 @@ export class chatgpt extends plugin {
}
}
async newClaudeConversation (e) {
let presetName = e.msg.replace(/^#claude开启新对话/, '').trim()
let client = new SlackClaudeClient({
slackUserToken: Config.slackUserToken,
slackChannelId: Config.slackChannelId
})
let response
if (!presetName || presetName === '空' || presetName === '无设定') {
let conversationId = await redis.get(`CHATGPT:SLACK_CONVERSATION:${e.sender.user_id}`)
if (conversationId) {
// 如果有对话进行中,先删除
logger.info('开启Claude新对话但旧对话未结束自动结束上一次对话')
await redis.del(`CHATGPT:SLACK_CONVERSATION:${e.sender.user_id}`)
}
response = await client.sendMessage('', e)
await e.reply(response, true)
} else {
let preset = getPromptByName(presetName)
if (!preset) {
await e.reply('没有这个设定', true)
} else {
let conversationId = await redis.get(`CHATGPT:SLACK_CONVERSATION:${e.sender.user_id}`)
if (conversationId) {
// 如果有对话进行中,先删除
logger.info('开启Claude新对话但旧对话未结束自动结束上一次对话')
await redis.del(`CHATGPT:SLACK_CONVERSATION:${e.sender.user_id}`)
}
response = await client.sendMessage(preset.content, e)
await e.reply(response, true)
}
}
}
async emptyQueue (e) {
await redis.lTrim('CHATGPT:CHAT_QUEUE', 1, 0)
await this.reply('已清空当前等待队列')

View file

@ -55,6 +55,11 @@ let helpData = [
icon: 'confirm',
title: '#chatgpt(导出)聊天记录',
desc: '图片形式导出聊天记录目前仅支持Bing下的Sydney和自定义'
},
{
icon: 'smiley-wink',
title: '#claude开启新对话+设定名',
desc: '结束之前的对话并开启一个新的Claude对话如果设定名不为空的话会使用这个设定。设定必须是设定列表中有的设定。'
}
]
},

View file

@ -138,8 +138,12 @@ export class help extends plugin {
content: Config.sydney
}
} else {
await e.reply('没有这个设定', true)
return
await this.importPrompt(`#chatgpt导入设定${promptName}`)
prompt = getPromptByName(promptName)
if (!prompt) {
await e.reply('没有这个设定', true)
return
}
}
}
let use = await redis.get('CHATGPT:USE') || 'api'
@ -150,7 +154,8 @@ export class help extends plugin {
}
const keyMap = {
api: 'promptPrefixOverride',
Custom: 'sydney'
Custom: 'sydney',
claude: 'slackClaudeGlobalPreset'
}
if (keyMap[use]) {
@ -158,10 +163,7 @@ export class help extends plugin {
await redis.set(`CHATGPT:PROMPT_USE_${use}`, promptName)
await e.reply(`你当前正在使用${use}模式,已将该模式设定应用为"${promptName}"。更该设定后建议结束对话以使设定更好生效`, true)
} else {
await e.reply(`你当前正在使用${use}模式,该模式不支持设定`, true)
}
if (use === 'Custom') {
Config.sydneyBrainWashName = promptName
await e.reply(`你当前正在使用${use}模式该模式不支持设定。支持设定的模式有API、自定义、Claude`, true)
}
}
@ -439,6 +441,10 @@ export class help extends plugin {
if (response.status === 200) {
let r = await response.json()
if (r.code === 200) {
if (!r.data) {
await e.reply('没有这个设定', true)
return true
}
const { prompt, title } = r.data
saveOnePrompt(title, prompt)
e.reply(`导入成功。您现在可以使用 #chatgpt使用设定${title} 来体验这个设定了。`)

View file

@ -469,6 +469,18 @@ export function supportGuoba () {
bottomHelpMessage: 'Signing Secret。在Basic Information页面获取',
component: 'Input'
},
{
field: 'slackClaudeEnableGlobalPreset',
label: 'Claude使用全局设定',
bottomHelpMessage: '开启后所有人每次发起新对话时会先发送设定过去再开始对话达到类似Bing自设定的效果。',
component: 'Switch'
},
{
field: 'slackClaudeGlobalPreset',
label: 'Slack全局设定',
bottomHelpMessage: '若启用全局设定,每个人都会默认使用这里的设定。',
component: 'Input'
},
{
label: '以下为ChatGLM方式的配置',
component: 'Divider'

View file

@ -97,7 +97,9 @@ const defaultConfig = {
// slackChannelId: '',
slackSigningSecret: '',
slackClaudeUserId: '',
version: 'v2.5.4'
slackClaudeEnableGlobalPreset: true,
slackClaudeGlobalPreset: '',
version: 'v2.5.5'
}
const _path = process.cwd()
let config = {}