crystelf-plugin/lib/ai/tools/messageTool.js
2025-12-14 00:58:38 +08:00

148 lines
3.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import BaseTool from './baseTool.js';
/**
* 发送消息工具
* 整合了原来的message、at、quote功能
*/
class SendMessageTool extends BaseTool {
constructor() {
super(
'send_message',
'发送消息给用户,支持@用户和引用消息',
{
type: 'object',
properties: {
content: {
type: 'string',
description: '消息内容'
},
at_user: {
type: 'string',
description: '要@的用户QQ号不需要@时不传此参数'
},
quote_message_id: {
type: 'string',
description: '要引用的消息ID不需要引用时不传此参数'
},
recall_after: {
type: 'number',
description: '多少秒后撤回消息,不需要撤回时不传此参数'
}
},
required: ['content']
}
);
}
async execute(params, context) {
const { content, at_user, quote_message_id, recall_after } = params;
const { e, responseQueue } = context;
// 构建消息对象,兼容原来的格式
const messageObj = {
type: 'message',
data: content,
at: at_user ? parseInt(at_user) : -1,
quote: quote_message_id ? parseInt(quote_message_id) : -1,
recall: recall_after ? true : false
};
// 添加到响应队列
responseQueue.push(messageObj);
return {
success: true,
message: `已发送消息: ${content.substring(0, 50)}${content.length > 50 ? '...' : ''}`,
messageId: Date.now().toString()
};
}
}
/**
* 发送表情包工具
*/
class SendMemeTool extends BaseTool {
constructor() {
super(
'send_meme',
'发送表情包',
{
type: 'object',
properties: {
emotion: {
type: 'string',
enum: ['angry', 'bye', 'confused', 'default', 'good', 'goodmorning', 'goodnight', 'happy', 'sad', 'shy', 'sorry', 'surprise'],
description: '表情包情绪类型'
}
},
required: ['emotion']
}
);
}
async execute(params, context) {
const { emotion } = params;
const { responseQueue } = context;
const memeObj = {
type: 'meme',
data: emotion
};
responseQueue.push(memeObj);
return {
success: true,
message: `已发送${emotion}表情包`
};
}
}
/**
* 戳一戳工具
*/
class PokeTool extends BaseTool {
constructor() {
super(
'poke_user',
'戳一戳指定用户',
{
type: 'object',
properties: {
user_id: {
type: 'string',
description: '要戳的用户QQ号'
}
},
required: ['user_id']
}
);
}
async execute(params, context) {
const { user_id } = params;
const { e, responseQueue } = context;
// 不能戳自己
if (user_id === e.bot.uin.toString()) {
return {
success: false,
message: '不能戳自己'
};
}
const pokeObj = {
type: 'poke',
id: parseInt(user_id)
};
responseQueue.push(pokeObj);
return {
success: true,
message: `已戳一戳用户 ${user_id}`
};
}
}
export { SendMessageTool, SendMemeTool, PokeTool };