import ChatGPTConfig from '../config/config.js' import { Chaite } from 'chaite' import { intoUserMessage, toYunzai } from '../utils/message.js' import common from '../../../lib/common/common.js' import { getGroupContextPrompt } from '../utils/group.js' export class bym extends plugin { constructor () { super({ name: 'ChatGPT-Plugin伪人模式', dsc: 'ChatGPT-Plugin伪人模式', event: 'message', priority: 6000, rule: [ { reg: '^[^#][sS]*', fnc: 'bym', log: false } ] }) } async bym (e) { if (!ChatGPTConfig.bym.enable) { return false } let prob = ChatGPTConfig.bym.probability if (ChatGPTConfig.bym.hit.find(keyword => e.msg?.includes(keyword))) { prob = 1 } if (Math.random() > prob) { return false } logger.info('伪人模式触发') let recall = false let presetId = ChatGPTConfig.bym.defaultPreset if (ChatGPTConfig.bym.presetMap && ChatGPTConfig.bym.presetMap.length > 0) { const option = ChatGPTConfig.bym.presetMap.sort((a, b) => a.priority - b.priority) .find(item => item.keywords.find(keyword => e.msg?.includes(keyword))) if (option) { presetId = option.presetId } recall = !!option.recall } const presetManager = Chaite.getInstance().getChatPresetManager() let preset = await presetManager.getInstance(presetId) if (!preset) { preset = await presetManager.getInstance(ChatGPTConfig.bym.defaultPreset) } if (!preset) { logger.debug('未找到预设,请检查配置文件') return false } const sendMessageOption = JSON.parse(JSON.stringify(preset.sendMessageOption)) if (ChatGPTConfig.bym.presetPrefix) { if (!sendMessageOption.systemOverride) { sendMessageOption.systemOverride = '' } sendMessageOption.systemOverride = ChatGPTConfig.bym.presetPrefix + sendMessageOption.systemOverride } if (ChatGPTConfig.bym.temperature >= 0) { sendMessageOption.temperature = ChatGPTConfig.bym.temperature } if (ChatGPTConfig.bym.maxTokens > 0) { sendMessageOption.maxToken = ChatGPTConfig.bym.maxTokens } const userMessage = await intoUserMessage(e, { handleReplyText: true, handleReplyImage: true, useRawMessage: true, handleAtMsg: true, excludeAtBot: false, toggleMode: ChatGPTConfig.basic.toggleMode, togglePrefix: ChatGPTConfig.basic.togglePrefix }) // 伪人不记录历史 sendMessageOption.disableHistoryRead = true sendMessageOption.disableHistorySave = true // 设置多轮调用回掉 sendMessageOption.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) } } if (ChatGPTConfig.llm.enableGroupContext && e.isGroup) { const contextPrompt = await getGroupContextPrompt(e, ChatGPTConfig.llm.groupContextLength) sendMessageOption.systemOverride = sendMessageOption.systemOverride ? sendMessageOption.systemOverride + '\n' + contextPrompt : contextPrompt } // 发送 const response = await Chaite.getInstance().sendMessage(userMessage, e, { ...sendMessageOption, chatPreset: preset }) const { msgs, forward } = await toYunzai(e, response.contents) if (msgs.length > 0) { // await e.reply(msgs, false, { recallMsg: recall }) for (let msg of msgs) { await e.reply(msg, false, { recallMsg: recall ? 10 : 0 }) await common.sleep(Math.floor(Math.random() * 2000) + 1000) } } if (ChatGPTConfig.bym.sendReasoning) { for (let forwardElement of forward) { await e.reply(forwardElement, false, { recallMsg: recall ? 10 : 0 }) } } } }