跳到主要内容
版本:2.0.0

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 (机器人资料)

描述当前登录机器人的身份信息与运行统计。

属性类型描述
Idstring机器人在该平台下的唯一标识
Namestring机器人昵称
IsActiveboolean当前连接状态是否激活
Receivednumber自启动以来接收的消息总数
Sentnumber自启动以来发送的消息总数
StartedDate适配器启动的时间戳

Group (群组信息)

描述机器人所加入的群聊/频道详细信息。

属性类型描述
Idstring群组唯一 ID
Platformstring所属平台名称
Namestring群名称
Avatarstring | null群头像 URL(可能为空)
Enabledboolean是否在该群内启用了机器人功能
MemberCountnumber当前成员数量
MaxMemberCountnumber该群最大成员上限

全局 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() 动态获取实例,以增强插件对多账号、多协议的兼容能力。

遇到麻烦了?

我们提供有偿代安装服务,解决您的环境配置烦恼。

了解详情