使用说明与权限规则
正向与反向 WebSocket SDK 提供相同的 API。除特别注明外,所有 API 都返回 Promise,成功时解析为业务数据,失败时抛出错误。
插件市场服务实行 action 白名单:官网发布表单读取当前框架能力清单,由开发者多选插件实际需要的 API 与事件;审核通过后进入目录,安装时冻结为服务授权快照。官网选择是唯一授权来源,安装包无需清单文件,也不能通过包内字段改变权限。未授权 action 返回失败的 action_result。旧手工 WS 服务保持兼容行为,避免升级造成现有业务中断。
当前源码 API 基线
本页已与当前萌卡 NT 源码和官网权限目录同步,当前公开 187 个 API;事件目录包含 6 类标准事件。Node.js SDK 已同步本轮新增的便捷方法,并可通过通用调用入口使用目录内全部 API。
系统信息
23 个接口消息与媒体
45 个接口好友与空间
27 个接口群聊管理
45 个接口Bot 管理
22 个接口QQ 宠物
25 个接口通用约定
通用约定
- Bot 业务 API 的
self_id是执行操作的在线 Bot QQ 号。 - Bot 管理 API 的
self_id是当前节点下被操作账号的 QQ 号,部分登录流程允许账号处于离线或登录中状态。 - 插件只能访问管理后台中绑定节点下的 Bot。
- Bot API 通常要求目标 Bot 在线。
- SDK默认请求超时为 30 秒;红包与头像为 60 秒,语音、视频和批量等级任务为 5 分钟。
- 同一插件连接上的 API 会并发执行,当前每连接最多同时执行 16 个 action;响应可能乱序,但 SDK 会按请求 ID 解析对应 Promise。
- 连续
await会由调用方形成串行;需要并发时先发起多个调用,再使用Promise.all。 file_path中的本地路径由萌卡NT后端读取。插件与后端不在同一主机时,应传后端可访问的 HTTP(S) 地址。
获取登录号信息
get_login_info获取当前在线 Bot 的 QQ 号和昵称
获取当前在线 Bot 的登录号信息,返回结构与 OneBot/NapCat 同名接口一致。
调用
const info = await api.get_login_info(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
user_id: 123456789,
nickname: '示例账号',
}
接口不会返回密码、登录票据或其他敏感身份信息。
获取运行状态
get_status获取 MSF 在线状态与基础运行计数
获取当前在线 Bot 的连接状态与基础运行计数,返回结构与 OneBot/NapCat 同名接口兼容。
调用
const status = await api.get_status(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
online: true,
good: true,
stat: {
packet_received: 1024,
packet_sent: 128,
online_time: 3600,
},
}
online 只有在账号状态为在线且 MSF 连接处于已连接状态时才为 true。
获取版本信息
get_version_info获取框架版本和 OneBot 兼容版本
获取萌卡 NT 框架版本和兼容协议版本。
调用
const version = await api.get_version_info(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
app_name: 'Mengka-NT',
protocol_version: 'v11',
app_version: '1.5.11',
}
app_version 使用当前运行二进制的框架版本,不写死在 SDK 中。
获取在线客户端
get_online_clients返回 QQ Android 9.2.70 实时推送的账号在线设备列表
获取当前 QQ 账号的在线客户端列表。萌卡 NT 直接使用 QQ Android 9.2.70 下发的 RegisterProxy.PushParams 设备数据,不通过名称猜测,也不返回固定占位值。
const clients = await api.get_online_clients({
self_id: 106606,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 要查询的在线 Bot QQ 号 |
no_cache |
boolean | 否 | 兼容 Go-CQHTTP 参数;安卓端的设备变更由 QQ 服务端主动推送 |
成功时直接返回客户端数组:
[
{
"app_id": 1,
"device_name": "DESKTOP",
"device_kind": "Windows",
"client_type": 2,
"state": 1,
"platform_id": 3,
"new_client_type": 2
}
]
app_id、客户端类型、状态和平台字段来自 QQ 服务端;device_kind 优先使用服务端平台名称。账号刚登录且设备推送尚未到达时会返回空数组,收到推送后会自动更新。
获取在线机型显示
_get_model_show使用账号会话和设备指纹查询 QQ 服务端可用机型名称
获取当前 QQ 账号与设备型号可用的在线机型显示名称。接口由萌卡 NT 后端直接使用当前账号的 Android 9.2.70 登录态、设备指纹和 QQ 会员机型服务完成,不依赖 NapCat 或其他框架进程。
const result = await api._get_model_show({
self_id: 1060221,
model: 'Xiaomi 14 Pro',
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 要查询的在线 Bot QQ 号 |
model |
string | 否 | 手机型号;未填写时使用账号绑定指纹中的型号 |
成功时返回:
{
"variants": [
{
"model_show": "Xiaomi 14 Pro",
"need_pay": false
}
]
}
need_pay 表示该显示名称是否要求 QQ 会员权益。查询结果来自 QQ 服务端,不使用固定占位数据。
设置在线机型显示
_set_model_show设置在线机型名称,或恢复 QQ 默认显示
设置当前 QQ 账号的在线机型显示名称。接口由萌卡 NT 原生后端使用账号会话和设备指纹调用 QQ 服务,不依赖其他机器人框架。
await api._set_model_show({
self_id: 1060221,
model: 'Xiaomi 14 Pro',
model_show: 'Xiaomi 14 Pro',
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 要设置的在线 Bot QQ 号 |
model |
string | 否 | 手机型号;未填写时使用账号绑定指纹中的型号 |
model_show |
string | 否 | 要显示的机型名称;传空字符串时恢复 QQ 默认显示 |
建议先调用 _get_model_show 获取当前账号可用的显示名称,再选择 need_pay=false 或账号已具备权益的项目。成功时返回空数据。
设置在线状态
set_online_status设置在线、离开、忙碌、隐身及扩展状态
设置当前在线 Bot 的基础在线状态或 QQ 扩展状态。底层使用 QQ Android 9.2.70 的真实状态请求,不依赖 PC QQ。
调用
await api.set_online_status(self_id, status, ext_status, battery_status)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
status |
number | string | 是 | 基础状态:10 在线、30 离开、40 隐身、50 忙碌、60 Q我吧、70 请勿打扰 |
ext_status |
number | string | 是 | QQ 扩展状态 ID;普通基础状态填写 0 |
battery_status |
number | string | 是 | 电量状态值 0-100;仅当 ext_status=1000 时写入请求,其余状态填写 0 |
数值参数同时接受 JSON number 和十进制字符串,便于兼容现有 OneBot/NapCat 插件。
返回值
成功返回 null。
示例
// 普通在线
await api.set_online_status(123456789, 10, 0, 0)
// 显示 76% 电量
await api.set_online_status(123456789, 10, 1000, 76)
// 离开
await api.set_online_status(123456789, 30, 0, 0)
离线请使用账号管理接口
该 action 只修改 QQ 在线展示状态,不接受离线状态。需要断开账号时请调用 offline_account。
设置自定义在线状态
set_diy_online_status设置自定义状态图标和文字
设置当前在线 Bot 的自定义状态图标和文字。底层使用 QQ Android 9.2.70 的真实自定义状态请求。
调用
const message = await api.set_diy_online_status(
self_id,
face_id,
face_type,
wording,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
face_id |
number | string | 是 | QQ 自定义状态图标 ID,必须大于 0 |
face_type |
number | string | 否 | 图标类型,默认 1 |
wording |
string | 否 | 状态文字,默认一个空格 |
数值参数同时接受 JSON number 和十进制字符串。
返回值
返回 QQ 服务端给出的状态设置结果文字,例如:
set status success
示例
await api.set_diy_online_status(
123456789,
1,
1,
'API 验证',
)
需要恢复普通状态时,调用:
await api.set_online_status(123456789, 10, 0, 0)
设置正在输入状态
set_input_status向指定好友同步正在输入或结束输入状态
向指定好友同步正在输入或结束输入状态。
调用
await api.set_input_status(self_id, user_id, event_type)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
user_id |
number | 是 | 好友 QQ 号 |
event_type |
number | 否 | 1 表示正在输入,0 表示结束 |
目标必须是当前账号的好友。成功返回空对象。
获取用户在线状态
nc_get_user_status查询指定 QQ 当前的在线状态与扩展状态
查询指定 QQ 当前的基础在线状态和扩展状态。
调用
const status = await api.nc_get_user_status(self_id, user_id)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
user_id |
number | 是 | 要查询的 QQ 号 |
返回值包含 status、ext_status 等 QQ 服务端实时字段。好友隐私设置可能限制可见状态。
检查图片发送能力
can_send_image检查在线 Bot 是否可以发送图片
检查当前在线 Bot 是否具备图片发送能力。
调用
const result = await api.can_send_image(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{ yes: true }
只有通过在线状态和节点归属校验的 Bot 才能调用该接口。
检查语音发送能力
can_send_record检查在线 Bot 是否可以发送语音
检查当前在线 Bot 是否具备语音发送能力。
调用
const result = await api.can_send_record(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{ yes: true }
只有通过在线状态和节点归属校验的 Bot 才能调用该接口。
下载远程文件
download_file将公开 HTTP(S) 文件安全下载到框架目录
将公开 HTTP(S) 地址的文件下载到萌卡 NT 框架目录下,并返回后端可直接读取的本地绝对路径。该接口是框架级接口,不需要 self_id。
调用
const result = await api.download_file({
url: 'https://example.com/files/example.zip',
headers: {
Authorization: 'Bearer example-token',
},
})
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url |
string | 是 | 仅支持公开的 HTTP(S) 地址 |
headers |
object | string[] | 否 | 下载请求头;数组格式为 Header-Name: value |
thread_count |
number | 否 | 兼容字段;当前版本使用稳定的单连接下载 |
返回值
{
file: '/framework/data/plugin-downloads/随机前缀-example.zip',
}
文件始终保存在框架目录的 data/plugin-downloads 中,不会写入系统临时目录或框架目录之外。单个文件最大 128 MiB,最多跟随 5 次重定向;本机、内网和保留网段地址会被拒绝,防止插件借下载接口访问框架内部服务。
下载失败时会返回明确的 HTTP 状态、文件大小或地址安全错误,不会保留未完成的 .part 文件。
流式下载文件
download_file_stream通过分片帧下载文件
以分片帧下载文件。多账号框架在解析 QQ 媒体 file_id 时应传 self_id;公开 URL、Base64 或框架目录内文件可省略。
await api.download_file_stream({ self_id: 123456789, file_id: 'file-id', chunk_size: 65536 })
框架先发送 action_stream:第一帧 data_type=file_info,随后为一个或多个 file_chunk;最终 action_result.data.data_type=file_complete。chunk_size 范围为 1 字节到 4 MiB,文件总大小上限为 128 MiB。
流式下载图片
download_file_image_stream通过分片帧下载图片并返回宽高
参数及分片顺序与 download_file_stream 相同。首个 file_info 额外返回 width、height,无法识别为图片时请求失败。
await api.download_file_image_stream({ self_id: 123456789, file_id: 'image-id' })
流式下载语音
download_file_record_stream通过分片帧下载语音并可转换格式
流式下载语音。可选 out_format:mp3、amr、wma、m4a、spx、ogg、wav、flac;转换依赖框架管理的 FFmpeg 容器。
await api.download_file_record_stream({ self_id: 123456789, file_id: 'voice-id', out_format: 'mp3' })
流式上传文件
upload_file_stream分片上传文件并校验大小与 SHA-256
按 stream_id 分片上传文件。新流必须填写 total_chunks,每个分片填写 Base64 chunk_data 与从 0 开始的 chunk_index。分片可乱序,重复提交相同分片不会重复计数。
await api.upload_file_stream({
stream_id: 'job-1', total_chunks: 2, chunk_index: 0,
chunk_data: 'SGVsbG8g', file_size: 11, filename: 'hello.txt'
})
await api.upload_file_stream({ stream_id: 'job-1', chunk_index: 1, chunk_data: 'V29ybGQ=' })
const result = await api.upload_file_stream({ stream_id: 'job-1', is_complete: true })
可选 expected_sha256 用于完整性校验,verify_only 查询状态,reset 清理未完成流。file_retention 单位毫秒,默认 5 分钟,填 0 表示不自动删除完成文件。未完成流 10 分钟无活动会自动回收,所有文件均限定在框架目录的 data/stream-temp。
清理流式临时文件
clean_stream_temp_file清理框架目录内的流式传输临时文件
清理全部未完成流和框架目录 data/stream-temp 中的流式传输文件,不影响其他媒体缓存。
await api.clean_stream_temp_file({})
测试流式下载
test_download_stream验证插件是否正确消费分片帧
发送 10 个 data_chunk 测试帧,随后返回 data_complete,用于检查插件的流式帧消费逻辑。
await api.test_download_stream({ error: false })
传 error: true 时,10 个测试帧发送完毕后返回失败响应。
重启框架服务
set_restart保留账号缓存会话并重启当前框架进程
重启当前萌卡 NT 框架进程。调用成功后先返回 null,随后关闭本地 QQ 连接并保留缓存会话,再使用原启动参数重新启动框架。
该接口会短暂中断全部插件连接和管理页面请求,应只授予可信插件。
await api.set_restart({})
检查网址安全性
check_url_safely由 QQ Android 服务返回安全、未知或危险等级
使用当前在线 Android QQ 登录态,请求 QQ 服务器判断网址安全等级。该接口会返回真实的服务端判定,不使用固定的“安全”占位值。
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行检测的在线 Bot QQ 号 |
url |
string | 是 | 完整的 http:// 或 https:// 网址,最长 4096 字符 |
返回值
{
level: 1,
}
level 含义:
1:安全。2:未知,QQ 服务器没有给出明确安全结果。3:危险。
调用示例
{
"action": "check_url_safely",
"params": {
"self_id": 1060221,
"url": "https://www.qq.com/"
}
}
英文翻译为中文
translate_en2zh调用 QQ Android 批量翻译服务
使用 QQ Android 的批量翻译服务,将英文文本翻译为中文。
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行翻译的在线 Bot QQ 号 |
words |
string[] | 是 | 英文文本列表,每次最多 50 项 |
返回值
{
words: ["你好", "世界"],
}
返回列表与请求列表顺序一致;如果 QQ 服务器返回数量不匹配,框架会直接返回错误,不会用空文本补齐。
调用示例
{
"action": "translate_en2zh",
"params": {
"self_id": 1060221,
"words": ["hello", "world"]
}
}
发送原始协议包
send_packet使用当前账号会话发送已组装的原生协议包
使用当前 QQ 9.2.70 登录会话发送已组装的原生协议包。
调用
const responseHex = await api.send_packet(self_id, cmd, data, true, reserve)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
cmd |
string | 是 | SSO 命令名 |
data |
string | 是 | 请求体十六进制字符串,最大 4 MiB |
rsp |
boolean | 否 | 是否等待回包,默认 true |
reserve |
string | 否 | 自定义 reserve 十六进制;省略时由框架生成标准 reserve |
等待回包时返回小写十六进制字符串;rsp=false 时成功返回 null。
高权限接口
插件必须只发送自身业务明确需要的命令和数据。官网未授权此 action 时框架会直接拒绝调用。
发送群聊消息
send_group_msg向指定群聊发送消息
发送群聊消息。
调用
const result = await api.send_group_msg(self_id, group_id, message)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 目标群聊 ID |
message |
Segment[] | 是 | 消息段数组 |
支持 text、reply、at、image、voice、video 和 face 等群聊消息段,详见消息段。
video 必须作为消息数组中的唯一消息段单独发送。
返回值
{
success: true,
message_id: 123456789,
msg_seq: 123,
msg_random: 456,
}
message_id 可直接用于后续引用回复;msg_seq 与 msg_random 可用于 recall_group_msg。
示例
await api.send_group_msg(123456789, 987654321, [
{ type: 'text', data: { text: '你好 🎉 [bq190]' } },
{ type: 'at', data: { uin: '112233445' } },
])
text 直接支持 Unicode emoji,并会把 [bq190] 解析为 QQ 自带的 190 号表情。需要精确控制表情消息段时,也可以使用 { type: 'face', data: { kind: 'qq_face', face_id: '190' } }。
引用回复
把收到的群消息事件或本接口返回的 message_id 放入 reply 段,即可发送 QQ 原生引用回复:
await api.send_group_msg(123456789, 987654321, [
{ type: 'reply', data: { message_id: event.message_id } },
{ type: 'text', data: { text: '已收到,我来处理。' } },
])
兼容 OneBot 写法 { type: 'reply', data: { id: event.message_id } }。引用消息必须属于当前群,一条消息只能包含一个 reply 段,且引用段后至少需要一个正文消息段。消息缓存过期后应重新从消息事件或历史消息接口获取 message_id。
发送好友消息
send_friend_msg向指定好友发送消息
发送好友消息。
调用
const result = await api.send_friend_msg(self_id, user_id, message)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
user_id |
number | 是 | 好友 QQ 号 |
message |
Segment[] | 是 | 消息段数组,支持 text、reply、image 和 QQ 原生 face |
返回值
{ success: true, message_id: 123456789, msg_seq: 123, msg_random: 456 }
示例
await api.send_friend_msg(123456789, 112233445, [
{ type: 'text', data: { text: '你好 🎉 [bq190]' } },
])
text 直接支持 Unicode emoji,并会把 [bq190] 解析为 QQ 自带的 190 号表情。结构化写法为 { type: 'face', data: { kind: 'qq_face', face_id: '190' } }。
user_id 必须使用 QQ 号,不接受 UID。
引用回复
把当前好友会话中消息事件的 message_id 放入 reply 段:
await api.send_friend_msg(123456789, 112233445, [
{ type: 'reply', data: { message_id: event.message_id } },
{ type: 'text', data: { text: '好的,已经看到了。' } },
])
也兼容 { type: 'reply', data: { id: event.message_id } }。引用消息必须属于当前好友会话,不能拿其他好友或群聊的 message_id 进行引用。send_private_msg 和 send_msg 使用同一种 reply 消息段。
发送群临时会话消息
send_group_temp_msg通过共同群聊向非好友群成员发起临时私聊
通过共同群聊向群成员发送 QQ 原生临时会话消息。目标 QQ 不需要与发送账号建立好友关系。
调用
const result = await api.send_group_temp_msg(self_id, group_id, user_id, message)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 临时会话的来源群号 |
user_id |
number | 是 | 来源群内的目标成员 QQ 号 |
message |
Segment[] | 是 | 消息段数组,支持 text、reply、image 和 QQ 原生 face |
框架会在发送前从 QQ 服务器读取群成员列表,确认发送账号和目标 QQ 都在该群中。group_id 会写入 Android QQ 的临时会话协议路由,不会降级成普通好友私聊。
如果群设置禁止普通成员发起临时会话,普通成员调用会直接返回权限错误;群主和管理员仍可正常发送。
返回值
{
success: true,
message_id: 123456789,
msg_seq: 123,
msg_random: 456,
message_type: 'private',
sub_type: 'group',
group_id: 987654321
}
示例
await api.send_group_temp_msg(123456789, 987654321, 112233445, [
{ type: 'text', data: { text: '你好,我从群成员列表联系你。' } },
])
收到的临时会话事件仍属于私聊消息,但会额外携带 sub_type: 'group' 和来源 group_id。
引用回复
临时会话支持 QQ 原生引用回复。被引用消息必须来自同一来源群与同一目标成员:
await api.send_group_temp_msg(self_id, group_id, user_id, [
{ type: 'reply', data: { message_id: event.message_id } },
{ type: 'text', data: { text: '收到。' } },
])
OneBot 兼容接口 send_private_msg 在同时传入 group_id 和 user_id 时,会自动使用此临时会话能力。
发送私聊消息(OneBot 兼容)
send_private_msg兼容 NapCat 的私聊消息参数与返回值
OneBot 兼容的私聊发送接口。默认使用好友消息链路;同时传入来源 group_id 时使用 QQ 原生群临时会话链路。
调用
const result = await api.send_private_msg(self_id, user_id, message)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
user_id |
number | 是 | 好友 QQ 号 |
group_id |
number | 否 | 来源群号;填写后允许向该群内的非好友成员发起临时会话 |
message |
string | Segment | Segment[] | 是 | 文本、单个消息段或消息段数组 |
返回值
{ message_id: 123 }
message_id 对应 QQ 回执中的消息序号。错误会通过标准 action_result 返回。
示例
await api.send_private_msg(123456789, 112233445, '你好 🎉')
向非好友群成员发送临时会话:
socket.send(JSON.stringify({
type: 'action',
action: 'send_private_msg',
id: 'temp-1',
params: {
self_id: 123456789,
group_id: 987654321,
user_id: 112233445,
message: '你好,我从群成员列表联系你。',
},
}))
user_id 必须使用 QQ 号,不接受 UID。临时会话发送前会校验双方都在 group_id 指定的群内。
发送消息(OneBot 兼容)
send_msg按私聊或群聊目标统一发送消息
OneBot/NapCat 兼容的通用消息发送接口,根据 message_type 路由到私聊或群聊发送链路。
调用
const result = await api.send_msg(self_id, message_type, target_id, message)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_type |
private | group |
是 | 消息目标类型 |
target_id |
number | 是 | 私聊时为好友 QQ 号,群聊时为群号 |
message |
string | Segment | Segment[] | 是 | 文本、单个消息段或消息段数组 |
底层协议参数也可以直接传 user_id 或 group_id。省略 message_type 时只能填写其中一项,框架会自动判定目标类型。
返回值
{ message_id: 123 }
示例
await api.send_msg(123456789, 'group', 778899, [
{ type: 'text', data: { text: '群消息' } },
])
处理事件快速操作
.handle_quick_operation根据消息或申请事件上下文执行回复、撤回、群管理和申请处理
对 OneBot 消息事件或请求事件执行一组快速操作。该接口主要用于兼容反向 HTTP 上报的快速响应;WebSocket 插件也可直接调用。
await api.call('.handle_quick_operation', {
context,
operation
})
参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
context |
object | 是 | 框架上报的原始消息事件或请求事件 |
operation |
object | 是 | 要执行的快速操作 |
消息事件支持:
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
reply |
string / object / array | - | 回复文本、单个消息段或消息段数组 |
at_sender |
boolean | false |
群聊回复时先 @发送者,匿名消息会忽略 |
delete |
boolean | false |
撤回触发该事件的群消息 |
kick |
boolean | false |
将非匿名发送者移出群聊 |
reject_add_request |
boolean | false |
踢出后拒绝再次加群 |
ban |
boolean | false |
禁言非匿名发送者 |
ban_duration |
number | 1800 |
禁言秒数 |
请求事件支持:
| 字段 | 类型 | 说明 |
|---|---|---|
approve |
boolean | 同意或拒绝好友申请、加群申请或邀请 |
remark |
string | 同意好友申请时设置备注 |
reason |
string | 拒绝加群申请时填写理由 |
示例
收到群消息后回复、@发送者并禁言 10 分钟:
await api.call('.handle_quick_operation', {
context: event,
operation: {
reply: '已收到',
at_sender: true,
ban: true,
ban_duration: 600
}
})
说明
- 操作按照回复、撤回、踢出、禁言的顺序执行;任一步失败会返回明确的 action 名称和错误原因。
- 匿名群消息不执行
at_sender、kick或ban。 - 该接口复用
send_group_msg、send_private_msg、delete_msg、set_group_kick、set_group_ban、set_friend_add_request和set_group_add_request的现有实现。
撤回消息(OneBot 兼容)
delete_msg根据消息引用自动分派群聊或私聊撤回
撤回一条框架近期收到或发送的消息。框架根据 message_id 自动选择群聊或私聊的安卓协议撤回链路。
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_id |
number | 是 | 消息事件或发送接口返回的消息 ID |
await api.delete_msg(1060221, message_id)
消息引用默认保留 7 天;引用过期、目标消息已不可撤回或服务端拒绝时会返回明确错误。
获取消息(OneBot 兼容)
get_msg读取框架保留的标准消息引用和消息段
读取框架消息引用中保留的 OneBot 消息数据。
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_id |
number | 是 | 消息事件或发送接口返回的消息 ID |
返回 message_type、message_id、message_seq、发送者、标准消息段、原始文本和可用的 group_id。该接口读取框架缓存,不会重新拉取已过期的 QQ 历史消息。
获取群聊历史消息
get_group_msg_history从 QQ 服务器按消息序号分页读取群聊历史消息
从 QQ 服务器读取指定群聊的历史消息。该接口使用 Android QQ 9.2.70 的 MessageSvc.PbGetGroupMsg,返回的 message_id 可以继续用于 get_msg、撤回、转发和标记已读。
调用示例
const result = await api.get_group_msg_history({
self_id: 1060221,
group_id: 123456789,
message_seq: 0,
count: 20,
reverseOrder: false,
})
参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
group_id |
number | 是 | 群号 |
message_seq |
number | 否 | 分页锚点;传 0 从最新消息开始 |
count |
number | 否 | 返回数量,默认 20,范围 1-100 |
reverseOrder |
boolean | 否 | 是否反转本页消息顺序,默认 false;也兼容 reverse_order |
返回值
{
"messages": [
{
"time": 1720000000,
"self_id": 1060221,
"post_type": "message",
"message_type": "group",
"message_id": 123456,
"group_id": 123456789,
"user_id": 106606,
"message": [{ "type": "text", "data": { "text": "你好" } }],
"raw_message": "你好"
}
],
"next_message_seq": 9980,
"has_more": true
}
继续向前翻页时,把上一次返回的 next_message_seq 传给 message_seq。
获取好友历史消息
get_friend_msg_history从 QQ 服务器按消息时间分页读取好友漫游消息
从 QQ 服务器读取指定好友的一日漫游消息。该接口使用 Android QQ 9.2.70 的 MessageSvc.PbGetOneDayRoamMsg,返回结构与实时好友消息一致。
调用示例
const result = await api.get_friend_msg_history({
self_id: 1060221,
user_id: 106606,
message_seq: 0,
count: 20,
reverseOrder: false,
})
参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
user_id |
number | 是 | 好友 QQ 号 |
message_seq |
number | 否 | 分页锚点;可传上一页的 next_message_seq 或已返回的 message_id,传 0 从最新消息开始 |
count |
number | 否 | 返回数量,默认 20,范围 1-100 |
reverseOrder |
boolean | 否 | 是否反转本页消息顺序,默认 false;也兼容 reverse_order |
返回值
{
"messages": [
{
"time": 1720000000,
"self_id": 1060221,
"post_type": "message",
"message_type": "private",
"message_id": 234567,
"user_id": 106606,
"target_id": 1060221,
"message": [{ "type": "text", "data": { "text": "你好" } }],
"raw_message": "你好"
}
],
"next_message_seq": 1719999000,
"has_more": true
}
next_message_seq 在好友漫游协议中实际表示上一页最早消息的时间游标,调用方只需原样回传,不要自行换算。
转发单条好友消息
forward_friend_single_msg将缓存消息内容转发给指定好友
将一条缓存消息的标准消息段重新发送给指定好友。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_id |
number | 是 | 来源消息 ID |
user_id |
number | 是 | 目标好友 QQ 号 |
await api.forward_friend_single_msg(1060221, message_id, 106606)
这是普通消息重发,不会生成 QQ 的合并转发卡片。
转发单条群消息
forward_group_single_msg将缓存消息内容转发到指定群聊
将一条缓存消息的标准消息段重新发送到指定群聊。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_id |
number | 是 | 来源消息 ID |
group_id |
number | 是 | 目标群号 |
await api.forward_group_single_msg(1060221, message_id, group_id)
这是普通消息重发,不会生成 QQ 的合并转发卡片。
标记群聊已读
mark_group_msg_as_read将指定群消息序号作为群聊已读游标上报
把指定群消息标记为已读。框架从 message_id 解析真实群号和消息序号,再通过安卓协议上报已读游标。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_id |
number | 是 | 群消息 ID |
await api.mark_group_msg_as_read(1060221, message_id)
标记私聊已读
mark_private_msg_as_read将指定好友消息时间作为私聊已读游标上报
把指定好友消息标记为已读。框架从 message_id 解析对端 QQ 和消息时间,再通过安卓协议上报已读游标。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_id |
number | 是 | 私聊消息 ID |
await api.mark_private_msg_as_read(1060221, message_id)
标记消息已读
mark_msg_as_read自动识别群聊或私聊并上报已读游标
标记一条消息已读。框架根据消息引用自动选择群聊序号或私聊时间游标。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_id |
number | 是 | 群聊或私聊消息 ID |
await api.mark_msg_as_read(1060221, message_id)
标记所有消息已读
_mark_all_as_read批量上报框架近期缓存的最新会话游标
将框架近期缓存中的所有会话标记为已读。框架会合并内存与 Redis 消息引用,只为每个群聊和每个好友上报最新游标。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
await api._mark_all_as_read(1060221)
该接口只处理框架已收到并保留引用的消息,不会假装清除 QQ 服务端上从未同步到框架的历史未读会话。
上传好友图片
upload_friend_image上传好友聊天图片
上传好友聊天图片,并返回可直接传给 send_friend_msg 的图片消息段。
调用
const image = await api.upload_friend_image(
self_id,
user_id,
file_path,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
user_id |
number | 是 | 目标好友 QQ 号 |
file_path |
string | 是 | 后端可访问的本地路径、file:// 或 HTTP(S) 地址 |
文件名由后端根据图片 MD5 自动生成,图片类型由后端设置为 1000。 |
返回值
{ type: 'image', data: { file_id: 'FILE_ID' } }
示例
const image = await api.upload_friend_image(
3879548525,
106030,
'D:/Pictures/3840x2160.jpg',
)
await api.send_friend_msg(3879548525, 106030, [image])
设置 QQ 头像
set_qq_avatar通过 Highway 上传当前 Bot 头像
设置当前 QQ Bot 的头像。后端不发送媒体 OIDB 请求,图片会直接通过 Highway HTTP 上传。
调用
const result = await api.set_qq_avatar(self_id, file_path)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
file_path |
string | 是 | 后端本地路径、file:// 或后端可访问的 HTTP(S) 地址 |
图片大小上限为 5MB。建议使用 PNG 或 JPEG 图片。
路径属于后端主机
插件和萌卡NT不在同一台主机时,插件本机路径对后端不可见。此时应提供后端可访问的 HTTP(S) 地址。
返回值
{ success: true }
QQ头像 CDN 可能存在短暂缓存,上传成功后旧头像仍可能显示一段时间。
示例
await api.set_qq_avatar(
123456789,
'https://example.com/avatar.png',
)
设置群头像
set_group_portrait按 QQ Android 9.2.70 的真实上传链路设置群聊头像
设置指定群聊的头像。萌卡NT会按 QQ Android 9.2.70 的 Highway command_id=3000 上传链路,先获取当前账号的 Highway 会话,再将公开群号转换为 QQ 内部群 UIN 后提交图片。
调用
const result = await api.set_group_portrait(self_id, group_id, file)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
group_id |
number / string | 是 | 公开群号 |
file |
string | 是 | 本地路径、file://、HTTP(S)、base64:// 或 Base64 data URL |
self_id |
number | 是 | 在线 Bot QQ 号 |
图片必须是有效的 GIF、JPEG 或 PNG,大小不超过 10 MiB。调用账号必须是群主或具备修改群头像的管理员权限。
路径属于后端主机
插件和萌卡NT不在同一台主机时,插件本机路径对后端不可见。此时应使用 HTTP(S)、base64:// 或 data URL。
返回值
{
result: 0,
errMsg: '',
new_seq: 24,
}
result 为 0 表示 QQ 已接受上传;非零值会作为调用错误返回。权限不足时 QQ 会返回 No Perm,不会被框架伪装为上传成功。群头像 CDN 可能有短暂缓存。
示例
await api.set_group_portrait(
106500,
'https://example.com/group-avatar.png',
1060221,
)
上传群聊图片
upload_group_image上传图片并生成图片消息段
上传群聊图片,并返回可直接发送的图片消息段。
调用
const image = await api.upload_group_image(
self_id,
group_id,
file_path,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 目标群聊 ID |
file_path |
string | 是 | 后端本地路径、file:// 或后端可访问的 HTTP(S) 地址 |
文件名由后端根据图片 MD5 自动生成,图片类型由后端设置为 1000。 |
返回值
{ type: 'image', data: { file_id: 'FILE_ID' } }
示例
const image = await api.upload_group_image(
123456789,
987654321,
'D:/images/example.png',
)
await api.send_group_msg(123456789, 987654321, [image])
插件与萌卡NT不在同一台主机时,不要传插件主机的本地路径;应传后端可访问的 HTTP(S) 地址。
上传群聊语音
upload_group_voice上传音频并生成语音消息段
上传群聊语音,并返回可直接发送的语音消息段。
调用
const voice = await api.upload_group_voice(self_id, group_id, file_path)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 目标群聊 ID |
file_path |
string | 是 | 后端本地路径、file:// 或后端可访问的 HTTP(S) 音频地址 |
后端通过 FFmpeg 解码常见音频格式,转换为单声道 24kHz PCM 后编码为 Silk,并生成语音波形。需要先安装并运行 FFmpeg 镜像。
返回值
{
type: 'voice',
data: {
file_id: 'FILE_ID',
duration: 5,
},
}
返回段只能发送到上传时指定的群。
示例
const voice = await api.upload_group_voice(
123456789,
987654321,
'D:/voices/example.mp3',
)
await api.send_group_msg(123456789, 987654321, [voice])
插件与萌卡NT不在同一台主机时,应传后端可访问的 HTTP(S) 地址。
上传群聊视频
upload_group_video上传 MP4 视频并生成视频消息段
上传群聊 MP4 视频,并返回可直接发送的视频消息段。
调用
const video = await api.upload_group_video(self_id, group_id, file_path)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 目标群聊 ID |
file_path |
string | 是 | MP4 的后端本地路径、file:// 或后端可访问的 HTTP(S) 地址 |
后端通过已安装并运行的 FFmpeg 镜像读取视频尺寸与时长,并自动提取 PNG 封面。
返回值
{
type: 'video',
data: {
file_id: 'FILE_ID',
},
}
返回段可直接传给 send_group_msg,并应发送到上传时指定的群聊。视频必须作为唯一消息段单独发送。
示例
const video = await api.upload_group_video(
123456789,
987654321,
'D:/videos/example.mp4',
)
await api.send_group_msg(123456789, 987654321, [video])
插件与萌卡NT不在同一台主机时,应传后端可访问的 HTTP(S) 地址。
上传私聊文件
upload_private_file通过 QQ Android 9.2.70 离线文件通道向好友发送文件
将本地文件或可下载的 HTTP(S) 文件发送给指定 QQ 好友。框架使用 QQ Android 9.2.70 的离线文件通道,依次完成签名申请、Highway 上传和私聊文件消息下发。
const result = await api.upload_private_file({
self_id: 2082083,
user_id: 1060221,
file: 'D:/Mengka-NT/files/report.txt',
name: 'report.txt',
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的在线 Bot QQ 号 |
user_id |
number | 是 | 接收文件的好友 QQ 号;也兼容 target_uin |
file |
string | 是 | 框架所在机器的本地文件路径、file:// 地址或 HTTP(S) 下载地址;也兼容 file_path |
name |
string | 是 | 好友侧显示的文件名;也兼容 file_name |
成功时返回:
{
"success": true,
"file_id": "文件 UUID",
"file_name": "report.txt",
"file_size": 128,
"message_id": 4399468640647658,
"msg_seq": 7117,
"client_seq": 10321
}
file_id 会缓存文件校验信息,可继续交给 get_private_file_url 获取下载地址;message_id 使用框架统一消息引用,可用于消息查询等后续操作。
路径与好友关系
正向 WebSocket 调用时,本地路径指框架所在机器,不是插件所在机器。目标 QQ 必须能被当前账号解析为有效好友;文件大小、上传频率和风险控制仍以 QQ 服务端返回为准。
获取群聊合并转发消息
get_group_forward_msg获取合并转发的完整内容
获取群聊合并转发消息的完整内容。
调用
const result = await api.get_group_forward_msg(
self_id,
sender_uin,
res_id,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
sender_uin |
number | 是 | 合并转发消息发送者 QQ 号 |
res_id |
string | 是 | 合并转发资源 ID |
返回值
{
res_id: 'RESOURCE_ID',
messages: [],
}
res_id 通常来自收到的合并转发卡片消息段。
获取合并转发消息(Go-CQHTTP 兼容)
get_forward_msg从消息 ID 或资源 ID 获取合并转发节点
获取合并转发消息的节点内容,兼容 Go-CQHTTP 与 NapCat 的 message_id / id 参数。
传入框架消息事件中的 message_id 时,会自动使用消息缓存中的真实发送者和合并转发资源 ID;也可以直接传入 send_group_forward_msg 返回的 res_id。
const result = await api.get_forward_msg({
self_id: 123456789,
message_id: '合并转发消息的 message_id 或 res_id'
})
返回值:
{
"messages": [
{
"type": "node",
"data": {
"user_id": 123456789,
"nickname": "发送者昵称",
"content": [{ "type": "text", "data": { "text": "内容" } }],
"time": 1787600000
}
}
]
}
发送合并转发消息(NapCat 兼容)
send_forward_msg按 `user_id` 或 `group_id` 自动选择私聊或群聊目标
NapCat 通用合并转发接口。填写 user_id 时发送给好友,填写
group_id 时发送到群聊;两个目标参数必须且只能填写一个。
私聊示例
const result = await api.send_forward_msg({
self_id,
user_id: 123456789,
messages: [{
type: 'node',
data: {
user_id: 123456789,
nickname: '示例用户',
content: '这是一条合并转发内容',
},
}],
})
群聊示例
const result = await api.send_forward_msg({
self_id,
group_id: 123456789,
messages,
})
节点结构、消息引用、返回字段与 send_private_forward_msg 和 send_group_forward_msg 一致。
发送私聊合并转发消息
send_private_forward_msg创建文本合并转发消息并发送给指定好友
创建文本合并转发消息并发送给指定好友,参数与 NapCat/Go-CQHTTP 兼容。
调用
const result = await api.send_private_forward_msg(
self_id,
user_id,
messages,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
user_id |
number | 是 | 接收合并转发的好友 QQ 号 |
messages |
object[] | 是 | 合并转发节点数组 |
upload_only |
boolean | 否 | 只上传并返回 Ark 消息段,不发送给好友 |
标准节点示例:
{
type: 'node',
data: {
user_id: 123456789,
nickname: '示例用户',
time: 1710000000,
content: [{ type: 'text', data: { text: '内容' } }],
},
}
content 也可以直接填写字符串。节点使用 data.id 时,会引用框架
近期缓存的 message_id。当前版本生成合并转发正文时支持 text
消息段,其余消息段会计入返回值中的 discarded_segments。
返回值
{
success: true,
message_id: 'MESSAGE_REFERENCE',
res_id: 'RESOURCE_ID',
forward_id: 'RESOURCE_ID',
uploaded_messages: 1,
discarded_messages: 0,
discarded_segments: 0,
}
发送群聊合并转发消息
send_group_forward_msg创建文本合并转发消息
上传文本合并转发消息并直接发送到目标群,行为与 NapCat/Go-CQHTTP 一致。
调用
const result = await api.send_group_forward_msg(
self_id,
group_id,
messages,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 目标群聊 ID |
messages |
object[] | 是 | 合并转发节点数组 |
upload_only |
boolean | 否 | 萌卡 NT 兼容参数;设为 true 时只上传并返回消息段,不直接发送 |
NapCat 标准节点结构:
{
type: 'node',
data: {
user_id: 123456789,
nickname: '示例用户',
time: 1710000000,
content: [{ type: 'text', data: { text: '内容' } }],
},
}
也兼容萌卡 NT 旧版扁平节点:
{
user_id: 123456789,
nickname: '示例用户',
time: 1710000000,
message: [{ type: 'text', data: { text: '内容' } }],
}
time 使用 Unix 秒。非 text 消息段会被忽略。
节点也可以填写 data.id,引用框架近 7 天消息缓存中的
message_id。对应消息必须仍在缓存且包含可转发的消息段。
返回值
{
success: true,
message_id: 'MESSAGE_REFERENCE',
res_id: 'RESOURCE_ID',
forward_id: 'RESOURCE_ID',
message: [],
uploaded_messages: 1,
discarded_messages: 0,
discarded_segments: 0,
}
示例
const forward = await api.send_group_forward_msg(self_id, group_id, messages)
console.log(forward.message_id, forward.res_id)
发送群红包
send_group_red_packet发送拼手气、普通、专属、语音或口令群红包
向指定群聊发送 QQ 群红包,支持拼手气、普通、专属、语音和口令五种类型。
调用
const result = await api.send_group_red_packet(
self_id,
group_id,
'lucky',
100,
2,
payment_password,
'恭喜发财',
)
total_amount 使用“分”为单位。上例表示总金额 1 元、共 2 份。
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 接收红包的群号 |
red_packet_type |
string | 是 | 红包类型:lucky、normal、exclusive、voice 或 command |
total_amount |
number | 是 | 红包总金额,单位为分 |
total_num |
number | 是 | 红包份数 |
payment_password |
string | 正式发送时是 | QQ 钱包支付密码,仅用于本次请求 |
wishing |
string | 否 | 祝福语、语音口令或文字口令 |
target_uins |
number[] | 专属红包时是 | 可领取专属红包的 QQ 号列表 |
options.dry_run |
boolean | 否 | 仅校验参数和发送链路,不执行支付 |
options.probe_confirm |
boolean | 否 | dry_run 时额外检查支付确认路由 |
红包类型对应关系:
| 类型 | 说明 |
|---|---|
lucky |
拼手气红包,每份金额随机 |
normal |
普通红包,每份金额相同 |
exclusive |
专属红包,需同时传入 target_uins |
voice |
语音红包,wishing 为语音口令 |
command |
口令红包,wishing 为文字口令 |
原始 action 参数
{
"action": "send_group_red_packet",
"params": {
"self_id": 123456789,
"group_id": 987654321,
"red_packet_type": "normal",
"total_amount": 100,
"total_num": 2,
"wishing": "恭喜发财",
"target_uins": [],
"payment_password": "本次请求的支付密码"
}
}
返回值
{
status: 'success',
red_packet_type: 'normal',
group_id: 987654321,
total_amount: 100,
total_num: 2
}
支付密码不会写入框架配置。调用方也不应记录、缓存或输出该字段。建议先使用 dry_run: true 检查参数和路由,再执行正式发送。
查询红包详细信息
get_red_packet_info查询收到的 QQ 红包状态与金额信息
查询群消息中 red_packet 消息段对应的 QQ 红包详细信息。
调用
const redPacket = event.message.find(segment => segment.type === 'red_packet')
const result = await api.get_red_packet_info(
event.self_id,
event.group_id,
event.sender.user_id,
redPacket.data,
)
也可以直接把完整的 red_packet 消息段作为第 4 个参数传入,官方 SDK 会自动读取其中的 data。
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 红包所在群号 |
sender_uin |
number | 是 | 红包发送人 QQ 号 |
red_packet |
object | 是 | 收到的 red_packet 消息段 data |
red_packet.title |
string | 否 | 红包标题 |
red_packet.listid |
string | 是 | 红包列表 ID |
red_packet.authkey |
string | 是 | 红包鉴权串 |
red_packet.channel |
number | 否 | 红包渠道,缺省为 0 |
red_packet.pay_flag |
number | 是 | 红包支付标记,取自收到的 red_packet 消息段 |
red_packet.hb_from |
number | 是 | 红包来源标记,取自收到的 red_packet 消息段 |
原始 action 参数
未使用官方 SDK 时,red_packet 必须作为对象放在 params 内:
{
"action": "get_red_packet_info",
"params": {
"self_id": 644691423,
"group_id": 714169244,
"sender_uin": 51974055,
"red_packet": {
"title": "恭喜发财",
"listid": "10000448012608253500114336737900",
"authkey": "45c7afde0cb06eed0198c763b46a580a",
"channel": 1,
"pay_flag": 0,
"hb_from": 0
}
}
}
请直接使用收到的红包消息段数据,不要自行拆分或重新生成 listid、authkey。官方 SDK 会兼容尚未更新的框架版本。
返回值
返回 QQ 红包服务解密后的 JSON 对象,例如:
{
retcode: '0',
retmsg: 'ok',
pre_grap_token: 'rand=...&sign=...&ts=...&ver=1',
send_object: {
channel: '1',
recv_amount: '0',
recv_num: '0',
send_listid: '10000452012608021400100537757900',
send_name: '示例用户',
send_uin: '350873596',
total_amount: '100',
total_num: '1',
wishing: '恭喜发财',
},
state: '16',
}
pre_grap_token 位于返回对象顶层。正式领取时,将它作为 grab_red_packet 的第 5 个参数传入。
领取红包
grab_red_packet领取收到的 QQ 群红包
领取群消息中 red_packet 消息段对应的 QQ 红包。
调用
const redPacket = event.message.find(segment => segment.type === 'red_packet')
const info = await api.get_red_packet_info(
event.self_id,
event.group_id,
event.sender.user_id,
redPacket.data,
)
const result = await api.grab_red_packet(
event.self_id,
event.group_id,
event.sender.user_id,
redPacket.data,
info.pre_grap_token,
)
也可以直接把完整的 red_packet 消息段作为第 4 个参数传入,官方 SDK 会自动读取其中的 data。
pre_grap_token 由 get_red_packet_info 返回,位于响应对象顶层。正式领取会将其作为 action 参数顶层的 pre_grap_token 发送。
Bot 的 skey、tenpay.com PsKey、昵称、设备指纹、协议 AppID 和红包加密上下文均由后端自动获取。
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 红包所在群号 |
sender_uin |
number | 是 | 红包发送人 QQ 号 |
red_packet |
object | 是 | 收到的 red_packet 消息段 data |
red_packet.title |
string | 否 | 红包标题 |
red_packet.listid |
string | 是 | 红包列表 ID |
red_packet.authkey |
string | 是 | 红包鉴权串 |
red_packet.channel |
number | 否 | 红包渠道,缺省为 0 |
red_packet.pay_flag |
number | 是 | 红包支付标记,取自收到的 red_packet 消息段 |
red_packet.hb_from |
number | 是 | 红包来源标记,取自收到的 red_packet 消息段 |
pre_grap_token |
string | 是 | get_red_packet_info 返回对象顶层的预领取 token |
原始 action 参数
未使用官方 SDK 时,red_packet 必须作为对象放在 params 内,pre_grap_token 放在 params 顶层:
{
"action": "grab_red_packet",
"params": {
"self_id": 644691423,
"group_id": 714169244,
"sender_uin": 51974055,
"red_packet": {
"title": "恭喜发财",
"listid": "10000448012608253500114336737900",
"authkey": "45c7afde0cb06eed0198c763b46a580a",
"channel": 1,
"pay_flag": 0,
"hb_from": 0
},
"pre_grap_token": "get_red_packet_info 返回的 pre_grap_token"
}
}
请直接使用收到的红包消息段数据,不要自行拆分或重新生成 listid、authkey。官方 SDK 会兼容尚未更新的框架版本。
返回值
返回 QQ 红包服务解密后的领取结果 JSON 对象。
获取群聊可领取红包
get_group_red_packets获取指定群聊中当前仍可领取的红包
获取指定群聊中当前仍可领取的红包。
调用
const packets = await api.get_group_red_packets(self_id, group_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行查询的 Bot QQ 号 |
group_id |
number | 是 | 群号 |
返回值
返回红包数组。没有可领取红包时返回空数组。
[
{
sender_uin: 123456789,
title: '恭喜发财',
listid: '红包列表 ID',
authkey: '领取凭据',
channel: 1,
pay_flag: 0,
hb_from: 0,
time: 1710000000,
},
]
获取可领取红包
get_up_for_grabs获取群聊可领取红包的兼容调用名
获取指定群聊中当前仍可领取的红包,与 get_group_red_packets 返回相同结果。
调用
const packets = await api.get_up_for_grabs(self_id, group_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行查询的 Bot QQ 号 |
group_id |
number | 是 | 群号 |
返回值
返回红包数组。没有可领取红包时返回空数组。字段与 get_group_red_packets 相同。
生成小程序 Ark 卡片
get_mini_app_ark生成可发送的小程序 Ark 数据
根据内置模板或完整小程序参数生成可发送的 Ark 数据。
调用
const result = await api.get_mini_app_ark(self_id, {
type: 'bili',
title: '视频标题',
desc: '视频简介',
jumpUrl: 'https://www.bilibili.com/video/BV...',
})
主要参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
type |
string | 否 | 内置模板:bili 或 weibo |
title |
string | 是 | 卡片标题 |
desc |
string | 否 | 卡片说明 |
picUrl |
string | 否 | 封面地址 |
jumpUrl |
string | 否 | 小程序跳转地址 |
webUrl |
string | 否 | Web 备用地址 |
rawArkData |
boolean | 否 | 返回 QQ 原始结构 |
不使用内置模板时,可额外传 appId、sdkId、iconUrl、versionId、scene、templateType、businessType、verType 和 shareType。
生成好友分享 Ark
ArkSharePeer生成指定好友的联系人分享卡片
生成指定好友的联系人分享 Ark。
调用
const result = await api.ArkSharePeer(self_id, user_id, phone_number)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
user_id |
number | 是 | 当前好友 QQ 号 |
phone_number |
string | 否 | 卡片中显示的手机号 |
返回 { result, errMsg, arkMsg },其中 arkMsg 可作为 Ark 消息内容继续发送。
生成群聊分享 Ark
ArkShareGroup生成指定群聊的分享卡片
生成指定群聊的分享 Ark。
调用
const ark = await api.ArkShareGroup(self_id, group_id)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 当前账号已加入的群号 |
返回 Ark JSON 字符串。
生成好友分享 Ark(兼容)
send_ark_share`ArkSharePeer` 的兼容调用名
ArkSharePeer 的兼容调用名,参数与返回值一致。
调用
const result = await api.send_ark_share(self_id, user_id, phone_number)
详见 ArkSharePeer。
生成群聊分享 Ark(兼容)
send_group_ark_share`ArkShareGroup` 的兼容调用名
ArkShareGroup 的兼容调用名,参数与返回值一致。
调用
const ark = await api.send_group_ark_share(self_id, group_id)
详见 ArkShareGroup。
获取 AI 声音角色
get_ai_characters获取群聊可用的 AI 声音角色列表
获取指定群聊当前可用的 AI 声音角色。
调用
const categories = await api.get_ai_characters(self_id, group_id, 1)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
chat_type |
number | 否 | 会话类型,默认 1 |
返回分类数组;每个分类包含可用于合成的角色 ID 和展示名称。
生成 AI 语音
get_ai_record合成 AI 语音并返回可访问地址
使用指定 AI 声音角色合成语音并返回访问地址。
调用
const url = await api.get_ai_record(self_id, group_id, character, text, 1)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
character |
string | 是 | 角色 ID |
text |
string | 是 | 要合成的文字 |
chat_type |
number | 否 | 会话类型,默认 1 |
合成可能需要数秒,成功返回临时语音 URL。
发送群聊 AI 语音
send_group_ai_record合成并直接发送群聊 AI 语音
合成并直接向指定群聊发送 AI 语音。
调用
await api.send_group_ai_record(self_id, group_id, character, text, 1)
参数与 get_ai_record 相同。成功表示 QQ 已接受发送流程,返回 { message_id: 0 }。
识别语音文字
fetch_ptt_text识别框架消息缓存中的群语音
识别框架近期收到并缓存的群语音文字。
调用
const result = await api.fetch_ptt_text(self_id, message_id, 0)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_id |
number | 是 | 群语音事件中的框架消息 ID |
format |
number | 否 | 语音格式提示,通常填 0 |
成功返回 { text }。消息引用或语音元数据过期后无法再次识别。
设置消息表情回应
set_msg_emoji_like添加或取消群消息表情回应
为群消息添加或取消指定表情回应。
调用
await api.set_msg_emoji_like(self_id, message_id, emoji_id, true)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_id |
number | 是 | 框架缓存中的群消息 ID |
emoji_id |
string | 是 | QQ 表情回应 ID |
set |
boolean | 否 | true 添加,false 取消 |
仅支持群消息。
分页获取消息表情回应
fetch_emoji_like分页获取指定表情的回应用户
分页获取群消息指定表情的回应用户。
调用
const page = await api.fetch_emoji_like(self_id, message_id, emoji_id, 100, cookie, 0)
返回 emojiLikesList、下一页 cookie、isFirstPage 和 isLastPage。继续翻页时原样传入上次返回的 cookie。
获取全部消息表情回应
get_emoji_likes自动翻页获取指定表情的全部回应用户
自动翻页获取群消息指定表情的全部回应用户。
调用
const result = await api.get_emoji_likes(self_id, message_id, emoji_id, 0)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
message_id |
number | 是 | 框架缓存中的群消息 ID |
emoji_id |
string | 是 | QQ 表情回应 ID |
emoji_type |
number | 否 | 表情类型,默认 0 |
返回 { emoji_like_list },每项包含 user_id 和 nick_name。
获取好友列表
get_friend_list获取完整好友列表
获取 Bot 的完整好友列表。萌卡NT会自动完成分页。
调用
const result = await api.get_friend_list(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
friends: [],
total_count: 0,
self_uin: 123456789,
}
获取单向好友列表
get_unidirectional_friend_list获取当前账号的真实单向好友关系
获取当前账号的单向好友列表。单向好友是仍关注当前账号、但没有出现在普通双向好友列表中的用户。
const users = await api.get_unidirectional_friend_list({
self_id: 106606,
top: 0,
count: 99,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 要查询的在线 Bot QQ 号 |
top |
number | 否 | 分页起点,默认 0 |
count |
number | 否 | 本次请求数量,默认 99,最大 200 |
cookie |
string | 否 | QQ 服务端返回的分页游标;首批不填写 |
成功时直接返回用户数组:
[
{
"uin": 1122334455,
"uid": "u_example",
"nick_name": "示例用户",
"age": 0,
"source": "通过群聊"
}
]
nick_name 和 source 由框架解码 QQ Android 9.2.70 的真实响应得到,不使用好友缓存拼接。没有单向好友时返回空数组。
获取资料获赞
get_profile_like获取当前登录 QQ 的真实资料获赞记录与统计
获取当前登录 QQ 的资料获赞记录。接口使用 QQ Android 9.2.70 的真实 VisitorSvc.ReqGetVoterList 请求,不读取网页缓存。
const result = await api.get_profile_like({
self_id: 2082083,
user_id: 2082083,
start: 0,
count: 10,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 要查询的在线 Bot QQ 号 |
user_id |
number | 否 | 查询目标;Android 9.2.70 当前只允许与 self_id 相同 |
start |
number | 否 | 分页起点,默认 0 |
count |
number | 否 | 本次返回数量,默认 10,最大 100 |
cookie |
string | 否 | 服务端分页游标的 Base64 文本;首批不填写 |
成功时返回:
{
"uid": "u_example",
"time": "1787612400",
"favoriteInfo": {
"userInfos": [],
"total_count": 0,
"last_time": 0,
"today_count": 0
},
"voteInfo": {
"userInfos": [
{
"uin": 1122334455,
"uid": "u_example_friend",
"nick": "示例用户",
"count": 1,
"latestTime": 1787612300,
"isFriend": true
}
],
"total_count": 100,
"new_count": 2,
"new_nearby_count": 0,
"last_visit_time": 1787612400
}
}
voteInfo.userInfos 是分页获赞用户;total_count 是累计获赞数,new_count 是当天获赞数。uid 和 isFriend 会在好友资料可用时补齐;非好友不会通过猜测生成 UID。
QQ 9.2.70 的此响应没有稳定提供 VIP/SVIP 标志,因此兼容字段 isvip、isSvip 当前返回 false。
获取最近会话
get_recent_contact获取框架近期观察到的私聊与群聊会话
获取当前 QQ 最近会话。QQ Android 9.2.70 的最近会话来自客户端本地消息数据库,框架对应返回自己已接收或发送、并写入持久化消息引用的私聊与群聊会话。
调用
await api.get_recent_contact(self_id, count)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 否 | 在线 Bot QQ 号;多账号连接时建议传入 |
count |
number | 否 | 返回会话数量,默认 10,范围 1-100 |
返回值
按最后消息时间从新到旧返回,私聊和群聊分别去重:
[
{
"peerUin": "106500",
"peerName": "测试群",
"msgTime": "1787620800",
"msgId": "123456789",
"lastestMsg": {
"message_type": "group",
"group_id": 106500,
"message": [{ "type": "text", "data": { "text": "测试" }],
"raw_message": "测试"
}
}
]
lastestMsg 保持 NapCat 的字段拼写以兼容现有插件。框架只返回自身七天消息引用缓存中已观察到的会话,不会读取手机 QQ 的私有本地数据库。
设置好友备注
set_friend_remark设置或清除指定好友的备注
设置或清除指定好友的备注。该接口使用 QQ Android 9.2.70 的好友备注协议,并在发送前把 QQ 号解析为真实 QQNT UID。
调用
await api.set_friend_remark(self_id, user_id, remark)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 否 | 在线 Bot QQ 号;多账号连接时建议传入 |
user_id |
number | 是 | 好友 QQ 号 |
remark |
string | 是 | 新备注;传空字符串会清除备注 |
返回值
成功时返回空数据:
null
如果目标不是当前账号的好友,或无法解析其 QQNT UID,接口会直接返回可读错误,不会把数字 QQ 号伪装成 UID 发送。
处理好友申请
set_friend_add_request同意或拒绝好友申请,可在同意时设置备注
处理好友申请。框架会先向 QQ Android 9.2.70 查询当前好友系统消息,再用 flag 匹配真实申请并复用其中的来源字段发送同意或拒绝操作。
调用
await api.set_friend_add_request(
1060221,
event.flag,
true,
'新朋友'
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行操作的 Bot QQ 号 |
flag |
string | 是 | 好友申请事件中的不透明请求标识,必须原样传入 |
approve |
boolean / string | 否 | 是否同意,默认 true;字符串 "false" 表示拒绝 |
remark |
string | 否 | 同意好友申请时设置的好友备注 |
返回
成功时返回空数据;申请已处理、flag 过期或不存在时返回明确错误。
WARNING
不要自行生成或解析 flag。框架会在每次处理前重新查询 QQ 当前申请列表,避免使用已经失效的请求字段。
获取可疑好友申请
get_doubt_friends_add_request获取 QQ 标记为可疑的待处理好友申请
获取 QQ 标记为可疑的待处理好友申请。
调用
const requests = await api.get_doubt_friends_add_request(self_id, count)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
count |
number | 否 | 返回数量,默认 50,最大 100 |
每项包含 flag、uin、nick、source、reason 和 time。后续处理必须原样使用 flag。
处理可疑好友申请
set_doubt_friends_add_request同意指定可疑好友申请
同意一条可疑好友申请。
调用
await api.set_doubt_friends_add_request(self_id, flag, true)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
flag |
string | 是 | 列表接口返回的原始标识 |
approve |
boolean | 否 | 当前仅支持 true |
成功返回 null。
删除好友
delete_friend删除指定好友
删除指定好友。
调用
const result = await api.delete_friend(self_id, target_uin)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
target_uin |
number | 是 | 要删除的好友 QQ 号 |
返回值
{ success: true, target_uin: 112233445 }
获取好友动态
get_qzone_friend_feeds获取好友空间最新动态
获取好友空间首包中的最新动态。
调用
const result = await api.get_qzone_friend_feeds(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
self_id: 123456789,
feeds: [],
total_count: 0,
}
动态常用字段:
| 字段 | 说明 |
|---|---|
app_id |
动态应用标识 |
user_id |
发布者 QQ 号 |
nickname |
发布者昵称 |
create_time |
发布时间 |
feed_id |
动态标识 |
feeds_key |
动态操作键 |
url |
动态地址 |
text |
文本摘要 |
forward |
转发动态信息,可能省略 |
完整 feed 可直接传给点赞与取消点赞 API。
发布空间动态
publish_qzone_feed发布一条文本空间动态
执行前会强制查询当前 QQ 等级;等级低于 16 级时请求会被拒绝。
发布一条文本 QQ 空间动态。
调用
const result = await api.publish_qzone_feed(
self_id,
content,
visibility,
self_delete_after_one_day,
declare_ai_generated,
)
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
self_id |
number | 是 | - | 在线 Bot QQ 号 |
content |
string | 是 | - | 动态文本,不能只包含空白字符 |
visibility |
number | 否 | 1 |
1 所有人可见、2 好友可见、5 仅自己可见 |
self_delete_after_one_day |
boolean | 否 | false |
是否在一天后自动删除 |
declare_ai_generated |
boolean | 否 | false |
是否声明内容由 AI 生成 |
返回值
{
self_id: 123456789,
feed: {},
client_feed_id: 'CLIENT_FEED_ID',
server_time: 1710000000,
}
返回的 feed 可用于 comment_qzone_feed、like_qzone_feed 或 unlike_qzone_feed。
发布空间动态(兼容)
send_qzone_msg发布带图片、可见范围和指定好友范围的空间动态
发布可带图片、可见范围和指定好友范围的空间动态。
调用
const result = await api.send_qzone_msg(
self_id,
'动态正文',
['https://example.com/image.jpg'],
1,
[],
)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
content |
string | 否 | 动态文字,与图片至少填写一项 |
images |
string[] | 否 | 图片 URL 或框架可读取的文件来源 |
ugc_right |
number | 否 | 空间可见范围,默认 1 |
target_uins |
number[] | 否 | 指定可见好友列表 |
成功返回 { tid },可用于后续删除。
删除空间动态
delete_qzone_msg按动态 tid 删除本人空间动态
删除当前账号发布的空间动态。
调用
await api.delete_qzone_msg(self_id, tid)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
tid |
string | 是 | 发布接口返回的动态标识 |
成功返回 null。删除结果以再次查询空间动态为准。
评论好友动态
comment_qzone_feed评论指定动态
评论一条好友 QQ 空间动态,支持纯文字、纯图片及图文同时发送。
调用
const result = await api.comment_qzone_feed(self_id, feed, content, images)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
feed |
object | 是 | get_qzone_friend_feeds 返回的完整动态对象 |
content |
string | 否 | 评论文字;不发送文字时传空字符串 |
images |
array | 否 | 图片列表,可传公网 HTTP(S) URL 字符串,或 { url, width, height } 对象,最多 9 张 |
content 与 images 至少填写一项。动态内部所需的标识由框架根据 feed 自动处理。
返回值
{
self_id: 123456789,
comment_id: 'COMMENT_ID',
content: '评论内容',
images: [
{ url: 'https://example.com/image.jpg', width: 1080, height: 1080 },
],
created_at: 1710000000,
}
示例
const { feeds } = await api.get_qzone_friend_feeds(self_id)
// 纯文字
await api.comment_qzone_feed(self_id, feeds[0], '写得真不错', [])
// 纯图片
await api.comment_qzone_feed(self_id, feeds[0], '', [
'https://example.com/comment.jpg',
])
// 图文同时发送
const result = await api.comment_qzone_feed(self_id, feeds[0], '配图评论', [
{ url: 'https://example.com/comment.jpg', width: 1080, height: 1080 },
])
console.log(result.comment_id, result.images)
框架会下载图片并自动上传到当前账号的 QQ 空间媒体存储,再提交评论。图片地址必须能由框架服务器通过公网访问;不支持内网地址。本地文件需先放到可访问的 HTTP(S) 地址。
点赞好友动态
like_qzone_feed点赞指定动态
执行前会强制查询当前 QQ 等级;等级低于 16 级时请求会被拒绝。
点赞一条好友空间动态。
调用
api.like_qzone_feed(self_id, feed)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
feed |
object | 是 | get_qzone_friend_feeds 返回的完整动态对象 |
返回值
此 API 不等待响应,不返回 Promise。
const { feeds } = await api.get_qzone_friend_feeds(self_id)
api.like_qzone_feed(self_id, feeds[0])
转发动态会根据 feed.forward 自动处理。
取消好友动态点赞
unlike_qzone_feed取消指定动态的点赞
取消对好友空间动态的点赞。
调用
api.unlike_qzone_feed(self_id, feed)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
feed |
object | 是 | get_qzone_friend_feeds 返回的完整动态对象 |
返回值
此 API 不等待响应,不返回 Promise。
const { feeds } = await api.get_qzone_friend_feeds(self_id)
api.unlike_qzone_feed(self_id, feeds[0])
获取 QQ 名片
get_summary_card获取自己或指定用户的 QQ 名片
获取 QQ 名片信息。
调用
查询当前 Bot:
const result = await api.get_summary_card(self_id)
查询指定用户:
const result = await api.get_summary_card(self_id, target_uin)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
target_uin |
number | 否 | 目标 QQ 号,省略时查询自己 |
返回值
返回目标用户的名片结构化数据。
设置 QQ 资料
set_qq_profile设置当前账号昵称、性别和个性签名,并回读最新名片
设置当前 QQ Bot 的昵称、性别和个性签名。昵称与性别使用 QQ Android 9.2.70 的资料编辑协议;个性签名使用内容审核与富签名保存链路,并支持重复提交同一个值。
调用
const result = await api.set_qq_profile(self_id, nickname, personal_note, sex)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 否 | 在线 Bot QQ 号;当前连接只管理一个 Bot 时可省略 |
nickname |
string | 是 | 新 QQ 昵称,不能为空 |
personal_note |
string | 否 | 新个性签名;显式传入空字符串时清空签名 |
sex |
number | string | 否 | 0 未知、1 男、2 女;省略时不修改 |
返回值
{
success: true,
summary_card: {
nickname: '新的昵称',
sign: '新的个性签名'
}
}
框架在写入后重新读取 QQ 名片。QQ 当前把个性签名放在 richSign 中时,框架会自动解析并同步到标准 sign 字段。重复提交相同签名会直接返回成功,不会把 QQ 审核服务的重复内容回执误报为失败。
示例
await api.set_qq_profile(123456789, '萌卡机器人', '今天也要开心', 1)
资料修改会真实同步到 QQ
昵称、性别和个性签名都是账号级资料。调用前应明确提示管理员,并避免在定时任务中反复修改。
设置 QQ 个性签名
set_self_longnick按 QQ Android 9.2.70 的审核与保存链路设置或清空当前账号签名
设置或清空当前 QQ Bot 的个性签名。实现严格复用 QQ Android 9.2.70 的真实链路:先通过 Signature.auth 审核内容,再把服务端返回的 key 和审核后签名内容写入 ProfileService.SetRichSig。清空签名使用客户端独立的 OidbSvc.0x510_0 请求。
调用
const result = await api.set_self_longnick(self_id, longNick)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 否 | 在线 Bot QQ 号;当前连接只管理一个 Bot 时可省略 |
longNick |
string | 是 | 新个性签名;显式传入空字符串时清空签名 |
兼容参数名 long_nick,但新插件建议统一使用 longNick。
返回值
{
success: true,
summary_card: {
sign: '新的个性签名'
}
}
保存成功后框架会读取一次最新 QQ 名片。若 QQ 名片服务短暂延迟,接口仍返回 success: true,并在 readback_warning 中说明读取失败原因;可稍后调用 get_summary_card 再确认。
示例
// 设置签名
await api.set_self_longnick(123456789, '今天也要开心')
// 清空签名
await api.set_self_longnick(123456789, '')
内容会经过 QQ 审核
审核未通过时接口直接返回失败,不会继续发送保存请求。框架不会使用原始文本绕过审核,也不会把审核前的 RichStatus 数据直接写入 QQ。
点赞 QQ 名片
like_summary_card点赞指定用户的 QQ 名片
点赞指定用户的 QQ 名片。
调用
const result = await api.like_summary_card(
self_id,
target_uin,
like_count,
)
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
self_id |
number | 是 | - | 在线 Bot QQ 号 |
target_uin |
number | 是 | - | 目标 QQ 号 |
like_count |
number | 否 | 1 |
点赞次数 |
返回值
{ code: 0, msg: '成功' }
code 和 msg 来自 QQ 名片点赞响应。
获取 skey
get_skey获取当前 Bot 的 skey
获取当前 Bot 会话的 skey。
调用
const result = await api.get_skey(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{ skey: 'SKEY' }
该凭据属于当前 Bot 会话,应仅在插件运行期间使用。
获取 User-Agent
get_user_agent获取当前 Bot 协议和设备指纹对应的 User-Agent
获取当前 Bot 协议和设备指纹对应的 QQ Android WebView User-Agent。
调用
const result = await api.get_user_agent(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | Bot QQ 号,登录验证过程中也可调用 |
返回值
{
user_agent: 'Mozilla/5.0 ...'
}
返回值根据 Bot 当前绑定的协议版本和设备指纹生成。
获取 clientkey
get_clientkey获取十六进制 clientkey
获取当前 Bot 会话的 clientkey。
调用
const result = await api.get_clientkey(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{ clientkey: 'HEX_ENCODED_CLIENTKEY' }
clientkey 使用十六进制编码。
获取 PsKey
get_pskey获取指定域名的 PsKey
获取指定域名的 PsKey。
调用
const result = await api.get_pskey(self_id, domain)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
domain |
string | 是 | 目标域名 |
返回值
{
domain: 'DOMAIN',
pskey: 'PSKEY',
}
获取媒体 RKey
get_rkey获取私聊、群聊等媒体访问 RKey
获取当前账号用于私聊、群聊和媒体资源访问的 RKey。
调用
const keys = await api.get_rkey(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
返回数组;每项包含 type、type_id、rkey、created_at、ttl 和 expired。RKey 属于敏感临时凭证,不应写入日志或长期保存。
获取媒体 RKey(兼容)
nc_get_rkey`get_rkey` 的兼容调用名
获取媒体 RKey 服务信息
get_rkey_server获取私聊、群聊 RKey 与统一过期时间
以服务信息结构返回私聊和群聊媒体 RKey。
调用
const server = await api.get_rkey_server(self_id)
返回值
{
name: 'Mengka NT',
private_rkey: '...',
group_rkey: '...',
expired_time: 1770000000,
}
expired_time 为两类 RKey 中较早的过期时间。
创建群聊
create_group创建普通 QQ 群,并可在创建成功后邀请成员
使用当前在线的安卓协议 Bot 创建普通 QQ 群。底层按 QQ 9.2.70 的创建群链路执行:先创建群聊,再按需邀请成员。
调用
const result = await api.create_group({
self_id: 1060221,
group_name: '萌卡 NT API 验证群',
description: '用于验证安卓协议群聊接口',
user_ids: [106606],
invite_message: 'API 联调邀请',
})
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行创建操作的在线 Bot QQ 号 |
group_name |
string | 是 | 群名称;也兼容 name |
description |
string | 否 | 群简介;也兼容 introduction |
user_id |
number | 否 | 创建成功后邀请的单个 QQ 号 |
user_ids |
number[] | 否 | 创建成功后邀请的 QQ 号列表,一次最多 20 个 |
invite_message |
string | 否 | 邀请附言;也兼容 message、reason |
group_option |
number | 否 | 创建时的入群验证选项;也兼容 verify_type |
group_class_ext |
number | 否 | 群分类扩展值;也兼容 classify |
返回值
没有填写邀请成员时:
{
created: true,
group_id: 987654321,
group_uin: 1234567890,
owner_id: 1060221,
group_size: 1,
group_name: '萌卡 NT API 验证群',
invite_attempted: false,
invite_success: false,
}
填写邀请成员时,返回值会额外包含 invite_user_ids 和 invite。创建群聊和邀请成员是两个独立阶段;如果群已创建但邀请失败,接口仍返回 created: true、新群的 group_id 以及 invite_error,调用方不应自动重试整个创建请求,以免生成重复群聊。
权限与风控
创建群聊、邀请成员是否成功由 QQ 服务端根据账号权限、频率和安全状态决定。接口不会绕过安全验证、邀请确认或账号风控。
设置成员邀请策略
set_group_member_invite_policy控制普通成员能否直接邀请他人入群
设置群聊普通成员的邀请策略。接口会先读取 Android QQ 群详情,只修改对应权限位,提交后再次读取并校验结果,避免覆盖其他群设置。
const result = await api.set_group_member_invite_policy({
self_id: 1060221,
group_id: 123456789,
policy: "require_approval",
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
group_id |
number | 是 | 群号 |
policy |
string | 是 | disabled、require_approval、no_approval 或 no_approval_under_100 |
成功时返回群号、回读后的策略、底层权限位以及 read_back_verified: true。
设置成员权限
set_group_member_permissions单独开启或关闭成员邀请、上传等权限位
单独开启或关闭一个群成员权限。接口使用 Android QQ 9.2.70 群详情与群设置链路,并在提交后回读验证。
const result = await api.set_group_member_permissions({
self_id: 1060221,
group_id: 123456789,
permission: "invite",
allow: true,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
group_id |
number | 是 | 群号 |
permission |
string | 是 | 当前支持 upload_album、temporary_session、create_group |
allow |
boolean | 是 | 是否允许 |
成功时返回修改后的权限位与 read_back_verified: true。
设置新成员历史消息可见性
set_group_new_member_history_visibility控制新成员是否能查看入群前历史消息
设置新加入群聊的成员是否可以查看入群前的历史消息。接口使用 Android QQ 9.2.70 的群设置链路,并在提交后回读校验。
const result = await api.set_group_new_member_history_visibility({
self_id: 1060221,
group_id: 123456789,
visible: true,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
group_id |
number | 是 | 群号 |
visible |
boolean | 是 | 是否允许新成员查看历史消息;也兼容字段名 enable |
成功时返回群号、当前可见状态、底层群标志位以及 read_back_verified: true。
设置群加群选项
set_group_add_option设置入群验证方式、问题与答案
设置群聊的入群验证方式。请求使用 Android 9.2.70 群资料协议写入,并在写入后重新读取群资料确认生效。
await api.set_group_add_option({
self_id: 1060221,
group_id: 123456789,
add_type: 4,
group_question: "请说明来意",
group_answer: "",
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
group_id |
number | 是 | 群号 |
add_type |
number | 否 | QQ 群资料中的入群验证类型,默认 0 |
group_question |
string | 否 | 入群问题 |
group_answer |
string | 否 | 预设答案 |
成功时返回群号、最终验证类型、问题、答案和 read_back_verified: true。只有群主或有相应权限的管理员可以修改。
设置群搜索选项
set_group_search设置群号和条件搜索开关
设置群聊的搜索开关。请求使用 Android 9.2.70 群资料协议写入,并在写入后重新读取确认。
await api.set_group_search({
self_id: 1060221,
group_id: 123456789,
no_finger_open: 1,
no_code_finger_open: 0,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
group_id |
number | 是 | 群号 |
no_finger_open |
number | 二选一 | 按群号搜索开关值 |
no_code_finger_open |
number | 二选一 | 按条件搜索开关值 |
两个搜索字段至少填写一个;未填写的字段保持不变。成功响应包含最终值和 read_back_verified: true。
设置机器人入群选项
set_group_robot_add_option设置机器人账号入群时是否允许及是否需要审核
设置机器人账号加入群聊时的准入方式。接口使用 Android QQ 的 OidbSvcTrpcTcp.0xf00_3 写入,并通过 OidbSvcTrpcTcp.0xef0_1 回读确认服务器已应用设置。
await api.set_group_robot_add_option({
self_id: 1060221,
group_id: 123456789,
robot_member_switch: 0,
robot_member_examine: 2,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的在线 QQ 账号 |
group_id |
number/string | 是 | 群号 |
robot_member_switch |
number | 二选一 | 0 允许机器人申请入群,1 禁止机器人入群 |
robot_member_examine |
number | 二选一 | 0 无需管理员审核,2 需要管理员审核 |
两个选项至少填写一个;未填写的字段不会写入,原设置保持不变。常用组合:
0 / 0:允许机器人直接入群。0 / 2:允许机器人申请,需管理员审核。1 / 2:禁止机器人入群。
成功返回 null,与 NapCat action 契约一致。返回成功前,框架已完成回读校验。只有群主或具备相应权限的管理员可以修改。
获取 @全体成员 剩余次数
get_group_at_all_remain查询当前账号和群聊的实时 @全体成员 权限与限额
查询当前 QQ 在指定群聊中使用 @全体成员 的权限与剩余次数。
const result = await api.get_group_at_all_remain({
self_id: 106606,
group_id: 106500,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行查询的在线 Bot QQ 号 |
group_id |
number | 是 | 目标群号 |
成功时返回:
{
"can_at_all": true,
"remain_at_all_count_for_uin": 20,
"remain_at_all_count_for_group": 20,
"prompt_message_for_uin": "剩余20次",
"prompt_message_for_group": "",
"show_at_all_label": true
}
次数和权限由 QQ 服务端根据账号身份、群设置与当前限额实时计算,框架不会自行推算。
获取群荣誉信息
get_group_honor_info获取龙王、群聊之火、群聊炽焰和快乐源泉榜单
获取指定群聊的群荣誉数据。框架使用当前 QQ Android 9.2.70 的登录态访问 QQ 群荣誉服务,返回实时的龙王、群聊之火、群聊炽焰和快乐源泉榜单。
const honor = await api.get_group_honor_info({
self_id: 106606,
group_id: 106500,
type: 'all',
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 发起查询的在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
type |
string | 否 | all、talkative、performer、legend、emotion 或 strong_newbie,默认 all |
返回字段与 Go-CQHTTP / OneBot 兼容:
{
"group_id": 106500,
"current_talkative": {
"user_id": 106606,
"nickname": "群成员",
"avatar": "https://example.com/avatar.jpg",
"description": "连续活跃信息"
},
"talkative_list": [],
"performer_list": [],
"legend_list": [],
"emotion_list": [],
"strong_newbie_list": []
}
QQ 当前已不再提供“冒尖小春笋”榜单,因此 strong_newbie_list 保留兼容字段并返回空数组。指定单一 type 时,其他榜单字段仍存在但为空数组,方便调用方使用固定结构解析。
获取群精华消息
get_essence_msg_list获取指定群聊的精华消息列表
获取指定群聊的精华消息列表。请求直接使用 QQ Android 9.2.70 APK 中保留的 OidbSvc.0xf10 协议,不依赖 PC QQ 数据库或网页端登录缓存。
const messages = await api.get_essence_msg_list({
self_id: 1060221,
group_id: 123456789,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
group_id |
number | 是 | 群号 |
成功时返回数组,每项包含 msg_seq、msg_random、sender_id、sender_nick、operator_id、operator_nick、message_id、operator_time 和 content。
content 会把安卓协议中的文本、QQ 表情、图片、文件与分享内容转换为标准消息段。Android 9.2.70 的 0xf10 回包本身不携带发送者和操作者的数字 QQ;框架会优先使用最近消息索引补齐发送者 QQ,无法可靠补齐的数字字段返回 0,不会伪造账号。
获取群公告
_get_group_notice使用当前 Android QQ 登录态获取群公告
获取指定群聊中的公告。接口使用当前 QQ Android 9.2.70 登录态取得 skey 与 qun.qq.com 的 p_skey,再调用 QQ 官方群公告接口;不依赖 PC QQ 的本地数据库或 NodeIKernel 服务。
const notices = await api._get_group_notice({
self_id: 1060221,
group_id: 123456789,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
group_id |
number | 是 | 群号 |
成功时返回公告数组,每项包含 sender_id、publish_time、notice_id、message、settings 与 read_num。message.image 和 message.images 内容相同,兼容两种 OneBot 客户端字段写法。
账号必须已登录,且对目标群具有查看公告的权限。登录态失效或 p_skey 无法刷新时会直接返回错误,不会使用浏览器缓存代替。
发布群公告
_send_group_notice发布文字公告,并可附带本地、URL 或 Base64 图片
在指定 QQ 群发布公告。框架使用当前 QQ Android 9.2.70 登录态访问 QQ 官方群公告接口,不依赖 PC QQ 的本地服务。
const result = await api._send_group_notice({
self_id: 123456789,
group_id: 987654321,
content: '公告内容',
image: 'base64://...'
})
参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 当前在线 Bot QQ 号 |
group_id |
number | 是 | 目标群号 |
content |
string | 否 | 公告正文;与 image 不能同时为空 |
image |
string | 否 | 可选图片,支持框架目录内文件、HTTP(S) URL、base64:// 和 file:// |
返回
{
"notice_id": "公告 ID"
}
账号需要拥有发布群公告的权限。图片会先上传到 QQ 群公告图片接口,再将返回的图片 ID 和尺寸随公告正文发布。可用 _get_group_notice 回读,并用 _del_group_notice 删除。
删除群公告
_del_group_notice删除指定群聊中的公告
删除指定群聊中的公告。接口沿用当前 QQ Android 9.2.70 登录态访问 QQ 官方群公告接口,不依赖 PC QQ 能力。
await api._del_group_notice({
self_id: 1060221,
group_id: 123456789,
notice_id: "公告 ID",
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
group_id |
number | 是 | 群号 |
notice_id |
string | 是 | _get_group_notice 返回的 notice_id |
成功时返回空数据。账号必须拥有删除该公告的管理权限;QQ 返回权限或登录态错误时,框架会保留错误码和提示,不会误报成功。
获取群组今日打卡列表
get_group_signed_list获取群聊当天的打卡成员和排名
获取指定群聊当天的打卡成员列表。接口使用当前 QQ Android 9.2.70 登录态和 qun.qq.com 的 p_skey 调用 QQ 官方打卡 TRPC,不依赖 PC QQ 内核。
const members = await api.get_group_signed_list({
self_id: 1060221,
group_id: 123456789,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ 账号 |
group_id |
number | 是 | 群号 |
成功时返回数组,每项包含:
user_id:打卡成员 QQ;nick:群内昵称;time:打卡时间戳;rank:框架按 QQ 返回值换算后的实际排名。
账号必须已登录并能访问该群;登录态失效或没有查看权限时会返回 QQ 原始错误。
获取群相册列表
get_qun_album_list分页获取群相册及封面信息
分页获取群相册列表。接口直接调用 QQ Android 的 QunAlbum.trpc 服务,不依赖 PC QQ。
const result = await api.get_qun_album_list({ self_id: 1060221, group_id: 123456789, attach_info: '' })
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ |
group_id |
number | 是 | 群号 |
attach_info |
string | 否 | 上一页返回的游标,第一页留空 |
返回 album_list、attach_info 和 has_more。相册项包含 ID、名称、说明、上传数量、时间、创建者和封面信息。
获取群相册媒体列表
get_group_album_media_list分页获取相册内的图片和视频
分页获取指定群相册中的图片和视频。
const result = await api.get_group_album_media_list({ self_id: 1060221, group_id: 123456789, album_id: 'album-id', attach_info: '' })
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ |
group_id |
number | 是 | 群号 |
album_id |
string | 是 | 相册 ID |
attach_info |
string | 否 | 上一页的 next_attach_info |
返回 media_list 和前后页游标。媒体项保留 lloc、batch_id、上传者、上传时间及图片/视频地址,供评论、点赞和删除接口使用。
上传图片到群相册
upload_image_to_qun_album使用当前 Android QQ 登录态分片上传图片
向已有群相册上传图片。框架使用当前 Android QQ 的 Qzone 登录态创建会话并分片上传。
await api.upload_image_to_qun_album({ self_id: 1060221, group_id: 123456789, album_id: 'album-id', album_name: '相册名称', file: 'https://example.com/a.jpg' })
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的 QQ |
group_id |
number | 是 | 群号 |
album_id |
string | 是 | 相册 ID |
album_name |
string | 是 | 相册名称 |
file |
string | 是 | HTTP(S)、file://、本地路径或 base64:// 图片 |
单文件上限 100 MiB。成功返回 photo_id 和图片地址。
评论群相册媒体
do_group_album_comment评论指定相册图片或视频
评论群相册中的指定媒体。
await api.do_group_album_comment({ self_id: 1060221, group_id: 123456789, album_id: 'album-id', lloc: 'media-lloc', content: '评论内容' })
self_id、group_id、album_id、lloc、content 均必填。lloc 从 get_group_album_media_list 的图片或视频封面信息中取得。
点赞群相册媒体
set_group_album_media_like点赞一批或指定相册媒体
点赞群相册的一批上传内容或其中一项媒体。
await api.set_group_album_media_like({ self_id: 1060221, group_id: 123456789, album_id: 'album-id', batch_id: '1234567890', lloc: 'media-lloc' })
self_id、group_id、album_id、batch_id 必填;lloc 可选。两者都可从媒体列表响应取得。
取消群相册媒体点赞
cancel_group_album_media_like取消一批或指定相册媒体的点赞
取消群相册媒体点赞。参数与 set_group_album_media_like 相同。
await api.cancel_group_album_media_like({ self_id: 1060221, group_id: 123456789, album_id: 'album-id', batch_id: '1234567890', lloc: 'media-lloc' })
lloc 为空时取消整批点赞;填写时取消指定媒体的点赞。
删除群相册媒体
del_group_album_media删除相册图片或视频
删除群相册中的图片或视频。
await api.del_group_album_media({ self_id: 1060221, group_id: 123456789, album_id: 'album-id', lloc: 'media-lloc' })
self_id、group_id、album_id、lloc 均必填。删除视频时可以填写视频 ID 或封面 lloc;框架会先读取媒体列表,补齐 QQ 删除协议需要的封面标识和批次 ID。
获取群文件根目录
get_group_root_files获取根目录文件与文件夹,并自动处理分页
使用当前在线 QQ 的 Android 9.2.70 登录态获取群文件根目录。接口会自动处理 QQ 服务端分页,并分别返回文件与文件夹。
const result = await api.get_group_root_files({
self_id: 1060221,
group_id: 106500,
file_count: 50,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
file_count |
number | 否 | 单页请求数量,默认 50,范围 1-100 |
返回值包含 files 和 folders。文件字段包括 file_id、file_name、busid、file_size、upload_time、dead_time、modify_time、download_times、uploader、uploader_name 与 parent_folder_id;文件夹字段包括 folder_id、parent_folder_id、folder_name、creator、creator_name 和 total_file_count。
该接口是只读操作,账号必须已加入目标群并具有查看群文件的权限。
获取群文件夹内容
get_group_files_by_folder获取指定文件夹中的文件与子文件夹
获取指定群文件夹中的文件与子文件夹。底层使用 QQ Android 9.2.70 群文件协议,不依赖 PC QQ 本地数据库。
const result = await api.get_group_files_by_folder({
self_id: 1060221,
group_id: 106500,
folder_id: '/3d7e7839-1512-4e77-bb69-aa66124c603b',
file_count: 50,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
folder_id |
string | 是 | 文件夹 ID;也兼容 folder |
file_count |
number | 否 | 单页请求数量,默认 50,范围 1-100 |
返回结构与 get_group_root_files 相同。接口会自动读取后续分页,不需要调用方维护分页游标。
获取群文件系统信息
get_group_file_system_info获取文件数量限制和存储空间使用情况
获取群文件数量限制和存储空间使用情况。
const info = await api.get_group_file_system_info({
self_id: 1060221,
group_id: 106500,
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
成功时返回:
{
file_count: 33,
limit_count: 1500,
used_space: 207497295,
total_space: 10737418240,
}
空间字段单位为字节,数值来自 QQ 群文件服务端。
创建群文件夹
create_group_file_folder由群主或管理员在根目录创建文件夹
在群文件根目录创建文件夹。
await api.create_group_file_folder({
self_id: 1060221,
group_id: 106500,
folder_name: 'API 测试资料',
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
folder_name |
string | 是 | 文件夹名称;也兼容 name,UTF-8 不超过 90 字节 |
成功时返回 ret_code: 0 以及本次提交的群号和文件夹名称。
群权限
QQ 服务端只允许群主或管理员创建群文件夹。普通成员调用会返回真实权限错误,框架不会使用其他在线 QQ 代替执行。
删除群文件夹
delete_group_folder按真实文件夹 ID 删除群文件夹
删除指定群文件夹。
await api.delete_group_folder({
self_id: 1060221,
group_id: 106500,
folder_id: '/3d7e7839-1512-4e77-bb69-aa66124c603b',
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
folder_id |
string | 是 | 文件夹 ID;也兼容 folder,不能传根目录 / |
成功时返回 ret_code: 0。
删除操作
QQ 服务端只允许群主或管理员删除文件夹。调用前应先通过目录查询确认 folder_id,不要使用名称猜测 ID;文件夹非空时是否允许删除由 QQ 服务端决定。
上传群文件
upload_group_file通过 QQ Android 9.2.70 文件通道真实上传群文件
将本地文件或可下载的 HTTP(S) 文件真实上传到群文件。上传完成后,文件会直接出现在 QQ 群文件列表中。
const result = await api.upload_group_file({
self_id: 1060221,
group_id: 106500,
file: 'D:/Mengka-NT/files/report.txt',
name: 'report.txt',
folder: '/',
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
file |
string | 是 | 本地文件路径、file:// 地址或 HTTP(S) 下载地址;也兼容 file_path |
name |
string | 是 | 上传后显示的文件名;也兼容 file_name |
folder |
string | 否 | 目标文件夹 ID,默认 /;也兼容 folder_id、parent_folder_id |
upload_file |
boolean | 否 | 是否执行真实上传,默认 true;传 false 会直接返回错误 |
成功时返回 file_id、file_name、busid、file_size 和 parent_folder_id。这些字段可直接用于后续查询或删除。
账号与群权限
框架始终使用 self_id 指定的 QQ 执行上传,不会切换到其他在线账号。群文件容量、群身份和 QQ 服务端风控仍以该账号的实际结果为准。
删除群文件
delete_group_file删除群文件,缺省业务参数由框架自动查询补齐
删除指定群文件。
await api.delete_group_file({
self_id: 1060221,
group_id: 106500,
file_id: '/e2ca26cc-d974-4968-9b71-eec65c9e8590',
})
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 执行请求的在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
file_id |
string | 是 | 群文件 ID;也兼容 id |
busid |
number | 否 | 文件业务 ID;也兼容 bus_id,未填写时框架会自动查询 |
parent_folder_id |
string | 否 | 文件所在文件夹 ID;也兼容 folder_id、folder,未填写时框架会自动查询 |
成功时返回 ret_code: 0。仅提供 file_id 即可使用;框架会递归查询文件列表并补齐删除所需的业务 ID 和父文件夹。
删除权限
该操作会真实删除群文件。框架始终使用 self_id 指定的 QQ 执行,权限不足或文件不存在时会返回 QQ 服务端的真实错误。
重命名群文件
rename_group_file按文件 ID 重命名群文件
重命名指定群文件。
调用
await api.rename_group_file(self_id, group_id, file_id, '新文件名.zip')
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
file_id |
string | 是 | 群文件真实 ID |
new_name |
string | 是 | 新文件名 |
busid |
number | 否 | 文件业务 ID,省略时框架自动查询 |
current_parent_directory |
string | 否 | 当前目录 ID,省略时框架自动查询 |
成功返回 { ok: true }。
移动群文件
move_group_file在群文件目录之间移动文件
将指定群文件移动到另一目录。
调用
await api.move_group_file(self_id, group_id, file_id, target_parent_directory)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群号 |
file_id |
string | 是 | 群文件真实 ID |
target_parent_directory |
string | 是 | 目标目录 ID,根目录使用 / |
busid |
number | 否 | 文件业务 ID,省略时框架自动查询 |
current_parent_directory |
string | 否 | 当前目录 ID,省略时框架自动查询 |
成功返回 { ok: true }。
获取群聊列表
get_group_list获取完整群聊列表
获取 Bot 的完整群聊列表。萌卡NT会自动完成分页。
调用
const result = await api.get_group_list(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
groups: [],
total_count: 0,
self_uin: 123456789,
}
获取群聊成员列表
get_group_member_list获取指定群聊的成员
获取指定群的完整成员列表。
调用
const result = await api.get_group_member_list(self_id, group_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
返回值
{
group_id: 987654321,
members: [],
total_count: 0,
}
成员常用字段包括 uin、nickname、card、level、title、join_time 和 last_speak_time。
获取群聊系统通知
get_group_system_notifications获取群聊申请与通知
获取 Bot 的群聊系统通知列表。
调用
const result = await api.get_group_system_notifications(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
notifications: [],
total_count: 0,
}
通知中的 request_id、request_type 与 request_extra 可用于处理入群申请。
同意加入群聊申请
approve_group_apply同意指定申请
同意入群申请。
调用
const result = await api.approve_group_apply(
self_id,
group_id,
request_id,
request_type,
request_extra,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
request_id |
number | 是 | 请求 ID |
request_type |
number | 是 | 请求类型 |
request_extra |
number | 否 | 附加请求标识 |
请求字段来自 group_notice/apply 事件或 get_group_system_notifications。
返回值
返回申请处理结果。
拒绝加入群聊申请
reject_group_apply拒绝指定申请
拒绝入群申请。
调用
const result = await api.reject_group_apply(
self_id,
group_id,
request_id,
request_type,
reason,
request_extra,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
request_id |
number | 是 | 请求 ID |
request_type |
number | 是 | 请求类型 |
reason |
string | 否 | 拒绝理由 |
request_extra |
number | 否 | 附加请求标识 |
返回值
返回申请处理结果。
同意群聊邀请
approve_group_invite同意好友发来的群聊邀请
同意好友发来的群聊邀请。
调用
const result = await api.approve_group_invite(self_id, group_id, msgseq)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 邀请加入的群聊 ID |
msgseq |
number | 是 | 邀请通知的请求序号 |
group_id 和 msgseq 从 get_group_system_notifications 返回的同一条邀请通知中取得。
框架会按 QQ Android 9.2.70 返回的实际通知类型处理,不再把邀请类型写死。
返回值
返回邀请处理结果。请求已处理或已失效时会返回错误,不会伪造成功结果。
测试环境已完成真实链路验证:框架向 1060221 发出群 106500 的邀请,用户在 QQ 客户端确认后,框架通过群成员查询确认该账号已入群。
设置群聊管理员
set_group_admin设置或取消管理员
设置或取消群聊管理员。
调用
const result = await api.set_group_admin(
self_id,
group_id,
target_uin,
set_admin,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
target_uin |
number | 是 | 目标成员 QQ 号 |
set_admin |
boolean | 是 | true 设置,false 取消 |
返回值
{
group_id: 987654321,
target_uin: 112233445,
set_admin: true,
}
修改群成员名片
set_group_card修改或清空指定成员在群内显示的昵称
修改指定群成员的群名片(群昵称),也可以传空字符串清空群名片。
修改其他成员时,当前 Bot 需要是群主或管理员;普通成员只能修改自己的群名片。最终权限由 QQ 群设置和服务器校验决定。
调用
const result = await api.set_group_card(
self_id,
group_id,
user_id,
card,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
user_id |
number | 是 | 目标成员 QQ 号 |
card |
string | 是 | 新群名片;传空字符串时清空群名片 |
返回值
{
success: true,
group_id: 106500,
user_id: 1060221,
card: '萌卡测试昵称',
}
清空群名片时,返回值中的 card 为 ''。
示例
await api.set_group_card(2082083, 106500, 1060221, '新群昵称')
// 清空群名片
await api.set_group_card(2082083, 106500, 1060221, '')
群聊打卡
group_sign在指定群聊打卡
执行群聊打卡。
调用
const result = await api.group_sign(self_id, group_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
返回值
返回打卡文案、累计天数、群排名、详情地址与结构化响应字段。
设置群聊成员禁言
set_group_mute设置或取消成员禁言
设置或取消群聊成员禁言。
调用
const result = await api.set_group_mute(
self_id,
group_id,
target_uin,
duration_sec,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
target_uin |
number | 是 | 目标成员 QQ 号 |
duration_sec |
number | 是 | 禁言秒数,0 取消禁言 |
返回值
{
group_id: 987654321,
target_uin: 112233445,
duration_sec: 600,
}
设置群聊全员禁言
set_group_mute_all开启或取消全员禁言
开启或取消全员禁言。
调用
const result = await api.set_group_mute_all(self_id, group_id, mute)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
mute |
boolean | 是 | true 开启,false 取消 |
返回值
{ group_id: 987654321, mute: true }
设置群聊专属头衔
set_group_special_title设置或清除成员专属头衔
设置或清除群聊成员的专属头衔。目标成员昵称由服务端通过 QQ 名片接口自动获取。
调用
const result = await api.set_group_special_title(
self_id,
group_id,
user_id,
title,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
user_id |
number | 是 | 目标成员 QQ 号 |
title |
string | 是 | 专属头衔,传空字符串清除头衔 |
返回值
{
success: true,
}
移出群聊成员
kick_group_member将指定成员移出群聊
将指定成员移出群聊,可同时拒绝该成员后续的加群申请。
调用
const result = await api.kick_group_member(
self_id,
group_id,
user_id,
reject_add_request,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
user_id |
number | 是 | 被移出成员的 QQ 号 |
reject_add_request |
boolean | 是 | true 表示同时拒绝该成员后续的加群申请 |
返回值
{
success: true,
}
批量移出群聊成员
set_group_kick_members按顺序将多名成员移出群聊
批量将指定成员移出群聊。该接口兼容 NapCat 同名 action,在 Android 9.2.70 协议下按成员顺序调用已经验证的单人移出群聊链路。
调用
const result = await api.set_group_kick_members(
self_id,
group_id,
user_ids,
reject_add_request,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
user_id |
number[] | 是 | 被移出成员的 QQ 号数组,兼容别名 user_ids,单次最多 20 个 |
reject_add_request |
boolean | 否 | 是否同时拒绝这些成员后续的加群申请,默认 false |
数组中的重复 QQ 会自动去重;不允许移出当前 Bot。执行过程中任一成员失败时,接口会停止并在错误信息中返回已完成数量和失败 QQ,避免调用方误判为全部成功。
返回值
全部成员处理成功时返回空对象:
{}
撤回群聊消息
recall_group_msg撤回指定群聊消息
撤回群聊消息。
调用
const result = await api.recall_group_msg(
self_id,
group_id,
msg_seq,
msg_random,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
group_id |
number | 是 | 群聊 ID |
msg_seq |
number | 是 | 消息序列号 |
msg_random |
number | 是 | 消息随机数 |
消息标识可来自 send_group_msg 返回值、群聊消息事件或撤回事件。
返回值
{ success: true }
获取 Bot 列表
get_bot_list获取当前节点的 Bot 列表
获取当前插件服务绑定节点下的 Bot 列表。
调用
const bots = await api.get_bot_list()
参数
无。
返回值
返回账号数组。常用字段:
| 字段 | 说明 |
|---|---|
self_id |
Bot QQ 号 |
protocol_id |
当前协议 ID |
device_profile_id |
当前设备指纹 ID |
nickname |
Bot 昵称 |
status |
0 离线、1 在线、2 登录中 |
is_qq_vip |
是否已开通 QQ 会员 |
received, sent |
运行期收发消息计数 |
只返回当前节点的账号。
获取 Bot 信息
get_bot_info获取指定 Bot 的运行信息
获取当前插件服务绑定节点下指定 Bot 的运行信息。账号可以处于离线、登录中或在线状态。
调用
const bot = await api.get_bot_info(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 当前节点下的 Bot QQ 号 |
返回值
{
self_id: 123456789,
protocol_id: 0,
device_profile_id: 1,
nickname: '示例账号',
status: 1,
login_time: 1710000000,
online_time: 3600,
last_active: 1710003600,
level: 42,
is_qq_vip: true,
friend_count: 100,
group_count: 20,
received: 1234,
sent: 567,
extra_info: '',
}
status:0 离线、1 在线、2 登录中。
is_qq_vip:是否已开通 QQ 会员,true 为已开通,false 为未开通。
获取协议列表
get_protocol_list获取可选协议
获取可用于创建或更新账号的协议列表。
调用
const protocols = await api.get_protocol_list()
参数
无。
返回值
返回完整协议数组。选择项目的数组下标即为 protocol_id。
const protocol_id = protocols.findIndex(item => item.type === 'TARGET_TYPE')
获取设备指纹列表
get_device_profile_list获取可选设备指纹
获取可用于创建或更新账号的设备指纹列表。
调用
const profiles = await api.get_device_profile_list()
参数
无。
返回值
返回完整设备指纹数组。调用账号 API 时使用所选记录的 id 作为 device_profile_id。
随机生成设备指纹
generate_device_profile按框架前端规则生成并保存独立指纹
随机生成并保存一套设备指纹。生成字段与框架前端“指纹 → 添加指纹 → 一键生成其余内容”使用同一套规则,模板名称由框架自动随机命名。
调用
const profile = await api.generate_device_profile()
参数
无。
返回值
返回已经保存的完整设备指纹,其中 id 可直接作为 add_account 的 device_profile_id。
{
"id": 12,
"name": "Pixel 7 Pro-A1B2C3",
"androidId": "0123456789abcdef",
"brand": "Google",
"phoneModel": "Pixel 7 Pro",
"oaid": "0123456789abcdef0123456789abcdef",
"androidVersion": "13",
"sdkVersion": 33,
"guid": "由框架生成",
"qimei": "由框架生成"
}
每次调用都会创建一条新的独立指纹记录,不会覆盖已有指纹。
添加账号
add_account向当前节点添加账号
向当前插件节点添加 Bot 账号。
调用
const self_id = 123456789 // 要添加的 Bot QQ 号
const result = await api.add_account(
self_id,
password,
protocol_id,
device_profile_id,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 5 到 10 位 QQ 号 |
password |
string | 是 | 账号密码 |
protocol_id |
number | 是 | 协议数组下标 |
device_profile_id |
number | 是 | 设备指纹记录 ID |
返回值
成功:
{ code: 0, msg: '账号添加成功' }
失败:
{ code: 1, msg: '错误信息' }
编辑账号
update_account编辑离线账号配置
更新当前插件节点内的 Bot 账号配置。
调用
const self_id = 123456789 // 要更新的 Bot QQ 号
const result = await api.update_account(
self_id,
password,
protocol_id,
device_profile_id,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | QQ 号 |
password |
string | 是 | 新密码 |
protocol_id |
number | 是 | 新协议 ID |
device_profile_id |
number | 是 | 新设备指纹 ID |
账号必须处于离线状态。
返回值
{ code: 0, msg: '账号编辑成功' }
失败时返回 { code: 1, msg: '错误信息' }。
离线账号
offline_account取消正在进行的登录,或下线已登录账号
取消账号正在进行的登录,或下线已登录账号。只能操作当前插件所属节点下的账号。
作用
| 账号状态 | 执行结果 |
|---|---|
| 登录中 | 取消当前登录流程,停止相关任务并断开连接 |
| 已登录 | 下线账号并断开连接 |
| 已离线 | 调用失败并返回“账号当前已离线” |
调用
const self_id = 123456789 // 要操作的 Bot QQ 号
const result = await api.offline_account(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 当前节点下的账号 QQ 号 |
返回值
{ code: 0, msg: '账号已离线' }
失败时返回 { code: 1, msg: '错误信息' }。
删除账号
delete_account删除当前节点下的离线账号
删除当前插件所属节点下的离线账号。
调用
const self_id = 123456789 // 要删除的 Bot QQ 号
const result = await api.delete_account(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 当前节点下的账号 QQ 号 |
账号必须处于离线状态。
返回值
{ code: 0, msg: '账号删除成功' }
失败时返回 { code: 1, msg: '错误信息' }。
密码登录
login_account发起密码登录
对当前节点下的离线账号发起密码登录。
调用
const self_id = 123456789 // 要登录的 Bot QQ 号
const result = await api.login_account(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 已创建且离线的 Bot QQ 号 |
返回值
{ code: Number, message: String }
验证状态可能额外包含 slider_url、identity_url、security_url 或 security_verify。
常见状态:
code |
含义 |
|---|---|
0 |
登录成功 |
140022008 |
需要滑块验证 |
140022007 |
需要身份验证 |
140022010 |
需要安全验证,查询安全验证方式 |
140022013 |
账号或密码错误 |
完整处理顺序见Bot 登录流程。
检查登录缓存
check_cache检查本地登录缓存
检查账号的本地登录缓存是否完整有效。
调用
const self_id = 123456789 // 要检查的 Bot QQ 号
const result = await api.check_cache(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 当前节点下的 Bot QQ 号 |
返回值
{ valid: true }
仅在 valid === true 时调用 cache_login。
缓存登录
cache_login使用本地缓存登录
使用本地缓存登录当前节点下的账号。
调用
const self_id = 123456789 // 要登录的 Bot QQ 号
const result = await api.cache_login(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 已创建且离线的 Bot QQ 号 |
返回值
成功:
{ code: 0, message: '登录成功' }
失败:
{
code: 1,
message: '错误信息',
cache_invalid: true,
}
cache_invalid 为 true 时改用 login_account。
提交滑块验证
submit_slider提交滑块结果
提交滑块验证结果。
调用
const self_id = 123456789 // 正在登录的 Bot QQ 号
const result = await api.submit_slider(self_id, ticket, randstr)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 正在登录的 Bot QQ 号 |
ticket |
string | 是 | 滑块完成后返回的 ticket |
randstr |
string | 是 | 滑块完成后返回的 randstr |
返回值
返回结构与 login_account 一致。若返回另一种验证状态,继续按新的 code 处理。
注册滑块验证反代
register_captcha_proxy注册滑块反代并返回改写后的验证脚本
注册滑块验证反向代理:由后端抓取并改写 TCaptcha.js,把脚本中的验证域名指向插件自身的反代地址。
调用
const result = await api.register_captcha_proxy(
self_id,
url,
proxy_base,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 正在等待滑块验证的 Bot QQ 号 |
url |
string | 否 | 滑块验证 URL;缺省时使用后端当前登录流程中的滑块地址 |
proxy_base |
string | 否 | 滑块脚本中验证域名的反代地址前缀;缺省时使用默认反代前缀 |
返回值
{
uin: 123456789,
script: '改写后的 TCaptcha.js 内容',
}
script 为改写后的验证脚本,其验证域名已指向 proxy_base 对应的反代入口,前端可直接加载使用。
示例
const { uin, script } = await api.register_captcha_proxy(
123456789,
'https://ssl.qq.com/xxxx/slider?uin=123456789&sid=xxx',
'https://plugin-host.example.com/captcha',
)
需要账号处于登录中并已触发滑块验证;否则会返回错误。
滑块验证反代请求
captcha_proxy反代转发滑块请求到腾讯验证服务
反向代理滑块页面发往腾讯验证服务的请求,由后端转发到 t.captcha.qq.com,并自动使用节点代理与登录会话 cookie。
调用
const result = await api.captcha_proxy(
self_id,
url,
method,
headers,
body,
)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
url |
string | 是 | 目标请求地址(t.captcha.qq.com 下的路径) |
method |
string | 否 | HTTP 方法,默认 GET |
headers |
object | 否 | 需要透传的请求头,键值均为字符串 |
body |
string | 否 | 请求体,默认空 |
返回值
{
status: 200,
headers: { 'content-type': 'application/json' },
result: 'BASE64_ENCODED_BODY',
}
result 为响应体的 base64 编码;headers 仅包含响应头的首个取值。
示例
const resp = await api.captcha_proxy(
123456789,
'https://t.captcha.qq.com/cap_union_new_verify',
'GET',
{ Referer: 'https://example.com/' },
)
const body = Buffer.from(resp.result, 'base64').toString('utf-8')
查询安全验证方式
get_security_verify_methods查询安全验证原因与可用方式
查询正在登录的 Bot 当前安全验证原因和可用验证方式。
调用
const self_id = 123456789 // 正在登录的 Bot QQ 号
const result = await api.get_security_verify_methods(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 正在等待安全验证的 Bot QQ 号 |
返回值
{
reason: {
prompt: '当前账号需要安全验证',
},
methods: {
prompt: '请选择验证方式',
verify_list: [4, 10],
sms_phone: {
sign: 'SMS_SIGN',
},
},
}
reason是QueryVerifyReason的原始结构化响应。methods是QueryVerifyList的原始结构化响应,包含当前可用的短信、扫码或其他验证方式。
常见状态:
methods.verify_list 包含值 |
含义 | 后续操作 |
|---|---|---|
4 |
支持接收短信(服务端下发验证码) | 用 methods.sms_phone.sign 调用 get_sms,verify_type 传 4 |
3 |
支持发送短信(用户用密保手机发送) | 用 methods.sms_phone.sign 调用 get_sms,verify_type 传 3 |
10 |
支持扫码验证 | 调用 create_login_qr 创建二维码,再调用 query_login_qr_status 查询状态 |
| 包含多个值 | 同时支持多种验证方式 | 选择任意一种可用方式 |
不包含 3、4、10 |
需要其他验证方式 | 使用 login_account 返回的 security_url 完成验证 |
3 和 4 共用 methods.sms_phone.sign,区别只在调用 get_sms / check_sms 时传的 verify_type。可用类型以 verify_list 为准,不要写死。
reason.prompt 或 methods.prompt 是当前验证原因或提示文案。QQ 返回的其他字段会按原始结构保留。
返回结构与 login_account 的 security_verify 字段一致。
完整流程见Bot 登录流程。
创建登录二维码
create_login_qr创建安全验证登录二维码
为正在等待安全验证的 Bot 创建登录二维码。
调用
const self_id = 123456789 // 正在登录的 Bot QQ 号
const result = await api.create_login_qr(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 正在等待安全验证的 Bot QQ 号 |
返回值
{
code: 0,
message: '二维码生成成功',
qr_url: 'https://accounts.qq.com/safe/scanresult?...',
guarantee_token: 'GUARANTEE_TOKEN',
expires_in: 180,
}
将 qr_url 渲染成二维码,并保留 guarantee_token 用于查询状态。二维码有效期单位为秒。
完整流程见Bot 登录流程。
查询登录二维码状态
query_login_qr_status查询扫码状态并在确认后继续登录
查询 Bot 登录二维码的扫码状态。扫码确认后,服务端会自动继续 NTLogin。
调用
const self_id = 123456789
const result = await api.query_login_qr_status(self_id, guarantee_token)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 正在等待安全验证的 Bot QQ 号 |
guarantee_token |
string | 是 | create_login_qr 返回的轮询 token |
返回值
未扫码:
{ code: 0, message: '等待扫码', status: 'waiting', status_code: 0 }
已扫码、等待手机确认:
{ code: 0, message: '扫码成功,等待确认', status: 'scanned', status_code: 3 }
已失效:
{ code: 0, message: '二维码已失效', status: 'expired', status_code: 2 }
已确认时,status 为 confirmed,并返回与 login_account 相同的登录结果:
{ code: 0, message: '登录成功', status: 'confirmed', status_code: 1 }
收到 confirmed 或 expired 后应停止轮询。
获取短信验证码
get_sms下发安全验证短信
请求短信安全验证。
短信验证有两种类型,由 verify_type 指定,两者共用 get_sms / check_sms:
verify_type |
名称 | 说明 |
|---|---|---|
4 |
接收短信 | 服务端向密保手机下发验证码,用户把收到的验证码交回 |
3 |
发送短信 | 用户用密保手机把指定内容发送到指定号码,服务端回查是否收到 |
可用类型由 get_security_verify_methods 的 methods.verify_list 决定,不要写死。
调用
const self_id = 123456789 // 正在登录的 Bot QQ 号
// 接收短信
const result = await api.get_sms(self_id, 4, sign)
// 发送短信
const result = await api.get_sms(self_id, 3, sign)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 正在登录的 Bot QQ 号 |
verify_type |
number | 是 | 短信验证类型,4 接收短信,3 发送短信 |
sign |
string | 是 | security_verify.methods.sms_phone.sign |
verify_type 必填,且只接受 3 或 4,缺失或取值不合法会直接报错。
返回值
返回 GetSMS 的服务端原始响应,不作包装。
verify_type 为 4:
{
result: { state: 1, code: 1 },
sign: 'NEW_SMS_SIGN',
masked_phone: '166******00',
country_code: '86',
}
verify_type 为 3:
{
result: { state: 1, code: 1 },
sign: 'NEW_SMS_SIGN',
sms: '验证QQ',
send_to: '10690700511',
masked_phone: '166******00',
country_code: '86',
}
| 字段 | 说明 |
|---|---|
result.state |
1 为成功,其他值为失败,失败时 result.prompt 是原因 |
sign |
新的 sign,提交时必须用这个,不能沿用请求时传入的那个 |
sms |
仅 verify_type 为 3:需要用户发送的短信内容 |
send_to |
仅 verify_type 为 3:短信的接收号码 |
masked_phone |
打码后的密保手机号,用于提示用户 |
verify_type 为 3 时,需要引导用户用 masked_phone 对应的密保手机把 sms 的内容原样发送到 send_to,发送后再调用 check_sms 回查。
QQ 返回的其他字段会按原始结构保留。
完整流程见Bot 登录流程。
提交短信验证码
check_sms提交短信验证码并继续登录
提交短信安全验证,并继续登录。
verify_type 需要与 get_sms 时一致:
verify_type |
名称 | 提交内容 |
|---|---|---|
4 |
接收短信 | 提交用户收到的验证码 code |
3 |
发送短信 | 不提交 code,回查服务端是否已收到用户发出的短信 |
调用
const self_id = 123456789 // 正在登录的 Bot QQ 号
// 接收短信:提交用户收到的验证码
const result = await api.check_sms(self_id, 4, sms.sign, code)
// 发送短信:用户发完短信后回查,不需要 code
const result = await api.check_sms(self_id, 3, sms.sign)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 正在登录的 Bot QQ 号 |
verify_type |
number | 是 | 短信验证类型,4 接收短信,3 发送短信 |
sign |
string | 是 | get_sms 新返回的 sign |
code |
string | 视类型 | verify_type 为 4 时必填;为 3 时不需要传 |
verify_type 必填,且只接受 3 或 4,缺失或取值不合法会直接报错。
返回值
校验通过:服务端会自动继续 NTLogin Type 2,返回结构与 login_account 一致。
校验未通过:返回 CheckSMS 的服务端原始响应,不作包装。登录会话保留,可以用同一个 sign 重试。
{
result: {
state: 2,
code: 3,
prompt: '未收到短信,原因可能是:未使用密保手机发送;短信内容不正确;运营商不稳定。',
},
}
判断方式:出现 result.state 字段即为未通过,result.prompt 是可直接展示给用户的原因。
verify_type 为 3 时需要留出发送时间
用户发出短信后,服务端可能要几秒才能收到。此时 result.state 为 2、result.code 为 3,含义是「尚未收到」而非「验证失败」,属于可重试状态,应提示用户确认已用密保手机发送后再调用一次。
完整流程见Bot 登录流程。
获取等级加速任务
get_level_tasks获取 QQ 等级加速面板
刷新并获取当前 Bot 的 QQ 等级加速面板。
调用
const result = await api.get_level_tasks(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
uin: '123456789',
overall_info: {
total_days: 12.5,
vip_speed: 2,
base_days: 10,
extra_days: 2,
},
vip_info: { vip_list: [] },
base_info: { base_task_list: [] },
extra_info: { extra_task_list: [] },
is_freeze: false,
}
任务对象包含 title、sub_title、is_done、speed_days、jump_url 等字段。执行任务时使用任务的完整 title。
执行等级加速任务
execute_level_tasks执行指定的等级加速任务
按数组顺序执行指定的 QQ 等级加速任务。
调用
await api.execute_level_tasks(self_id, tasks)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
tasks |
string[] | 是 | 非空任务标题数组 |
框架会在执行前强制查询当前 QQ 等级,等级必须达到 16 级。低于 16 级时请求会被拒绝,任务不会执行;该限制同样应用于能够直接完成对应等级任务的原始 API,不能通过绕开本接口规避。
当前支持的任务标题:
去日签卡打一次卡每日登录QQ经典农场去免费小说看任一本书体验任一款小游戏15s看10秒漫剧发布一条空间说说点赞一条好友动态加一位好友去QQ会员福利社领福利券
建议从 get_level_tasks 返回的任务中选择标题。任务在本次调用内按数组顺序执行;任一任务报错时 Promise 会拒绝并包含任务标题。
返回值
全部执行成功时 Promise 解析为 null。
获取宠物资料
get_pet_profile获取本人宠物资料
获取本人宠物资料。
调用
const result = await api.get_pet_profile(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
pet_id: 'PET_ID',
pet_name: '小卡',
user_id: '123456789',
avatar_url: 'https://example.com/avatar.png',
personality: '小太阳',
species: '蒜头鹅',
job_name: '小乞丐',
traits: ['粘人程度'],
}
获取宠物数值
get_pet_vitals获取心情、饱腹、清洁和金币
获取宠物当前数值。
调用
const result = await api.get_pet_vitals(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
mood: 100,
hunger: 100,
cleanliness: 100,
total: 100,
gold: 315,
}
获取食物目录
get_pet_food_catalog获取食物目录与库存
获取宠物食物目录与库存。
调用
const result = await api.get_pet_food_catalog(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
biscuit_count: 10,
feed_count: 10,
message: '',
foods: [
{ name: '饼干', food_id: '1', balance: 10 },
],
}
food_id、resource_id 和 name 均可作为喂食参数。QQ 未下发默认饼干目录时,框架会补充名称 饼干 和 food_id 1。
给宠物喂食
feed_pet使用指定名称或 ID 的食物喂食
给宠物喂食。
调用
const result = await api.feed_pet(self_id, pet_id, food)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
pet_id |
string | 是 | get_pet_profile 返回的宠物 ID |
food |
string | 是 | get_pet_food_catalog 返回的食物名称、food_id 或 resource_id |
返回值
{
success: true,
pet_id: 'PET_ID',
food_name: '饼干',
food_id: '1',
message: '',
}
购买宠物食物
buy_pet_food按食物名称或 ID 购买宠物食物
使用宠物金币购买饼干。QQ 当前购买协议只支持饼干,其他食物只能使用已有库存。
调用
const result = await api.buy_pet_food(self_id, pet_id, food, count)
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
self_id |
number | 是 | - | 在线 Bot QQ 号 |
pet_id |
string | 是 | - | get_pet_profile 返回的宠物 ID |
food |
string | 是 | - | 饼干的名称、food_id 或 resource_id |
count |
number | 否 | 1 |
购买数量,范围为 1–999 |
返回值
{
success: true,
pet_id: 'PET_ID',
food_name: '饼干',
food_id: '1',
balance: 10,
gold: 300,
bought: 1,
cost_gold: 15,
}
获取洗护用品目录
get_pet_bath_catalog获取洗护用品与价格
获取宠物洗护用品目录。
调用
const result = await api.get_pet_bath_catalog(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
[
{
item_id: 'ITEM_ID',
name: '香皂片',
image_url: 'https://example.com/item.png',
gold_price: 2,
clean_gain: 10,
mood_gain: 1,
description: '香皂片:清洁值+10,心情值+1',
default_count: 10,
minimum: 1,
maximum: 99,
},
]
获取洗护用品库存
get_pet_bath_inventory获取洗护用品持有数量
获取宠物洗护用品库存。
调用
const result = await api.get_pet_bath_inventory(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
[
{ item_id: 'ITEM_ID_1', name: '香皂片', count: 10 },
{ item_id: 'ITEM_ID_2', name: '沐浴球', count: 0 },
]
给宠物洗护
bathe_pet按名称或 ID 使用洗护用品
使用洗护用品给宠物洗护。
调用
const result = await api.bathe_pet(self_id, pet_id, item, count)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
pet_id |
string | 是 | get_pet_profile 返回的宠物 ID |
item |
string | 是 | get_pet_bath_catalog 返回的用品名称或 item_id |
count |
number | 否 | 使用数量,默认 1,范围 1~99 |
返回值
{
success: true,
pet_id: 'PET_ID',
item_name: '香皂片',
item_id: 'ITEM_ID',
count: 1,
cleanliness: 100,
mood: 100,
remaining: 9,
completed: true,
}
购买洗护用品
buy_pet_bath_item按名称或 ID 购买洗护用品
购买宠物洗护用品。
调用
const result = await api.buy_pet_bath_item(self_id, pet_id, item, count)
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
self_id |
number | 是 | - | 在线 Bot QQ 号 |
pet_id |
string | 是 | - | get_pet_profile 返回的宠物 ID |
item |
string | 是 | - | get_pet_bath_catalog 返回的用品名称或 item_id |
count |
number | 否 | 1 |
购买数量,范围为 1–999 |
返回值
{
success: true,
pet_id: 'PET_ID',
item_name: '香皂片',
item_id: 'ITEM_ID',
count: 1,
result: 0,
order_id: 'ORDER_ID',
}
获取活动概览
get_pet_activity_overview获取学习或打工概览
获取宠物学习或打工概览。
调用
const result = await api.get_pet_activity_overview(self_id, activity)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
activity |
string | 是 | school / 学习 或 work / 打工 |
返回值
{
activity: 'school',
current_stage: 1,
entries: [
{
name: '初级学园',
scene_code: 6100,
status_code: 0,
message: '',
stage: 1,
},
],
}
获取活动选项
get_pet_activity_options获取可选课程、岗位或冒险
获取宠物当前可选的课程、岗位或冒险。
调用
const result = await api.get_pet_activity_options(self_id, activity, friend_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
activity |
string | 是 | school / 学习、work / 打工 或 adventure / 冒险 |
friend_id |
number | 否 | 雇佣的好友 QQ 号,仅打工和冒险可用 |
返回值
{
activity: 'school',
career_name: '初级学园 1年级',
options: [
{
name: '蹦蹦跳跳体能课',
icon_url: 'https://example.com/icon.png',
cost: '体力 -10',
duration: '1小时',
duration_seconds: 3600,
reward: '力量 +5',
description: '课程说明',
can_do: true,
unavailable_reason: '',
},
],
}
开始宠物活动
start_pet_activity开始学习、打工或冒险
开始宠物学习、打工或冒险。
调用
const result = await api.start_pet_activity(self_id, activity, option_name, friend_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
activity |
string | 是 | school / 学习、work / 打工 或 adventure / 冒险 |
option_name |
string | 是 | 活动选项中的名称 |
friend_id |
number | 否 | 雇佣的好友 QQ 号,仅打工和冒险可用 |
返回值
{
success: true,
pet_id: 'PET_ID',
activity: 'school',
option_name: '蹦蹦跳跳体能课',
story_id: '6100_xxx',
started: true,
hired_friend_id: '',
hired_pet_id: '',
}
获取活动状态
get_pet_activity_status获取当前活动状态
获取宠物当前活动状态。
调用
const result = await api.get_pet_activity_status(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
story_id: '6400_xxx',
state_code: 0,
remaining_seconds: 0,
duration_seconds: 0,
started_at: 0,
recallable: false,
}
结算宠物活动
settle_pet_activity结算当前活动
结算宠物当前活动。
调用
const result = await api.settle_pet_activity(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
success: true,
pet_id: 'PET_ID',
story_id: '6400_xxx',
settled: true,
}
当前没有可结算活动时返回错误。
鼓励活动中的宠物
encourage_pet_activity鼓励当前活动中的宠物
鼓励活动中的宠物。
调用
const result = await api.encourage_pet_activity(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
success: true,
credit: 1,
messages: ['鼓励成功'],
toast: '',
}
当前没有可鼓励活动时返回错误。
获取 PK 好友列表
get_pet_pk_friends获取可 PK 的好友
获取可进行宠物 PK 的好友列表。
调用
const result = await api.get_pet_pk_friends(self_id, cursor)
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
self_id |
number | 是 | - | 在线 Bot QQ 号 |
cursor |
string | 否 | '' |
上一页返回的 next_cursor |
返回值
{
friends: [
{
pet_id: 'pet-123',
pet_name: '小卡',
user_id: '123456789',
nickname: '昵称',
dominant_type: 1,
power: 10,
pet_status: 1,
pet_resolved: true,
},
],
next_cursor: 'NEXT_CURSOR',
has_more: false,
source: 'pet_pool',
}
source 为 pet_pool 时,列表来自宠物服务并已携带真实宠物资料。宠物服务未返回候选项时,框架会返回普通 QQ 好友基础列表,source 为 qq_friend_fallback、pet_resolved 为 false;后续调用 PK 接口时,框架会根据 user_id 自动查询真实宠物资料。
获取宠物 PK 数值
get_pet_pk_power获取本人宠物战力
获取本人宠物 PK 数值。
调用
const result = await api.get_pet_pk_power(self_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
返回值
{
dominant_type: 0,
power: 10,
}
戳一戳好友宠物
poke_friend_pet与好友宠物互动
戳一戳好友宠物。
调用
const result = await api.poke_friend_pet(self_id, friend_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
friend_id |
number | 是 | 好友 QQ 号 |
返回值
{
success: true,
friend_id: 123456789,
}
获取好友宠物资料
get_friend_pet_profile获取好友宠物资料与当前数值
获取好友宠物资料与当前数值。
调用
const result = await api.get_friend_pet_profile(self_id, friend_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
friend_id |
number | 是 | 好友 QQ 号 |
返回值
{
friend_id: '123456789',
pet_id: 'PET_ID',
pet_name: '好友宠物',
avatar_url: 'https://example.com/avatar.png',
personality: '活泼',
species: '蒜头鹅',
job_name: '职业名称',
vitals: {
mood: 100,
hunger: 90,
cleanliness: 88,
total: 278,
gold: 0,
},
}
给好友宠物喂食
feed_friend_pet使用指定食物给好友宠物喂食
使用指定食物给好友宠物喂食。
调用
const result = await api.feed_friend_pet(self_id, friend_id, food)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
friend_id |
number | 是 | 好友 QQ 号 |
food |
string | 是 | get_pet_food_catalog 返回的食物名称、food_id 或 resource_id |
返回值
{
success: true,
friend_id: '123456789',
pet_id: 'PET_ID',
pet_name: '好友宠物',
food_name: '饼干',
food_id: '1',
message: '',
}
给好友宠物洗护
bathe_friend_pet使用指定用品给好友宠物洗护
使用指定洗护用品给好友宠物洗护。
调用
const result = await api.bathe_friend_pet(self_id, friend_id, item, count)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
friend_id |
number | 是 | 好友 QQ 号 |
item |
string | 是 | get_pet_bath_catalog 返回的用品名称或 item_id |
count |
number | 否 | 使用数量,默认 1,范围 1~99 |
返回值
{
success: true,
friend_id: '123456789',
pet_id: 'PET_ID',
pet_name: '好友宠物',
item_name: '香皂片',
item_id: '1',
count: 1,
cleanliness: 100,
mood: 100,
remaining: 9,
completed: true,
}
访问好友宠物
visit_friend_pet访问好友的宠物页面
访问好友的宠物页面。
调用
const result = await api.visit_friend_pet(self_id, friend_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
friend_id |
number | 是 | 好友 QQ 号 |
返回值
{
success: true,
friend_id: '123456789',
pet_id: 'PET_ID',
pet_name: '好友宠物',
visited: true,
rule_count: 1,
}
发起宠物 PK
start_pet_pk与指定好友的宠物开始 PK
与指定好友的宠物开始 PK。
调用
const result = await api.start_pet_pk(self_id, friend_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
friend_id |
number | 是 | 对手 QQ 号 |
返回值
{
success: true,
pet_id: 'SELF_PET_ID',
friend_id: '123456789',
friend_pet_id: 'FRIEND_PET_ID',
friend_pet_name: '好友宠物',
story_id: '6900_xxx',
started: true,
}
获取宠物 PK 状态
get_pet_pk_status查询指定 PK 任务状态
获取宠物 PK 状态。
调用
const result = await api.get_pet_pk_status(self_id, story_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
story_id |
string | 是 | start_pet_pk 返回的 PK 任务 ID |
返回值
{
success: true,
pet_id: 'PET_ID',
story_id: '6900_xxx',
status_received: true,
response_empty: false,
}
结算宠物 PK
settle_pet_pk结算指定 PK 任务
结算指定的宠物 PK。
调用
const result = await api.settle_pet_pk(self_id, story_id)
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
self_id |
number | 是 | 在线 Bot QQ 号 |
story_id |
string | 是 | start_pet_pk 返回的 PK 任务 ID |
返回值
{
success: true,
pet_id: 'PET_ID',
story_id: '6900_xxx',
settled: true,
}