机器人事件
机器人事件用于监听即时通讯平台(如QQ)的消息和状态变化,包括群消息、私聊消息、群成员变动等。这些事件是实现机器人功能的核心接口。
基础事件类
EasyEvent
所有事件的基类,包含适配器相关信息。
declare class EasyEvent {
IsCanceled: boolean; // 事件是否已被取消
AdapterName: string; // 适配器名称(onebot11)
AdapterPlatform: string; // 适配器平台名称(qq)
AdapterContext: IAdapterContext; // 适配器操作上下文
}
属性说明
- IsCanceled: 如果设置为true,EasyBot内部的处理器将不响应此次事件
- AdapterName: 适配器名称,如"onebot11"
- AdapterPlatform: 适配器平台名称,如"qq"
- AdapterContext: 适配器操作上下文,提供各种API调用
事件分类
统一封装 接口
EasyBot 提供统一的事件接口,所有适配器(如 OneBot、Lagrange 等)都实现这些标准接口。
高级接口
提供原生消息事件,用于实现 EasyBot 未封装的高级功能。
事件列表
group_message_event
功能描述: 当机器人收到群聊消息时触发,用于处理群内的消息交互。
语法:
bus.on("group_message_event", function(data) {
// 处理群消息逻辑
// 可以返回 true 来阻止后续处理
});
参数:
data(GroupMessageEvent): 群消息事件数据对象
返回值:
void或undefined: 允许后续处理true: 阻止后续事件处理
使用示例:
bus.on("group_message_event", function(data) {
logger.info("收到群消息: 群 {0}, 用户 {1}: {2}",
data.groupId, data.userId, data.message);
// 简单的命令处理
if (data.message === "!ping") {
// 发送回复消息
data.reply("pong!");
return true; // 阻止后续处理
}
// 关键词回复
if (data.message.includes("服务器状态")) {
const serverCount = sessions.GetSessions().length;
data.reply(`当前有 ${serverCount} 个服务器在线`);
}
});
相关 API:
- Robot Framework - 机器人适配器接口
- MessageChain - 消息链构建
direct_message_event
功能描述: 当机器人收到私聊消息时触发,用于处理一对一的消息交互。
语法:
bus.on("direct_message_event", function(data) {
// 处理私聊消息逻辑
// 可以返回 true 来阻止后续处理
});
参数:
data(DirectMessageEvent): 私聊消息事件数据对象
返回值:
void或undefined: 允许后续处理true: 阻止后续事件处理
使用示例:
bus.on("direct_message_event", function(data) {
logger.info("收到私聊消息: 用户 {0}: {1}", data.userId, data.message);
// 私聊命令处理
if (data.message === "!help") {
data.reply("可用命令:\n!bind - 绑定账号\n!status - 查看状态\n!servers - 服务器列表");
return true;
}
// 账号绑定流程
if (data.message.startsWith("!bind ")) {
const playerName = data.message.substring(6).trim();
if (playerName) {
// 这里实现绑定逻辑
data.reply(`正在为您绑定玩家: ${playerName}`);
// TODO: 实际的绑定逻辑
} else {
data.reply("请提供玩家名称,格式: !bind 玩家名");
}
return true;
}
});
group_join_event
功能描述: 当有新成员加入群聊时触发,用于处理新成员欢迎等逻辑。
语法:
bus.on("group_join_event", function(data) {
// 处理群成员加入逻辑
// 可以返回 true 来阻止后续处理
});
参数:
data(GroupJoinEvent): 群成员加入事件数据对象
返回值:
void或undefined: 允许后续处理true: 阻止后续事件处理
使用示例:
bus.on("group_join_event", function(data) {
logger.info("新成员加入群 {0}: 用户 {1}", data.groupId, data.userId);
// 发送欢迎消息
const welcomeMessage = `欢迎新成员 @${data.userId} 加入群聊!\n` +
`请阅读群公告,输入 !help 查看可用命令。`;
data.sendGroupMessage(welcomeMessage);
// 记录加入时间
db.Set(`user:${data.userId}:joinTime:${data.groupId}`, new Date().toISOString());
});
group_leave_event
功能描述: 当群成员退出群聊时触发,用于处理成员离开的相关逻辑。
语法:
bus.on("group_leave_event", function(data) {
// 处理群成员退出逻辑
// 可以返回 true 来阻止后续处理
});
参数:
data(GroupLeaveEvent): 群成员退出事件数据对象
返回值:
void或undefined: 允许后续处理true: 阻止后续事件处理
使用示例:
bus.on("group_leave_event", function(data) {
logger.info("成员退出群 {0}: 用户 {1}", data.groupId, data.userId);
// 检查是否为绑定用户
const playerName = db.GetString(`user:${data.userId}:playerName`);
if (playerName) {
logger.info("绑定玩家 {0} 的用户退出了群聊", playerName);
// 可以选择是否自动解绑
// db.Delete(`user:${data.userId}:playerName`);
// db.Delete(`player:${playerName}:userId`);
}
// 清理相关数据
db.Delete(`user:${data.userId}:joinTime:${data.groupId}`);
});
group_request_event
功能描述: 当有用户申请加入群聊时触发,用于处理入群申请的审核逻辑。
语法:
bus.on("group_request_event", function(data) {
// 处理入群申请逻辑
// 可以返回 true 来阻止后续处理
});
参数:
data(GroupRequestEvent): 入群申请事件数据对象
返回值:
void或undefined: 允许后续处理true: 阻止后续事件处理