feat: 伪人连续对话

This commit is contained in:
Krumio 2025-03-01 13:52:18 +00:00
parent 4900f40502
commit 73c7cfe67c
3 changed files with 76 additions and 51 deletions

View file

@ -38,14 +38,10 @@ export class bym extends plugin {
let sender = e.sender.user_id let sender = e.sender.user_id
let card = e.sender.card || e.sender.nickname let card = e.sender.card || e.sender.nickname
let group = e.group_id let group = e.group_id
let prop = Math.floor(Math.random() * 100) let prop = this._genProp()
if (Config.assistantLabel && e.msg?.includes(Config.assistantLabel)) { if (Config.assistantLabel && e.msg?.includes(Config.assistantLabel)) {
prop = -1 prop = -1
} }
// 去掉吧 频率有点逆天
// if (e.msg?.endsWith('')) {
// prop = prop / 10
// }
let fuck = false let fuck = false
let candidate = Config.bymPreset let candidate = Config.bymPreset
@ -60,59 +56,74 @@ export class bym extends plugin {
candidate + candidate +
`\n你的回复应该尽可能简练,像人类一样随意,不要附加任何奇怪的东西,如聊天记录的格式(比如${Config.assistantLabel}:),禁止重复聊天记录。` `\n你的回复应该尽可能简练,像人类一样随意,不要附加任何奇怪的东西,如聊天记录的格式(比如${Config.assistantLabel}:),禁止重复聊天记录。`
let rsp = await core.sendMessage(e.msg, {}, Config.bymMode, e, {
enableSmart: Config.smartMode, const handleReply = async (e) => {
system: { let rsp = await core.sendMessage(e.msg, {}, Config.bymMode, e, {
api: system, enableSmart: Config.smartMode,
qwen: system, system: {
bing: system, api: system,
claude: system, qwen: system,
claude2: system, bing: system,
gemini: system, claude: system,
xh: system claude2: system,
}, gemini: system,
settings: { xh: system
replyPureTextCallback: msg => {
msg = filterResponseChunk(msg)
msg && e.reply(msg)
}, },
// 强制打开上下文,不然伪人笨死了 settings: {
enableGroupContext: true replyPureTextCallback: msg => {
} msg = filterResponseChunk(msg)
}) msg && e.reply(msg)
// let rsp = await client.sendMessage(e.msg, opt) },
let text = rsp.text // 强制打开上下文,不然伪人笨死了
let texts = customSplitRegex(text, /(?<!\?)[。?\n](?!\?)/, 3) enableGroupContext: true
// let texts = text.split(/(?<!\?)[。?\n](?!\?)/, 3) }
for (let t of texts) { })
if (!t) { // let rsp = await client.sendMessage(e.msg, opt)
continue let text = rsp.text
} let texts = customSplitRegex(text, /(?<!\?)[。?\n](?!\?)/, 3)
t = t.trim() // let texts = text.split(/(?<!\?)[。?\n](?!\?)/, 3)
if (text[text.indexOf(t) + t.length] === '') { for (let [index, t] of texts.entries()) {
t += '' if (!t) {
} continue
let finalMsg = await convertFaces(t, true, e) }
logger.info(JSON.stringify(finalMsg)) t = t.trim()
finalMsg = finalMsg.map(filterResponseChunk).filter(i => !!i) if (text[text.indexOf(t) + t.length] === '') {
if (finalMsg && finalMsg.length > 0) { t += ''
if (Math.floor(Math.random() * 100) < 10) { }
await this.reply(finalMsg, true, { let finalMsg = await convertFaces(t, true, e)
recallMsg: fuck ? 10 : 0 logger.info(JSON.stringify(finalMsg))
finalMsg = finalMsg.map(filterResponseChunk).filter(i => !!i)
if (finalMsg && finalMsg.length > 0) {
if(index !== 0) await new Promise((resolve) => {
setTimeout(() => {
resolve()
}, Math.min(t.length * 200, 3000))
}) })
} else { await this.reply(finalMsg, (this._genProp() < 10) , {
await this.reply(finalMsg, false, {
recallMsg: fuck ? 10 : 0 recallMsg: fuck ? 10 : 0
}) })
} }
await new Promise((resolve, reject) => { }
setTimeout(() => {
resolve() if(Config.bymContinue){
}, Math.min(t.length * 200, 3000)) const delay = Config.bymContinueDelay || 10
}) const continueEvent = await this.awaitContext(e.isGroup, delay, "");
if(continueEvent){
logger.info("bym继续对话")
await handleReply(continueEvent)
}else {
logger.mark("bym连续对话结束")
}
} }
} }
await handleReply(e)
} }
return false return false
} }
}
_genProp() {
return Math.floor(Math.random() * 100)
}
}

View file

@ -984,6 +984,18 @@ export function supportGuoba () {
label: '伪人模式的额外预设', label: '伪人模式的额外预设',
component: 'Input' component: 'Input'
}, },
{
field: 'bymContinue',
label: '伪人模式连续对话',
component: 'Switch',
bottomHelpMessage: '开启后会在延时时长内监听触发者的消息来与 bot 连续对话',
},
{
field: 'bymContinueDelay',
label: '伪人模式连续对话延时',
component: 'InputNumber',
bottomHelpMessage: '伪人模式连续对话延时时长,单位:秒',
},
{ {
field: 'bymFuckPrompt', field: 'bymFuckPrompt',
label: '伪人模式骂人反击的设定词', label: '伪人模式骂人反击的设定词',

View file

@ -215,6 +215,8 @@ const defaultConfig = {
// 伪人额外设定 // 伪人额外设定
bymPreset: '', bymPreset: '',
bymMode: 'gemini', bymMode: 'gemini',
bymContinue: false,
bymContinueDelay: 10,
// 思考过程转发 // 思考过程转发
forwardReasoning: true, forwardReasoning: true,
geminiEnableGoogleSearch: false, geminiEnableGoogleSearch: false,