mirror of
https://github.com/Jerryplusy/crystelf-plugin.git
synced 2026-01-29 09:17:27 +00:00
148 lines
3.2 KiB
JavaScript
148 lines
3.2 KiB
JavaScript
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 }; |