chatgpt-plugin/apps/chat.js
2025-03-17 16:19:12 +08:00

60 lines
1.8 KiB
JavaScript

import Config from '../config/config.js'
import { Chaite, SendMessageOption } from 'chaite'
import { getPreset, intoUserMessage, toYunzai } from '../utils/message.js'
export class Chat extends plugin {
constructor () {
super({
name: 'ChatGPT-Plugin对话',
dsc: 'ChatGPT-Plugin对话',
event: 'message',
priority: 0,
rule: [
{
reg: '^[^#][sS]*',
fnc: 'chat',
log: false
}
]
})
}
async chat (e) {
const state = await Chaite.getInstance().getUserStateStorage().getItem(e.sender.user_id + '')
const sendMessageOptions = SendMessageOption.create(state?.settings)
sendMessageOptions.onMessageWithToolCall = async content => {
const { msgs, forward } = await toYunzai(e, [content])
if (msgs.length > 0) {
await e.reply(msgs)
}
for (let forwardElement of forward) {
this.reply(forwardElement)
}
}
const preset = await getPreset(e, state?.settings.preset || Config.llm.defaultChatPresetId, Config.basic.toggleMode, Config.basic.togglePrefix)
if (!preset) {
logger.debug('不满足对话触发条件或未找到预设,不进入对话')
return false
}
const userMessage = await intoUserMessage(e, {
handleReplyText: false,
handleReplyImage: true,
useRawMessage: false,
handleAtMsg: true,
excludeAtBot: false,
toggleMode: Config.basic.toggleMode,
togglePrefix: Config.basic.togglePrefix
})
const response = await Chaite.getInstance().sendMessage(userMessage, e, {
...sendMessageOptions,
chatPreset: preset
})
const { msgs, forward } = await toYunzai(e, response.contents)
if (msgs.length > 0) {
await e.reply(msgs, true)
}
for (let forwardElement of forward) {
this.reply(forwardElement)
}
}
}