mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 13:27:08 +00:00
fix: 增加智能模式私聊开关
This commit is contained in:
parent
777279e410
commit
d96349dde3
5 changed files with 36 additions and 68 deletions
|
|
@ -75,12 +75,12 @@ export function supportGuoba () {
|
||||||
bottomHelpMessage: '独立的后台管理面板(默认3321端口),与锅巴类似。工具箱会有额外占用,启动速度稍慢,酌情开启。修改后需重启生效!!!',
|
bottomHelpMessage: '独立的后台管理面板(默认3321端口),与锅巴类似。工具箱会有额外占用,启动速度稍慢,酌情开启。修改后需重启生效!!!',
|
||||||
component: 'Switch'
|
component: 'Switch'
|
||||||
},
|
},
|
||||||
// {
|
{
|
||||||
// field: 'enableMd',
|
field: 'enableToolPrivateSend',
|
||||||
// label: 'QQ开启markdown',
|
label: '允许智能模式私聊',
|
||||||
// bottomHelpMessage: 'qq的第三方md,非QQBot。需要适配器实现segment.markdown和segment.button方可使用,否则不建议开启,会造成各种错误。默认关闭',
|
bottomHelpMessage: '是否允许智能模式下发起临时对话骚扰其他群友。默认开启,如果怕Bot乱骚扰其他人可以关闭。主人不受影响。',
|
||||||
// component: 'Switch'
|
component: 'Switch'
|
||||||
// },
|
},
|
||||||
{
|
{
|
||||||
field: 'translateSource',
|
field: 'translateSource',
|
||||||
label: '翻译来源',
|
label: '翻译来源',
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ import { SendAvatarTool } from '../utils/tools/SendAvatarTool.js'
|
||||||
import { SerpImageTool } from '../utils/tools/SearchImageTool.js'
|
import { SerpImageTool } from '../utils/tools/SearchImageTool.js'
|
||||||
import { SearchMusicTool } from '../utils/tools/SearchMusicTool.js'
|
import { SearchMusicTool } from '../utils/tools/SearchMusicTool.js'
|
||||||
import { SendMusicTool } from '../utils/tools/SendMusicTool.js'
|
import { SendMusicTool } from '../utils/tools/SendMusicTool.js'
|
||||||
import { SendAudioMessageTool } from '../utils/tools/SendAudioMessageTool.js'
|
// import { SendAudioMessageTool } from '../utils/tools/SendAudioMessageTool.js'
|
||||||
import { SendMessageToSpecificGroupOrUserTool } from '../utils/tools/SendMessageToSpecificGroupOrUserTool.js'
|
import { SendMessageToSpecificGroupOrUserTool } from '../utils/tools/SendMessageToSpecificGroupOrUserTool.js'
|
||||||
import { QueryGenshinTool } from '../utils/tools/QueryGenshinTool.js'
|
import { QueryGenshinTool } from '../utils/tools/QueryGenshinTool.js'
|
||||||
import { WeatherTool } from '../utils/tools/WeatherTool.js'
|
import { WeatherTool } from '../utils/tools/WeatherTool.js'
|
||||||
|
|
@ -42,11 +42,11 @@ import { SerpIkechan8370Tool } from '../utils/tools/SerpIkechan8370Tool.js'
|
||||||
import { SerpTool } from '../utils/tools/SerpTool.js'
|
import { SerpTool } from '../utils/tools/SerpTool.js'
|
||||||
import common from '../../../lib/common/common.js'
|
import common from '../../../lib/common/common.js'
|
||||||
import { SendDiceTool } from '../utils/tools/SendDiceTool.js'
|
import { SendDiceTool } from '../utils/tools/SendDiceTool.js'
|
||||||
import { EliMovieTool } from '../utils/tools/EliMovieTool.js'
|
// import { EliMovieTool } from '../utils/tools/EliMovieTool.js'
|
||||||
import { EliMusicTool } from '../utils/tools/EliMusicTool.js'
|
// import { EliMusicTool } from '../utils/tools/EliMusicTool.js'
|
||||||
import { HandleMessageMsgTool } from '../utils/tools/HandleMessageMsgTool.js'
|
import { HandleMessageMsgTool } from '../utils/tools/HandleMessageMsgTool.js'
|
||||||
import { ProcessPictureTool } from '../utils/tools/ProcessPictureTool.js'
|
import { ProcessPictureTool } from '../utils/tools/ProcessPictureTool.js'
|
||||||
import { ImageCaptionTool } from '../utils/tools/ImageCaptionTool.js'
|
// import { ImageCaptionTool } from '../utils/tools/ImageCaptionTool.js'
|
||||||
import { ChatGPTAPI } from '../utils/openai/chatgpt-api.js'
|
import { ChatGPTAPI } from '../utils/openai/chatgpt-api.js'
|
||||||
import { newFetch } from '../utils/proxy.js'
|
import { newFetch } from '../utils/proxy.js'
|
||||||
import { ChatGLM4Client } from '../client/ChatGLM4Client.js'
|
import { ChatGLM4Client } from '../client/ChatGLM4Client.js'
|
||||||
|
|
@ -530,57 +530,10 @@ class Core {
|
||||||
option.image = base64Image.toString('base64')
|
option.image = base64Image.toString('base64')
|
||||||
}
|
}
|
||||||
if (opt.enableSmart) {
|
if (opt.enableSmart) {
|
||||||
/**
|
const {
|
||||||
* @type {AbstractTool[]}
|
funcMap
|
||||||
*/
|
} = await collectTools(e)
|
||||||
let tools = [
|
let tools = Object.keys(funcMap).map(k => funcMap[k].tool)
|
||||||
new QueryStarRailTool(),
|
|
||||||
new WebsiteTool(),
|
|
||||||
new SendPictureTool(),
|
|
||||||
new SendVideoTool(),
|
|
||||||
new SearchVideoTool(),
|
|
||||||
new SendAvatarTool(),
|
|
||||||
new SerpImageTool(),
|
|
||||||
new SearchMusicTool(),
|
|
||||||
new SendMusicTool(),
|
|
||||||
new SendAudioMessageTool(),
|
|
||||||
new APTool(),
|
|
||||||
new SendMessageToSpecificGroupOrUserTool(),
|
|
||||||
new QueryGenshinTool()
|
|
||||||
]
|
|
||||||
if (Config.amapKey) {
|
|
||||||
tools.push(new WeatherTool())
|
|
||||||
}
|
|
||||||
if (e.isGroup) {
|
|
||||||
tools.push(new QueryUserinfoTool())
|
|
||||||
if (e.group.is_admin || e.group.is_owner) {
|
|
||||||
tools.push(new EditCardTool())
|
|
||||||
tools.push(new JinyanTool())
|
|
||||||
tools.push(new KickOutTool())
|
|
||||||
tools.push(new HandleMessageMsgTool())
|
|
||||||
}
|
|
||||||
if (e.group.is_owner) {
|
|
||||||
tools.push(new SetTitleTool())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch (Config.serpSource) {
|
|
||||||
case 'ikechan8370': {
|
|
||||||
tools.push(new SerpIkechan8370Tool())
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case 'azure': {
|
|
||||||
if (!Config.azSerpKey) {
|
|
||||||
logger.warn('未配置bing搜索密钥,转为使用ikechan8370搜索源')
|
|
||||||
tools.push(new SerpIkechan8370Tool())
|
|
||||||
} else {
|
|
||||||
tools.push(new SerpTool())
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
tools.push(new SerpIkechan8370Tool())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
client.addTools(tools)
|
client.addTools(tools)
|
||||||
}
|
}
|
||||||
let system = opt.system.gemini
|
let system = opt.system.gemini
|
||||||
|
|
@ -822,12 +775,12 @@ async function collectTools (e) {
|
||||||
new SetTitleTool()
|
new SetTitleTool()
|
||||||
]
|
]
|
||||||
// todo 3.0再重构tool的插拔和管理
|
// todo 3.0再重构tool的插拔和管理
|
||||||
let /** @type{AbstractTool} **/ tools = [
|
let /** @type{AbstractTool[]} **/ tools = [
|
||||||
new SendAvatarTool(),
|
new SendAvatarTool(),
|
||||||
new SendDiceTool(),
|
new SendDiceTool(),
|
||||||
new SendMessageToSpecificGroupOrUserTool(),
|
new SendMessageToSpecificGroupOrUserTool(),
|
||||||
// new EditCardTool(),
|
// new EditCardTool(),
|
||||||
// new QueryStarRailTool(),
|
new QueryStarRailTool(),
|
||||||
new QueryGenshinTool(),
|
new QueryGenshinTool(),
|
||||||
new SendMusicTool(),
|
new SendMusicTool(),
|
||||||
new SearchMusicTool(),
|
new SearchMusicTool(),
|
||||||
|
|
@ -874,13 +827,15 @@ async function collectTools (e) {
|
||||||
tools.forEach(tool => {
|
tools.forEach(tool => {
|
||||||
funcMap[tool.name] = {
|
funcMap[tool.name] = {
|
||||||
exec: tool.func,
|
exec: tool.func,
|
||||||
function: tool.function()
|
function: tool.function(),
|
||||||
|
tool
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
fullTools.forEach(tool => {
|
fullTools.forEach(tool => {
|
||||||
fullFuncMap[tool.name] = {
|
fullFuncMap[tool.name] = {
|
||||||
exec: tool.func,
|
exec: tool.func,
|
||||||
function: tool.function()
|
function: tool.function(),
|
||||||
|
tool
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -227,7 +227,8 @@ const defaultConfig = {
|
||||||
_2captchaKey: '',
|
_2captchaKey: '',
|
||||||
bingReasoning: false, // 是否深度思考
|
bingReasoning: false, // 是否深度思考
|
||||||
apiMaxToken: 4096,
|
apiMaxToken: 4096,
|
||||||
version: 'v2.8.3'
|
enableToolPrivateSend: true, // 是否允许智能模式下私聊骚扰其他群友。主人不受影响。
|
||||||
|
version: 'v2.8.4'
|
||||||
}
|
}
|
||||||
const _path = process.cwd()
|
const _path = process.cwd()
|
||||||
let config = {}
|
let config = {}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import { AbstractTool } from './AbstractTool.js'
|
import { AbstractTool } from './AbstractTool.js'
|
||||||
import { convertFaces } from '../face.js'
|
import { convertFaces } from '../face.js'
|
||||||
|
import {getMasterQQ} from '../common.js'
|
||||||
|
import {Config} from '../config.js'
|
||||||
|
|
||||||
export class SendMessageToSpecificGroupOrUserTool extends AbstractTool {
|
export class SendMessageToSpecificGroupOrUserTool extends AbstractTool {
|
||||||
name = 'sendMessage'
|
name = 'sendMessage'
|
||||||
|
|
@ -19,7 +21,7 @@ export class SendMessageToSpecificGroupOrUserTool extends AbstractTool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func = async function (opt, e) {
|
func = async function (opt, e) {
|
||||||
let { msg, targetGroupIdOrQQNumber } = opt
|
let { msg, sender, targetGroupIdOrQQNumber } = opt
|
||||||
const defaultTarget = e.isGroup ? e.group_id : e.sender.user_id
|
const defaultTarget = e.isGroup ? e.group_id : e.sender.user_id
|
||||||
const target = isNaN(targetGroupIdOrQQNumber) || !targetGroupIdOrQQNumber
|
const target = isNaN(targetGroupIdOrQQNumber) || !targetGroupIdOrQQNumber
|
||||||
? defaultTarget
|
? defaultTarget
|
||||||
|
|
@ -37,6 +39,10 @@ export class SendMessageToSpecificGroupOrUserTool extends AbstractTool {
|
||||||
await group.sendMsg(await convertFaces(msg, true, e))
|
await group.sendMsg(await convertFaces(msg, true, e))
|
||||||
return 'msg has been sent to group' + target
|
return 'msg has been sent to group' + target
|
||||||
} else {
|
} else {
|
||||||
|
let masters = (await getMasterQQ())
|
||||||
|
if (!Config.enableToolPrivateSend && !masters.includes(sender + '')) {
|
||||||
|
return 'you are not allowed to pm other group members'
|
||||||
|
}
|
||||||
let user = e.bot.pickUser(target)
|
let user = e.bot.pickUser(target)
|
||||||
if (e.group_id) {
|
if (e.group_id) {
|
||||||
user = user.asMember(e.group_id)
|
user = user.asMember(e.group_id)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
import { AbstractTool } from './AbstractTool.js'
|
import { AbstractTool } from './AbstractTool.js'
|
||||||
|
import {getMasterQQ} from '../common.js'
|
||||||
|
import {Config} from '../config.js'
|
||||||
|
|
||||||
export class SendPictureTool extends AbstractTool {
|
export class SendPictureTool extends AbstractTool {
|
||||||
name = 'sendPicture'
|
name = 'sendPicture'
|
||||||
|
|
@ -18,7 +20,7 @@ export class SendPictureTool extends AbstractTool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func = async function (opt, e) {
|
func = async function (opt, e) {
|
||||||
let { urlOfPicture, targetGroupIdOrQQNumber } = opt
|
let { urlOfPicture, targetGroupIdOrQQNumber, sender } = opt
|
||||||
if (typeof urlOfPicture === 'object') {
|
if (typeof urlOfPicture === 'object') {
|
||||||
urlOfPicture = urlOfPicture.join(' ')
|
urlOfPicture = urlOfPicture.join(' ')
|
||||||
}
|
}
|
||||||
|
|
@ -55,6 +57,10 @@ export class SendPictureTool extends AbstractTool {
|
||||||
// await group.sendMsg(pictures)
|
// await group.sendMsg(pictures)
|
||||||
return 'picture has been sent to group' + target + (errs.length > 0 ? `, but some pictures failed to send (${errs.join('、')})` : '')
|
return 'picture has been sent to group' + target + (errs.length > 0 ? `, but some pictures failed to send (${errs.join('、')})` : '')
|
||||||
} else {
|
} else {
|
||||||
|
let masters = (await getMasterQQ())
|
||||||
|
if (!Config.enableToolPrivateSend && !masters.includes(sender + '')) {
|
||||||
|
return 'you are not allowed to pm other group members'
|
||||||
|
}
|
||||||
let user = e.bot.pickUser(target)
|
let user = e.bot.pickUser(target)
|
||||||
if (e.group_id) {
|
if (e.group_id) {
|
||||||
user = user.asMember(e.group_id)
|
user = user.asMember(e.group_id)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue