Skip to content

Sender API

Sender 是消息上下文对象,在插件处理消息时传入,提供了消息读取、回复、用户信息、群管理等一系列方法。

属性

属性类型说明
platformstring来源平台(qq / web / cli / xiaozhi ...)
bot_idstring机器人 ID
sender_idstring发送者 ID
sender_namestring发送者名称
receiver_idstring接收者 ID
receiver_typestring接收者类型(private / group
group_idstring群组 ID(私聊时为空)
group_namestring群组名称
messagestring消息文本
message_idstring消息 ID
plugin_namestring当前插件名
segmentsarray消息段列表
extraobject附加数据
timestampnumber时间戳
permission_levelnumber用户权限等级
is_groupboolean是否群聊
is_privateboolean是否私聊

方法列表

基础信息

方法说明Node.jsPython
获取消息文本获取原始消息文本getMessage()get_message()
获取发送者 ID获取发送者唯一标识getSenderId()get_sender_id()
获取发送者名称获取发送者昵称getSenderName()get_sender_name()
获取平台获取来源平台getPlatform()get_platform()
获取群组 ID获取群组标识getGroupId()get_group_id()
获取群组名称获取群组名称getGroupName()get_group_name()
获取消息 ID获取消息唯一标识getMessageId()get_message_id()
获取机器人 ID获取当前机器人标识getBotId()get_bot_id()
获取接收者 ID获取接收者标识getReceiverId()get_receiver_id()

身份判断

方法说明Node.jsPython
是否管理员判断发送者是否管理员isAdmin()is_admin()
是否群聊判断是否群聊消息isGroup()is_group()
是否私聊判断是否私聊消息isPrivate()is_private()

消息回复

方法说明Node.jsPython
回复消息发送文本回复reply(content)reply(content)
批量回复发送多条消息replyBatch(messages)reply_batch(messages)
撤回消息撤回指定消息recallMessage(id?, delay?)recall_message(id?, delay?)

等待输入

方法说明Node.jsPython
监听输入等待用户下一条消息listen(opts?)listen(opts?)
等待输入简化的等待输入waitInput(opts?)wait_input(opts?)
回复并监听回复后等待用户回复replyAndListen(content, opts?)reply_and_listen(content, opts?)
确认对话是/否确认askConfirm(question, yes?, no?, timeout?)ask_confirm(question, yes?, no?, timeout?)

流程控制

方法说明Node.jsPython
获取参数获取命令参数(按索引)param(index)param(index)
获取所有参数获取所有命令参数getAllParams()get_all_params()
中止处理中止后续插件执行abort()abort()
继续处理继续执行后续插件continue()continue()

群管理操作

方法说明Node.jsPython
踢出成员将成员踢出群组kick(userId?)kick(user_id?)
禁言禁言指定用户ban(userId?, duration?)ban(user_id?, duration?)
解除禁言解除用户禁言unban(userId?)unban(user_id?)
执行动作执行平台特定动作doAction(action, params?)do_action(action, params?)

上下文数据

方法说明Node.jsPython
获取数据获取插件私有数据getData(key, default?)get_data(key, default?)
设置数据设置插件私有数据setData(key, value)set_data(key, value)
获取配置获取插件配置getConfig(key?, default?)get_config(key?, default?)

用户身份

方法说明Node.jsPython
获取 LinkZone ID获取用户全局 IDgetLinkZoneID()get_linkzone_id()
获取用户信息获取用户详细信息getUserInfo()get_user_info()

使用示例

基础回复

javascript
async handleMessage(sender) {
    await sender.reply('收到!');
}

命令参数处理

javascript
// 触发器: /echo
async handleMessage(sender) {
    const text = await sender.param(0);  // 获取第一个参数
    const allParams = await sender.getAllParams();  // 获取所有参数
    await sender.reply(text || '请输入内容');
}

多轮对话

javascript
async handleMessage(sender) {
    await sender.reply('请问你的名字是?');
    const result = await sender.listen({ timeout: 30000 });
    if (!result.timeout && result.sender) {
        const name = result.sender.getMessage();
        await sender.reply(`你好,${name}!`);
    }
}

确认对话

javascript
async handleMessage(sender) {
    const confirmed = await sender.askConfirm(
        '确定要执行此操作吗?',
        ['是', '确定', 'yes'],
        ['否', '取消', 'no'],
        15000
    );
    if (confirmed) {
        await sender.reply('操作已执行');
    } else {
        await sender.reply('操作已取消');
    }
}

获取用户信息

javascript
async handleMessage(sender) {
    const lzId = await sender.getLinkZoneID();
    const userInfo = await sender.getUserInfo();
    await sender.reply(`你的全局 ID: ${lzId}\n等级: ${userInfo.level}`);
}

群管理

javascript
async handleMessage(sender) {
    if (!sender.isAdmin()) {
        await sender.reply('仅管理员可执行此操作');
        return;
    }
    // 禁言某用户 60 秒
    await sender.ban('user123', 60);
    await sender.reply('已禁言该用户');
}

listen 选项

javascript
await sender.listen({
    timeout: 30000,           // 超时时间(毫秒)
    rules: [],                // 匹配规则
    listenPrivate: false,     // 是否监听私聊
    listenGroup: true,        // 是否监听群聊
    cancelKeywords: ['取消']  // 取消关键词
});

返回值:

javascript
{
    sender: Sender | null,    // 发送者上下文
    timeout: boolean,         // 是否超时
    cancelled: boolean        // 是否取消
}

基于 MIT 许可发布 | QQ 群:581485581 点击加入