mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 13:27:08 +00:00
feat: claude的设定
This commit is contained in:
parent
a2d903a2ae
commit
06fd121950
5 changed files with 79 additions and 8 deletions
46
apps/chat.js
46
apps/chat.js
|
|
@ -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('已清空当前等待队列')
|
||||
|
|
|
|||
|
|
@ -55,6 +55,11 @@ let helpData = [
|
|||
icon: 'confirm',
|
||||
title: '#chatgpt(导出)聊天记录',
|
||||
desc: '图片形式导出聊天记录,目前仅支持Bing下的Sydney和自定义'
|
||||
},
|
||||
{
|
||||
icon: 'smiley-wink',
|
||||
title: '#claude开启新对话+设定名',
|
||||
desc: '结束之前的对话,并开启一个新的Claude对话,如果设定名不为空的话,会使用这个设定。设定必须是设定列表中有的设定。'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -138,10 +138,14 @@ export class help extends plugin {
|
|||
content: Config.sydney
|
||||
}
|
||||
} else {
|
||||
await this.importPrompt(`#chatgpt导入设定${promptName}`)
|
||||
prompt = getPromptByName(promptName)
|
||||
if (!prompt) {
|
||||
await e.reply('没有这个设定', true)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
let use = await redis.get('CHATGPT:USE') || 'api'
|
||||
if (use.toLowerCase() === 'bing') {
|
||||
if (Config.toneStyle === 'Custom') {
|
||||
|
|
@ -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} 来体验这个设定了。`)
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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 = {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue