chatgpt-plugin/apps/bym.js
2025-03-20 22:43:39 +08:00

114 lines
3.9 KiB
JavaScript

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 })
}
}
}
}