IAdapterContext - 适配器上下文
适配器上下文接口提供与即时通讯平台交互的核心功能,是所有适配器都必须实现的通用接口。
该接口由于部分实现端存在差异问题,如果你尝试使用await等待异步返回结果,可能会出现卡死线程的问题,请谨慎使用!
接口定义
declare interface IAdapterContext {
// 消息发送
SendGroupMessageAsync(selfId: string, peerId: string, chain: MessageChain, token?: any): Promise<string>;
SendDirectMessageAsync(selfId: string, peerId: string, chain: MessageChain, token?: any): Promise<string>;
// 用户信息
GetUserProfileAsync(selfId: string, userId: string, token?: any): Promise<UserProfile>;
GetGroupMemberInfo(groupId: string, userId: string, token?: any): Promise<MemberInfo>;
GetGroupMemberList(groupId: string, token?: any): Promise<ArrayLike<MemberInfo>>;
// 群组操作
GetGroupName(groupId: string, noCache?: boolean, any?: any): Promise<string>;
SetNickName(slefId: string, userId: string, groupId: string, nickName: string, token?: any): Promise<void>;
SetGroupAddRequest(flag: string, isInvite: boolean, approve: boolean, reason?: string): Promise<void>;
KickMember(groupId: string, userId: string, rejectAddRequest?: boolean): Promise<void>;
SetMute(groupId: string, userId: string, duration: number): Promise<void>;
// 消息操作
DeleteMessage(messageId: string): Promise<void>;
// 原生操作
SendRaw(data: string): Promise<void>;
}
消息发送方法
SendGroupMessageAsync()
发送群组消息。
语法: SendGroupMessageAsync(selfId: string, peerId: string, chain: MessageChain, token?: any): Promise<string>
参数:
selfId
- 机器人账号IDpeerId
- 目标群组IDchain
- 消息链对象token
- 可选取消令牌
返回值: 返回消息ID的Promise
示例:
const messageId = await context.SendGroupMessageAsync(
"bot123",
"group456",
new MessageChain().Text("Hello Group!")
);
logger.info(`消息已发送,ID: ${messageId}`);
SendDirectMessageAsync()
发送私聊消息。
语法: SendDirectMessageAsync(selfId: string, peerId: string, chain: MessageChain, token?: any): Promise<string>
参数:
selfId
- 机器人账号IDpeerId
- 目标用户IDchain
- 消息链对象token
- 可选取消令牌
返回值: 返回消息ID的Promise
示例:
const messageId = await context.SendDirectMessageAsync(
"bot123",
"user789",
new MessageChain().Text("Hello User!")
);
用户信息方法
GetUserProfileAsync()
获取用户资料。
语法: GetUserProfileAsync(selfId: string, userId: string, token?: any): Promise<UserProfile>
参数:
selfId
- 机器人账号IDuserId
- 目标用户IDtoken
- 可选取消令牌
返回值: 返回用户资料的Promise
示例:
const profile = await context.GetUserProfileAsync("bot123", "user789");
logger.info(`用户: ${profile.Name} (${profile.Id})`);
GetGroupMemberInfo()
获取群成员信息。
语法: GetGroupMemberInfo(groupId: string, userId: string, token?: any): Promise<MemberInfo>
参数:
groupId
- 目标群组IDuserId
- 目标成员IDtoken
- 可选取消令牌
返回值: 返回成员信息的Promise
示例:
const member = await context.GetGroupMemberInfo("group456", "user789");
logger.info(`${member.NickName} 的角色是 ${member.Role}`);
GetGroupMemberList()
获取群成员列表。
语法: GetGroupMemberList(groupId: string, token?: any): Promise<ArrayLike<MemberInfo>>
参数:
groupId
- 目标群组IDtoken
- 可选取消令牌
返回值: 返回成员信息列表的Promise
示例:
const members = await context.GetGroupMemberList("group456");
logger.info(`群组共有 ${members.length} 个成员`);
群组操作方法
GetGroupName()
获取群名称。
语法: GetGroupName(groupId: string, noCache?: boolean, any?: any): Promise<string>
参数:
groupId
- 目标群组IDnoCache
- 是否禁用缓存any
- 可选取消令牌
返回值: 返回群名称的Promise
示例:
const groupName = await context.GetGroupName("group456");
logger.info(`群名称: ${groupName}`);
SetNickName()
设置群成员昵称。
语法: SetNickName(slefId: string, userId: string, groupId: string, nickName: string, token?: any): Promise<void>
参数:
slefId
- 机器人账号ID(注意参数名拼写)userId
- 目标成员IDgroupId
- 目标群组IDnickName
- 新昵称token
- 可选取消令牌
返回值: 无返回值的Promise
示例:
await context.SetNickName("bot123", "user789", "group456", "新昵称");
SetGroupAddRequest()
处理群组加群请求。
语法: SetGroupAddRequest(flag: string, isInvite: boolean, approve: boolean, reason?: string): Promise<void>
参数:
flag
- 请求标识符isInvite
- 是否为邀请请求approve
- 是否批准请求reason
- 拒绝理由(可选)
返回值: 无返回值的Promise
示例:
// 批准加群请求
await context.SetGroupAddRequest("request123", false, true);
// 拒绝加群请求
await context.SetGroupAddRequest("request456", false, false, "不符合入群条件");
KickMember()
踢出群成员。
语法: KickMember(groupId: string, userId: string, rejectAddRequest?: boolean): Promise<void>
参数:
groupId
- 目标群组IDuserId
- 目标成员IDrejectAddRequest
- 是否拒绝再次加群请求(可选)
返回值: 无返回值的Promise
示例:
await context.KickMember("group456", "user789", true);
SetMute()
禁言群成员。
语法: SetMute(groupId: string, userId: string, duration: number): Promise<void>
参数:
groupId
- 目标群组IDuserId
- 目标成员IDduration
- 禁言时长(秒)
返回值: 无返回值的Promise
示例:
// 禁言10分钟
await context.SetMute("group456", "user789", 600);
// 解除禁言
await context.SetMute("group456", "user789", 0);
消息操作方法
DeleteMessage()
撤回消息。
语法: DeleteMessage(messageId: string): Promise<void>
参数:
messageId
- 目标消息ID
返回值: 无返回值的Promise
示例:
await context.DeleteMessage("msg123");
原生操作方法
SendRaw()
发送原生数据包。
语法: SendRaw(data: string): Promise<void>
参数:
data
- 原生数据包
返回值: 无返回值的Promise
示例:
const rawData = JSON.stringify({
action: "custom_action",
params: { key: "value" }
});
await context.SendRaw(rawData);
使用示例
群组管理机器人
// 处理群消息事件
bus.on("group_message_event", async (event) => {
const { AdapterContext: context, SelfId, PeerId, SenderId, RawMessage } = event;
if (RawMessage === "/群信息") {
const groupName = await context.GetGroupName(PeerId);
const members = await context.GetGroupMemberList(PeerId);
const reply = new MessageChain()
.Text(`群名称: ${groupName}`)
.NextLine()
.Text(`成员数量: ${members.length}`);
await context.SendGroupMessageAsync(SelfId, PeerId, reply);
}
});
注意事项
- 异步操作: 所有方法都返回 Promise,需要使用 await
- 错误处理: 建议使用 try-catch 处理可能的异常
- 权限检查: 某些操作需要机器人具有相应权限
- 参数拼写: 注意 SetNickName 方法中的 slefId 参数拼写
- 平台差异: 不同适配器可能对某些功能有不同的实现