mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-17 13:57:10 +00:00
feat: 伪人连续对话
This commit is contained in:
parent
4900f40502
commit
73c7cfe67c
3 changed files with 76 additions and 51 deletions
113
apps/bym.js
113
apps/bym.js
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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: '伪人模式骂人反击的设定词',
|
||||||
|
|
|
||||||
|
|
@ -215,6 +215,8 @@ const defaultConfig = {
|
||||||
// 伪人额外设定
|
// 伪人额外设定
|
||||||
bymPreset: '',
|
bymPreset: '',
|
||||||
bymMode: 'gemini',
|
bymMode: 'gemini',
|
||||||
|
bymContinue: false,
|
||||||
|
bymContinueDelay: 10,
|
||||||
// 思考过程转发
|
// 思考过程转发
|
||||||
forwardReasoning: true,
|
forwardReasoning: true,
|
||||||
geminiEnableGoogleSearch: false,
|
geminiEnableGoogleSearch: false,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue