Framework 核心框架
Framework 是 EasyBot 的核心中间层,旨在解耦底层通信协议与上层业务逻辑。通过将不同的底层协议(如 OneBot11、明信、各平台原生 SDK)抽象为统一的 IAdapter 接口,开发者只需编写一套插件代码,即可无缝迁移至不同平台运行。
核心概念
IAdapter (适配器接口)
IAdapter 是所有适配器必须实现的基准接口,定义了适配器的生命周期管理、状态获取以及上下文调度。
/**
* 抽象适配器接口
*/
interface IAdapter {
/** 适配器名称,例如 "OneBot11" */
AdapterName: string;
/** 平台名称,例如 "qq"、"discord" */
PlatformName: string;
/** 启动适配器实例 */
Start(): Promise<void>;
/** 停止适配器实例 */
Stop(): Promise<void>;
/** 重启适配器实例 */
Restart(): Promise<void>;
/**
* 获取当前机器人的基本信息与运行状态
* @returns RobotProfile 包含 ID、名称、统计数据等
*/
GetProfile(): RobotProfile;
/**
* 异步获取机器人加入的所有群组列表
*/
GetGroupsAsync(): Promise<Group[]>;
/**
* 获取适配器上下文对象(用于高级操作)
*/
GetAdapterContext(): IAdapterContext;
}
数据模型
RobotProfile (机器人资料)
描述当前登录机器人的身份信息与运行统计。
| 属性 | 类型 | 描述 |
|---|---|---|
Id | string | 机器人在该平台下的唯一标识 |
Name | string | 机器人昵称 |
IsActive | boolean | 当前连接状态是否激活 |
Received | number | 自启动以来接收的消息总数 |
Sent | number | 自启动以来发送的消息总数 |
Started | Date | 适配器启动的时间戳 |
Group (群组信息)
描述机器人所加入的群聊/频道详细信息。
| 属性 | 类型 | 描述 |
|---|---|---|
Id | string | 群组唯一 ID |
Platform | string | 所属平台名称 |
Name | string | 群名称 |
Avatar | string | null | 群头像 URL(可能为空) |
Enabled | boolean | 是否在该群内启用了机器人功能 |
MemberCount | number | 当前成员数量 |
MaxMemberCount | number | 该群最大成员上限 |
全局 API 引用
framework 命名空间提供了访问和管理所有已加载适配器的入口。
declare namespace framework {
/**
* 获取指定名称的适配器实例
* @param platformName 平台名称 (如 "qq")
* @param adapterName 适配器名称 (如 "onebot11")
* @returns IAdapter 实例,若未找到则返回 null
*/
function GetAdapter(platformName: string, adapterName: string): IAdapter | null;
/**
* 获取当前系统加载的所有适配器列表
*/
function GetAdapters(): IAdapter[];
}
使用示例
1. 获取特定机器人的名称
这是最基础的用法,通过可选链安全地获取信息。
const botName = framework.GetAdapter("qq", "onebot11")?.GetProfile().Name;
logger.info(`当前机器人名称: ${botName ?? "未知"}`);
2. 遍历所有适配器并打印状态
用于监控当前所有已连接平台的运行情况。
const adapters = framework.GetAdapters();
adapters.forEach(adapter => {
const profile = adapter.GetProfile();
logger.info(`[${adapter.PlatformName}] ${profile.Name} - 已接收: ${profile.Received} 条消息`);
});
3. 异步获取群组列表
获取机器人所在的所有群组名称。
async function logGroupNames() {
const adapter = framework.GetAdapter("qq", "onebot11");
if (!adapter) return;
const groups = await adapter.GetGroupsAsync();
groups.forEach(g => logger.info(`发现群组: ${g.Name} (${g.Id})`));
}
提示
在编写插件时,建议优先通过 framework.GetAdapters() 动态获取实例,以增强插件对多账号、多协议的兼容能力。
遇到麻烦了?
我们提供有偿代安装服务,解决您的环境配置烦恼。