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 { convertFaces } from '../utils/face.js'
|
||||||
import uploadRecord from '../utils/uploadRecord.js'
|
import uploadRecord from '../utils/uploadRecord.js'
|
||||||
import {SlackClaudeClient} from "../utils/slack/slackClient.js";
|
import {SlackClaudeClient} from "../utils/slack/slackClient.js";
|
||||||
|
import {getPromptByName} from "../utils/prompts.js";
|
||||||
try {
|
try {
|
||||||
await import('keyv')
|
await import('keyv')
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
@ -174,6 +175,10 @@ export class chatgpt extends plugin {
|
||||||
reg: '^#chatgpt删除对话',
|
reg: '^#chatgpt删除对话',
|
||||||
fnc: 'deleteConversation',
|
fnc: 'deleteConversation',
|
||||||
permission: 'master'
|
permission: 'master'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
reg: '^#claude开启新对话',
|
||||||
|
fnc: 'newClaudeConversation'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
@ -1390,6 +1395,14 @@ export class chatgpt extends plugin {
|
||||||
slackUserToken: Config.slackUserToken,
|
slackUserToken: Config.slackUserToken,
|
||||||
slackChannelId: Config.slackChannelId
|
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)
|
let text = await client.sendMessage(prompt, e)
|
||||||
return {
|
return {
|
||||||
text
|
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) {
|
async emptyQueue (e) {
|
||||||
await redis.lTrim('CHATGPT:CHAT_QUEUE', 1, 0)
|
await redis.lTrim('CHATGPT:CHAT_QUEUE', 1, 0)
|
||||||
await this.reply('已清空当前等待队列')
|
await this.reply('已清空当前等待队列')
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,11 @@ let helpData = [
|
||||||
icon: 'confirm',
|
icon: 'confirm',
|
||||||
title: '#chatgpt(导出)聊天记录',
|
title: '#chatgpt(导出)聊天记录',
|
||||||
desc: '图片形式导出聊天记录,目前仅支持Bing下的Sydney和自定义'
|
desc: '图片形式导出聊天记录,目前仅支持Bing下的Sydney和自定义'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: 'smiley-wink',
|
||||||
|
title: '#claude开启新对话+设定名',
|
||||||
|
desc: '结束之前的对话,并开启一个新的Claude对话,如果设定名不为空的话,会使用这个设定。设定必须是设定列表中有的设定。'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -138,8 +138,12 @@ export class help extends plugin {
|
||||||
content: Config.sydney
|
content: Config.sydney
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
await e.reply('没有这个设定', true)
|
await this.importPrompt(`#chatgpt导入设定${promptName}`)
|
||||||
return
|
prompt = getPromptByName(promptName)
|
||||||
|
if (!prompt) {
|
||||||
|
await e.reply('没有这个设定', true)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let use = await redis.get('CHATGPT:USE') || 'api'
|
let use = await redis.get('CHATGPT:USE') || 'api'
|
||||||
|
|
@ -150,7 +154,8 @@ export class help extends plugin {
|
||||||
}
|
}
|
||||||
const keyMap = {
|
const keyMap = {
|
||||||
api: 'promptPrefixOverride',
|
api: 'promptPrefixOverride',
|
||||||
Custom: 'sydney'
|
Custom: 'sydney',
|
||||||
|
claude: 'slackClaudeGlobalPreset'
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyMap[use]) {
|
if (keyMap[use]) {
|
||||||
|
|
@ -158,10 +163,7 @@ export class help extends plugin {
|
||||||
await redis.set(`CHATGPT:PROMPT_USE_${use}`, promptName)
|
await redis.set(`CHATGPT:PROMPT_USE_${use}`, promptName)
|
||||||
await e.reply(`你当前正在使用${use}模式,已将该模式设定应用为"${promptName}"。更该设定后建议结束对话以使设定更好生效`, true)
|
await e.reply(`你当前正在使用${use}模式,已将该模式设定应用为"${promptName}"。更该设定后建议结束对话以使设定更好生效`, true)
|
||||||
} else {
|
} else {
|
||||||
await e.reply(`你当前正在使用${use}模式,该模式不支持设定`, true)
|
await e.reply(`你当前正在使用${use}模式,该模式不支持设定。支持设定的模式有:API、自定义、Claude`, true)
|
||||||
}
|
|
||||||
if (use === 'Custom') {
|
|
||||||
Config.sydneyBrainWashName = promptName
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -439,6 +441,10 @@ export class help extends plugin {
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
let r = await response.json()
|
let r = await response.json()
|
||||||
if (r.code === 200) {
|
if (r.code === 200) {
|
||||||
|
if (!r.data) {
|
||||||
|
await e.reply('没有这个设定', true)
|
||||||
|
return true
|
||||||
|
}
|
||||||
const { prompt, title } = r.data
|
const { prompt, title } = r.data
|
||||||
saveOnePrompt(title, prompt)
|
saveOnePrompt(title, prompt)
|
||||||
e.reply(`导入成功。您现在可以使用 #chatgpt使用设定${title} 来体验这个设定了。`)
|
e.reply(`导入成功。您现在可以使用 #chatgpt使用设定${title} 来体验这个设定了。`)
|
||||||
|
|
|
||||||
|
|
@ -469,6 +469,18 @@ export function supportGuoba () {
|
||||||
bottomHelpMessage: 'Signing Secret。在Basic Information页面获取',
|
bottomHelpMessage: 'Signing Secret。在Basic Information页面获取',
|
||||||
component: 'Input'
|
component: 'Input'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
field: 'slackClaudeEnableGlobalPreset',
|
||||||
|
label: 'Claude使用全局设定',
|
||||||
|
bottomHelpMessage: '开启后,所有人每次发起新对话时,会先发送设定过去再开始对话,达到类似Bing自设定的效果。',
|
||||||
|
component: 'Switch'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'slackClaudeGlobalPreset',
|
||||||
|
label: 'Slack全局设定',
|
||||||
|
bottomHelpMessage: '若启用全局设定,每个人都会默认使用这里的设定。',
|
||||||
|
component: 'Input'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: '以下为ChatGLM方式的配置',
|
label: '以下为ChatGLM方式的配置',
|
||||||
component: 'Divider'
|
component: 'Divider'
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,9 @@ const defaultConfig = {
|
||||||
// slackChannelId: '',
|
// slackChannelId: '',
|
||||||
slackSigningSecret: '',
|
slackSigningSecret: '',
|
||||||
slackClaudeUserId: '',
|
slackClaudeUserId: '',
|
||||||
version: 'v2.5.4'
|
slackClaudeEnableGlobalPreset: true,
|
||||||
|
slackClaudeGlobalPreset: '',
|
||||||
|
version: 'v2.5.5'
|
||||||
}
|
}
|
||||||
const _path = process.cwd()
|
const _path = process.cwd()
|
||||||
let config = {}
|
let config = {}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue