404
页面不存在
这 是 四 零 四 !
diff --git a/404.html b/404.html new file mode 100644 index 00000000..716a1046 --- /dev/null +++ b/404.html @@ -0,0 +1,40 @@ + + +
+ + + + +Shamrock 的语音解码器已经模块化,你可以自行选择安装。
如果未安装 SILK 语音引擎,Shamrock 则无法发送 mp3/flac/wav/ogg 等格式的语音消息。
为了完整支持语音消息,你需要安装 SILK 语音引擎。
Shamrock 主目录
下的 lib
文件夹中关于 Shamrock 主目录
,请参考 目录定义。
提示
如果没有 lib
文件夹,请自行创建。
请你下载对应的正确的架构的lib
,在模拟器上即使对应架构也可能报错?
注意
对于 Shamrock 尚未实现的 API,会在标题添加标记 未实现
该接口用于获取 QQ 用户的登录号信息。
/get_login_info
提示
该接口无输入参数。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
nickname | string | 昵称 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "user_id": 2854200454,
+ "nickname": "Shamrock"
+ }
+}
+
该接口用于设置 QQ 用户的个人资料信息。
/set_qq_profile
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
nickname | string | 是 | 昵称 |
company | string | 是 | 公司 |
string | 是 | 邮箱 | |
college | string | 是 | 大学 |
personal_note | string | 是 | 个人备注 |
age | int32 | 否 | 年龄 |
birthday | string | 否 | 生日(格式:YYYY-MM-DD) |
该接口将返回基本的 json 。
该接口用于获取 QQ 在线机型。
/_get_model_show
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
model | string | 是 | 机型 |
{
+ "model": "OPPO"
+}
+
字段 | 类型 | 说明 |
---|---|---|
variants | List<ModelDetail> | 机型列表 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "variants": [
+ {
+ "model_show": "OPPO (黑色)",
+ "need_pay": true
+ },
+ {
+ "model_show": "OPPO (白色)",
+ "need_pay": true
+ },
+ {
+ "model_show": "OPPO (银色)",
+ "need_pay": true
+ },
+ {
+ "model_show": "OPPO (灰色)",
+ "need_pay": true
+ },
+ {
+ "model_show": "OPPO (金色)",
+ "need_pay": true
+ },
+ {
+ "model_show": "OPPO",
+ "need_pay": false
+ }
+ ]
+ }
+}
+
字段 | 类型 | 说明 |
---|---|---|
model_show | string | 机型名称 |
need_pay | bool | 是否需要付费 |
该接口用于设置 QQ 在线机型。
/_set_model_show
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
model | string | 是 | 机型 |
manu | string | 是 | 厂商 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于获取当前账号在线客户端列表。
/get_online_clients
字段 | 类型 | 说明 |
---|---|---|
no_cache | bool | 是否无视缓存 |
字段 | 类型 | 说明 |
---|---|---|
clients | Object<Device> | 在线客户端列表 |
字段 | 类型 | 说明 |
---|---|---|
app_id | int64 | 客户端ID |
device_name | string | 设备名称 |
device_kind | string | 设备类型 |
注意
对于 Shamrock 尚未实现的 API,会在标题添加标记 未实现
该接口用于获取陌生人的信息。
/get_stranger_info
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
user_id | int64 | 是 | QQ 号 |
注意
该 API 可能会返回不存在于以下表格中的字段,请不要作为参考使用。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
nickname | string | 昵称 |
age | int32 | 年龄 |
sex | string | 性别 |
ext | object | 扩展字段(一堆垃圾) |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "user_id": "534103824",
+ "nickname": "优",
+ "age": 5,
+ "sex": "female",
+ "level": 10,
+ "login_days": 0,
+ "qid": "",
+ "vote": 90,
+ "wzry_honor": null,
+ "ext": {
+ "add_src_id": 0,
+ "add_src_name": "",
+ "add_sub_src_id": 0,
+ "allow_cal_interactive": false,
+ "allow_click": false,
+ "allow_people_see": false,
+ "auth_state": -1,
+ "big_club_vip_open": 0,
+ "hollywood_vip_open": 0,
+ "qq_vip_open": 0,
+ "super_qq_open": 0,
+ "super_vip_open": 0,
+ "voted": 0,
+ "baby_q_switch": false,
+ "bind_phone_info": "",
+ "card_id": 0,
+ "card_type": 0,
+ "category": -1,
+ "clothes_id": 0,
+ "cover_url": "",
+ "declaration": null,
+ "default_card_id": 0,
+ "diy_complicated_info": null,
+ "diy_default_text": null,
+ "diy_text": null,
+ "diy_text_degree": 0.0,
+ "diy_text_font_id": 0,
+ "diy_text_height": 0.0,
+ "diy_text_width": 0.0,
+ "diy_text_loc_x": 0.0,
+ "diy_text_loc_y": 0.0,
+ "dress_up_is_on": false,
+ "enc_id": null,
+ "enlarge_qzone_pic": 0,
+ "extend_friend_entry_add_friend": 0,
+ "extend_friend_entry_contact": 0,
+ "extend_friend_flag": 0,
+ "extend_friend_question": 0,
+ "extend_friend_voice_duration": 0,
+ "favorite_source": 12,
+ "feed_preview_time": 0,
+ "font_id": 0,
+ "font_type": 0,
+ "qid_bg_url": "",
+ "qid_color": "",
+ "qid_logo_url": "https://sola.gtimg.cn/aoi/sola/20200925143823_CqAm9t45Us.png",
+ "qq_card_is_on": false,
+ "school_id": null,
+ "school_name": null,
+ "school_verified_flag": false,
+ "show_publish_button": false,
+ "singer": "",
+ "song_dura": 0,
+ "song_id": "",
+ "song_name": ""
+ }
+ }
+}
+
该接口用于获取好友列表。
/get_friend_list
提示
该接口无输入参数,除 refresh
参数决定是否刷新数据。可能不是立即生效。
该接口返回的 data
数据为数组,每个元素为一个好友的信息,具体如下。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
user_name | string | 昵称 |
user_displayname | string | 显示名 |
user_remark | string | 备注 |
age | int32 | 年龄 |
gender | int32 | 性别 |
group_id | int64 | 分组 ID |
platform | string | 平台 |
term_type | string | 终端类型 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": [
+ {
+ "user_id": 2854200454,
+ "user_name": "Shamrock",
+ "user_displayname": "QQ机器人",
+ "user_remark": "QQ机器人",
+ "age": 0,
+ "gender": 0,
+ "group_id": 0,
+ "platform": "MOBILE_ANDROID",
+ "term_type": 65799
+ },
+ {
+ "user_id": 1372362033,
+ "user_name": "伏秋洛~",
+ "user_displayname": "伏秋洛~",
+ "user_remark": "伏秋洛~",
+ "age": 0,
+ "gender": 0,
+ "group_id": 0,
+ "platform": "MOBILE_PC",
+ "term_type": 65793
+ }
+ ]
+}
+
该接口用于获取单向好友列表。
/get_unidirectional_friend_list
提示
该 API 无需参数
响应内容为 json 数组, 每个元素如下:
字段名 | 数据类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
nickname | string | 昵称 |
source | string | 来源 |
该接口用于获取群信息。
/get_group_info
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
注意
该 API 可能会返回不存在于以下表格中的字段,请不要作为参考使用。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
group_name | string | 群名称 |
group_remark | string | 群备注 |
group_uin | int64 | 群 Uin |
admins | List<int64> | 管理员列表 |
class_text | string | 群分类 |
is_frozen | bool | 是否冻结 |
max_member | int32 | 最大成员数 |
max_member_count | int32 | 最大成员数 |
member_num | int32 | 成员数量 |
member_count | int32 | 成员数量 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "group_id": 758533243,
+ "group_name": "Shamrock",
+ "group_remark": "",
+ "group_uin": 758533243,
+ "admins": [1372362033, 1307993674],
+ "class_text": "",
+ "is_frozen": false,
+ "max_member": 500,
+ "member_num": 165,
+ "member_count": 165,
+ "max_member_count": 500
+ }
+}
+
该接口用于获取群列表。
/get_group_list
提示
该 API 无需参数
该接口返回的 data
数据为数组,每个元素为一个群的信息,具体如下。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
group_name | string | 群名称 |
group_remark | string | 群备注 |
group_uin | int64 | 群 Uin |
admins | List<int64> | 管理员列表 |
class_text | string | 群分类 |
is_frozen | bool | 是否冻结 |
max_member | int32 | 最大成员数 |
max_member_count | int32 | 最大成员数 |
member_num | int32 | 成员数量 |
member_count | int32 | 成员数量 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": [
+ {
+ "group_id": 758533243,
+ "group_name": "Shamrock",
+ "group_remark": "",
+ "group_uin": 758533243,
+ "admins": [1372362033, 1307993674],
+ "class_text": "",
+ "is_frozen": false,
+ "max_member": 500,
+ "member_num": 165,
+ "member_count": 165,
+ "max_member_count": 500
+ }
+ ]
+}
+
该接口用于获取群成员信息。
/get_group_member_info
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
group_id | int64 | 群号 |
user_name | string | 昵称 |
sex | string | 性别 |
title | string | 专属头衔 |
title_expire_time | int64 | 专属头衔过期时间戳 |
nickname | string | 群昵称 |
user_displayname | string | 显示名 |
distance | int32 | 距离 |
honor | List<int32> | 群荣誉 |
join_time | int64 | 入群时间 |
last_active_time | int64 | 最后发言时间 |
last_sent_time | int64 | 最后发言时间 |
unique_name | string | 群头衔 |
area | string | 地区 |
level | string | 成员等级 |
role | string | 角色 |
unfriendly | bool | 是否不良记录成员 |
card_changeable | bool | 是否允许修改群名片 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "user_id": 1372362033,
+ "group_id": 758533243,
+ "user_name": "伏秋洛~",
+ "sex": "female",
+ "title": "",
+ "title_expire_time": 0,
+ "nickname": "伏秋洛~",
+ "user_displayname": "",
+ "distance": 100,
+ "honor": [3],
+ "join_time": 1687759547,
+ "last_active_time": 1697105041,
+ "last_sent_time": 1697105041,
+ "unique_name": "",
+ "area": "",
+ "level": 10315,
+ "role": "owner",
+ "unfriendly": false,
+ "card_changeable": false
+ }
+}
+
该接口用于获取群成员列表。
/get_group_member_list
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
该接口返回的 data
数据为数组,每个元素为一个群成员的信息,具体如下。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
group_id | int64 | 群号 |
user_name | string | 昵称 |
sex | string | 性别 |
title | string | 专属头衔 |
title_expire_time | int64 | 专属头衔过期时间戳 |
nickname | string | 群昵称 |
user_displayname | string | 显示名 |
distance | int32 | 距离 |
honor | List<int32> | 群荣誉 |
join_time | int64 | 入群时间 |
last_active_time | int64 | 最后发言时间 |
last_sent_time | int64 | 最后发言时间 |
unique_name | string | 群头衔 |
area | string | 地区 |
level | string | 成员等级 |
role | string | 角色 |
unfriendly | bool | 是否不良记录成员 |
card_changeable | bool | 是否允许修改群名片 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": [
+ {
+ "user_id": 1372362033,
+ "group_id": 758533243,
+ "user_name": "伏秋洛~",
+ "sex": "female",
+ "title": "",
+ "title_expire_time": 0,
+ "nickname": "伏秋洛~",
+ "user_displayname": "",
+ "distance": 100,
+ "honor": [3],
+ "join_time": 1687759547,
+ "last_active_time": 1697105041,
+ "last_sent_time": 1697105041,
+ "unique_name": "",
+ "area": "",
+ "level": 10315,
+ "role": "owner",
+ "unfriendly": false,
+ "card_changeable": false
+ }
+ ]
+}
+
该接口用于获取群荣誉信息。
/get_group_honor_info
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
current_talkative | List<HonorInfo> | 当前龙王 |
talkative_list | List<HonorInfo> | 历史龙王 |
performer_list | List<HonorInfo> | 群聊之火 |
legend_list | List<HonorInfo> | 群聊炽焰 |
strong_newbie_list | List<HonorInfo> | 冒尖小春笋 |
emotion_list | List<HonorInfo> | 快乐之源 |
all | List<HonorInfo> | 全部荣誉 |
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
nickname | string | 昵称 |
avatar | string | 头像链接 |
day_count | int32 | 持续天数 |
id | int32 | ID |
description | string | 描述 |
该接口用于获取群系统消息。
/get_group_system_msg
字段 | 类型 | 说明 |
---|---|---|
invited_requests | List<InvitedRequest> | 邀请消息列表 |
join_requests | List<JoinRequest> | 进群消息列表 |
注意
如果列表不存在任何消息, 将返回 null
字段 | 类型 | 说明 |
---|---|---|
request_id | int64 | 请求ID |
invitor_uin | int64 | 邀请者 |
invitor_nick | string | 邀请者昵称 |
group_id | int64 | 群号 |
group_name | string | 群名 |
checked | bool | 是否已被处理 |
actor | int64 | 处理者, 未处理为0 |
requester_uin | int64 | 被邀请者ID |
flag | string | flag,用于处理请求 |
字段 | 类型 | 说明 |
---|---|---|
request_id | int64 | 请求ID |
requester_uin | int64 | 请求者ID |
requester_nick | string | 请求者昵称 |
message | string | 验证消息 |
group_id | int64 | 群号 |
group_name | string | 群名 |
checked | bool | 是否已被处理 |
actor | int64 | 处理者, 未处理为0 |
flag | string | flag,用于处理请求 |
该接口用于获取好友系统消息。
/get_friend_system_msg
该接口返回的 data
数据为数组,每个元素为一个好友请求的系统信息,具体如下。
字段 | 类型 | 说明 |
---|---|---|
request_id | int64 | 请求id |
requester_uin | int64 | 请求者QQ号 |
requester_nick | string | 请求者昵称 |
source | string | 来源 |
message | string | 附加消息 |
source_group_name | string | 来源群名称,仅当从群添加好友时存在 |
source_group_id | int64 | 来源群号,仅当从群添加好友时存在 |
sex | string | 请求者性别 |
age | string | 请求者年龄 |
msg_detail | string | 处理结果 |
status | string | 可选值:已同意 、已拒绝 ,为空则表示尚未处理 |
flag | string | flag,用于处理请求 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": [
+ {
+ "request_id": 1702011024000000,
+ "requester_uin": 1234567890,
+ "requester_nick": "流月e",
+ "source": "QQ群-群名称",
+ "message": "我是流月e",
+ "source_group_name": "群名称",
+ "source_group_id": 1234567890,
+ "flag": "1702011024000000;3004;3;1234567890",
+ "sex": "female",
+ "age": 23,
+ "msg_detail": "",
+ "status": ""
+ },
+ {
+ "request_id": 1702010997000000,
+ "requester_uin": 1234567891,
+ "requester_nick": "是铃音啦",
+ "source": "QQ群",
+ "message": "",
+ "source_group_name": "",
+ "source_group_id": 0,
+ "flag": "1702010997000000;6;1;1234567891",
+ "sex": "male",
+ "age": 0,
+ "msg_detail": "",
+ "status": ""
+ }
+ ]
+}
+
该接口用于获取精华消息列表。
/get_essence_msg_list
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
响应内容为 JSON 数组,每个元素如下:
字段名 | 数据类型 | 说明 |
---|---|---|
sender_id | int64 | 发送者QQ 号 |
sender_nick | string | 发送者昵称 |
sender_time | int64 | 消息发送时间 |
operator_id | int64 | 操作者QQ 号 |
operator_nick | string | 操作者昵称 |
operator_time | int64 | 精华设置时间 |
message_id | int32 | 消息ID,可能为0表示找不到消息映射 |
message_seq | int32 | 消息seq |
获取好友/陌生人是否处于黑名单列表。
/is_blacklist_uin
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
user_id | int64 | 是 | QQ账号 |
字段 | 类型 | 说明 |
---|---|---|
is | bool | 是否是黑名单 |
注意
对于 Shamrock 尚未实现的 API,会在标题添加标记 未实现
该接口用于处理加好友请求。
/set_friend_add_request
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
flag | string | - | 加好友请求的 flag(需从上报的数据中获得) |
approve | boolean | true | 是否同意请求 |
remark | string | 空 | 添加后的好友备注(仅在同意时有效) |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于处理加群请求/邀请。
/set_group_add_request
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
flag | string | - | 加群请求的 flag(需从上报的数据中获得) |
sub_type 或 type | string | - | add 或 invite , 请求类型(需要和上报消息中的 sub_type 字段相符) |
approve | boolean | true | 是否同意请求/邀请 |
reason | string | 空 | 拒绝理由(仅在拒绝时有效) |
该接口将返回处理结果,其中 data
字段无数据。
注意
这里的API处于实验性阶段,不会进行大量维护和更新,由于过于简单,如果需要某些功能可以自行PR!
获取收藏列表
/fav/get_item_list
(HTTP)
fav.get_item_list
(WebSocket)
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
page_size | int32 | 是 | 获取的数量 | |
category | int32 | 是 | 分类 | |
start_pos | int32 | 是 | 开始的位置 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "items": [
+ {
+ "id": "1-1-9dec6664-dcb7-4b46-986f-xxxxxx",
+ "author_type": 2,
+ "author": 2806922524,
+ "author_name": "2806922524",
+ "group_name": "ˢʰᵃᵐʳᵒᶜᵏ",
+ "group_id": 333425833,
+ "client_version": "8.9.12820",
+ "time": 1703004793000
+ }
+ ]
+ },
+ "echo": ""
+}
+
获取收藏内容
/fav/get_item_content
(HTTP)
fav.get_item_content
(WebSocket)
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
id | string | 是 | id |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "content": "在想可不可以在手机上跑bot()"
+ },
+ "echo": ""
+}
+
添加一段文字到QQ收藏
/fav/add_text_msg
(HTTP)
fav.add_text_msg
(WebSocket)
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
content | string | 是 | 内容 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "id": "xxxxxxxx"
+ },
+ "echo": ""
+}
+
添加一个图片到QQ收藏
/fav/add_image_msg
(HTTP)
fav.add_image_msg
(WebSocket)
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
file | string | 是 | 图片base64或者绝对路径或者URL |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "id": "xxxxxxxx"
+ },
+ "echo": ""
+}
+
注意
对于 Shamrock 尚未实现的 API,会在标题添加标记 未实现
该接口用于上传私聊文件。
注意
只能上传本地文件, 需要上传 http
文件的话请先下载至本地
/upload_private_file
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 目标 |
file | string | 本地文件路径 或 文件base64 或 文件url |
name | string | 文件名称 |
注意
本地文件路径为绝对路径,文件base64为base64://
开头,文件url则应该是正确的http请求地址。
字段 | 类型 | 说明 |
---|---|---|
msg_id | int32 | 消息id |
bizid | int32 | |
md5 | string | MD5 |
file_id | string | 文件uuid |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "msg_id": 286479341,
+ "bizid": 102,
+ "md5": "6742327a8b0147eebd6e1d4018626082",
+ "sha": "",
+ "sha3": "",
+ "file_id": "/c65b7c5c-50e0-47c6-951f-4e3377505f7f"
+ },
+ "echo": ""
+}
+
该接口用于上传群文件。
注意
只能上传本地文件, 需要上传 http
文件的话请先下载至本地
/upload_group_file
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
file | string | 本地文件路径 或 文件base64 或 文件url |
name | string | 文件名称 |
注意
本地文件路径为绝对路径,文件base64为base64://
开头,文件url则应该是正确的http请求地址。
字段 | 类型 | 说明 |
---|---|---|
msg_id | int32 | 消息id |
bizid | int32 | |
md5 | string | MD5 |
file_id | string | 文件uuid |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "msg_id": 286479341,
+ "bizid": 102,
+ "md5": "6742327a8b0147eebd6e1d4018626082",
+ "sha": "",
+ "sha3": "",
+ "file_id": "/c65b7c5c-50e0-47c6-951f-4e3377505f7f"
+ },
+ "echo": ""
+}
+
注意
参数 folder
在Shamrock不受支持。
该接口用于删除群文件。
/delete_group_file
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
file_id | string | 文件ID 参考 File 对象 |
busid | int32 | 文件类型 参考 File 对象 |
提示
该 API 无响应数据
该接口用于创建群文件文件夹。
注意
仅能在根目录创建文件夹
/create_group_file_folder
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
name | string | 群文件夹名字 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "folder_id": "/ad86c100-031d-4139-8cab-c6c661a413ba",
+ "parent_folder_id": "/",
+ "folder_name": "测试",
+ "create_time": 1706269735,
+ "modify_time": 1706269735,
+ "creator_uin": 1650114384,
+ "modifier_uin": 1650114384
+ },
+ "message": "成功",
+ "echo": 111
+}
+
把已经存在的群文件夹改个名字。
/rename_group_folder
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
folder_id | string | 群文件夹ID |
name | string | 群文件夹名字 |
可通过返回的状态码判断重命名是否成功。
该接口用于删除群文件文件夹。
/delete_group_folder
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
folder_id | string | 文件夹ID 参考 Folder 对象 |
可通过返回的状态码判断删除是否成功。
该接口用于获取群文件系统信息。
/get_group_file_system_info
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
字段 | 类型 | 说明 |
---|---|---|
file_count | int32 | 文件总数 |
limit_count | int32 | 文件上限 |
used_space | int64 | 已使用空间 |
total_space | int64 | 空间上限 |
该接口用于获取群根目录文件列表。
/get_group_root_files
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
字段 | 类型 | 说明 |
---|---|---|
files | List<File> | 文件列表 |
folders | List<Folder> | 文件夹列表 |
字段 | 类型 | 说明 |
---|---|---|
group_id | int32 | 群号 |
file_id | string | 文件ID |
file_name | string | 文件名 |
busid | int32 | 文件类型 |
file_size | int64 | 文件大小 |
upload_time | int64 | 上传时间 |
dead_time | int64 | 过期时间,永久文件恒为0 |
modify_time | int64 | 最后修改时间 |
download_times | int32 | 下载次数 |
uploader | int64 | 上传者ID |
uploader_name | string | 上传者名字 |
md5 | string | md5 |
sha | string | sha |
sha3 | string | sha3 可能获取不到 |
字段 | 类型 | 说明 |
---|---|---|
group_id | int32 | 群号 |
folder_id | string | 文件夹ID |
folder_name | string | 文件名 |
create_time | int64 | 创建时间 |
creator | int64 | 创建者 |
creator_name | string | 创建者名字 |
total_file_count | int32 | 子文件数量 |
该接口用于获取群子目录文件列表。
/get_group_files_by_folder
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
folder_id | string | 文件夹ID 参考 Folder 对象 |
字段 | 类型 | 说明 |
---|---|---|
files | File[] | 文件列表 |
folders | Folder[] | 文件夹列表 |
该接口用于获取群文件资源链接。
/get_group_file_url
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
file_id | string | 文件ID 参考 File 对象 |
busid | int32 | 文件类型 参考 File 对象 |
字段 | 类型 | 说明 |
---|---|---|
url | string | 文件下载链接 |
注意
对于 Shamrock 尚未实现的 API,会在标题添加标记 未实现
该接口用于设置群名。
/set_group_name
字段名 | 数据类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
group_name | string | 新群名 |
提示
该 API 无响应数据
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于设置群头像。
/set_group_portrait
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
file | string | 图片文件名 |
cache | int | 表示是否使用已缓存的文件 |
[1] file
参数支持以下几种格式:
file:///sdcard/Pictures/shamrock.png
, 格式使用 file
URIhttp://i1.piimg.com/567571/fdd6e7b6d93f1ef0.jpg
base64://iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAIAAADJt1n/AAAAKElEQVQ4EWPk5+RmIBcwkasRpG9UM4mhNxpgowFGMARGEwnBIEJVAAAdBgBNAZf+QAAAAABJRU5ErkJggg==
[2] cache
参数: 通过网络 URL 发送时有效, 1
表示使用缓存, 0
关闭关闭缓存, 默认 为1
该接口用于设置群管理员。
/set_group_admin
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
enable | bool | 是 | 是否设置 |
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于设置群成员名片。
/set_group_card
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
group_id | int64 | - | 群号 |
user_id | int64 | - | 要设置的 QQ 号 |
card | string | 空 | 群名片内容, 不填或空字符串表示删除群名片 |
提示
该 API 无响应数据
该接口用于设置群聊备注。
/set_group_remark
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
group_id | int64 | - | 群号 |
remark | string | 空 | 群备注, 不填或空字符串表示删除群备注 |
提示
该 API 无响应数据
该接口用于设置群组专属头衔。
/set_group_special_title
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
special_title | string | 是 | 头衔 |
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于群单人禁言。
/set_group_ban
提示
当 duration
为 0
时,将解除禁言。
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
duration | int64 | 是 | 禁言时长 |
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于群全员禁言。
/set_group_whole_ban
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
group_id | int64 | - | 群号 |
enable | boolean | true | 是否禁言 |
提示
该 API 无响应数据
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于设置精华消息。
/set_essence_msg
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息ID |
提示
该 API 没有响应数据
该接口用于移出精华消息。
/delete_essence_msg
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息ID |
提示
该 API 没有响应数据
该接口用于群打卡。
/send_group_sign
字段名 | 数据类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于发送群公告。
/_send_group_notice
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
group_id | int64 | 群号 | |
content | string | 公告内容 | |
image | string | 图片(可选),支持base64、http(s)和本地路径 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于获取群公告。
/_get_group_notice
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
group_id | int64 | 群号 |
data 的响应内容为 json 数组,每个元素内容如下:
字段 | 类型 | 说明 |
---|---|---|
sender_id | int64 | 公告发表者 |
publish_time | int64 | 公告发表时间 |
message | Object<Message> | 公告内容 |
字段 | 类型 | 说明 |
---|---|---|
text | string | 公告内容 |
images | List<Images> | 公告图片 |
字段 | 类型 | 说明 |
---|---|---|
height | string | 图片高度 |
width | string | 图片宽度 |
id | string | 图片ID,可用https://gdynamic.qpic.cn/gdynamic/{id}/628 获取 |
该接口用于群组踢人。
/set_group_kick
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
reject_add_request | bool | 否 | 是否拒绝再次加群 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于退出群组。
/set_group_leave
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于群戳一戳。
/group_touch
- 用于HTTP
/poke
- 用于主动WebSocket与被动WebSocket
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
该接口将返回处理结果,其中 data
字段无数据。。
用于获取群聊谁谁谁啊犯贱或者被二比滥权管理或者某群主时援交手滑禁言掉的人的列表。
/get_prohibited_member_list
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
time | int64 | 禁言结束时间 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": [
+ {
+ "user_id": 2262206340, // 被禁言的人
+ "time": 1700749967 // 禁言结束时间
+ }
+ ],
+ "echo": "xxxx"
+}
+
当机器人是管理员时可用
/get_group_at_all_remain
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
字段 | 类型 | 说明 |
---|---|---|
can_at_all | bool | 是否可以 @全体成员 |
remain_at_all_count_for_group | int32 | 群内所有管理当天剩余 @全体成员 次数 |
remain_at_all_count_for_uin | int32 | Bot 当天剩余 @全体成员 次数 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": [
+ {
+ "can_at_all": true,
+ "remain_at_all_count_for_group": 20,
+ "remain_at_all_count_for_group": 10
+ }
+ ],
+ "echo": "xxxx"
+}
+
貌似是从别的地方抄的奇怪功能,目前版本(9.0.15)只在部分群聊进行灰度测试!
/set_group_comment_face
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
msg_id | int32 | 是 | 消息ID |
face_id | int32 | 是 | 表情ID |
is_set | bool | 否 | 是否设置或取消评论 |
该接口将返回处理结果,其中 data
字段无数据。。
注意
对于 Shamrock 尚未实现的 API,会在标题添加标记 未实现
该接口用于获取频道系统内BOT的资料。
/get_guild_service_profile
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "nickname": "田所浩二",
+ "tiny_id": 1145141919810,
+ "avatar_url": "http://thirdqq.qlogo.cn/g?b=oidb&k=***&kti=***&s=0&t=***"
+ },
+ "echo": 123446
+}
+
获取频道列表,数据相比于Go-CQHTTP会有一点不一样。
/get_guild_list
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "guild_list": [
+ {
+ "guild_id": 111111111111111,
+ "guild_name": "北京大学频道",
+ "guild_display_id": "abcdefg",
+ "profile": "北京大学交流频道",
+ "status": {
+ "is_enable": true,
+ "is_banned": false,
+ "is_frozen": false
+ },
+ "owner_id": 22222222222222,
+ "shutup_expire_time": 0,
+ "allow_search": true
+ }
+ ]
+ },
+ "message": "success",
+ "echo": 111
+}
+
获取频道元数据,例如当前成员数量之类。
/get_guild_meta_by_guest
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "guild_id": 11111111111,
+ "guild_name": "北京大学交流频道",
+ "guild_profile": "",
+ "create_time": 1606878500,
+ "max_member_count": 100000,
+ "max_robot_count": 100,
+ "max_admin_count": 50,
+ "member_count": 6241,
+ "owner_id": 2222222221,
+ "guild_display_id": ""
+ },
+ "echo": 111
+}
+
获取一个频道的子频道(channel)列表。
/get_guild_channel_list
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
refresh | bool | 是否刷新数据,默认false |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "channel_list": [
+ {
+ "owner_guild_id": 1111111111111111111,
+ "channel_id": 639093000,
+ "channel_uin": 639093000,
+ "guild_id": "1111111111111111111",
+ "channel_type": 2,
+ "channel_name": "Test",
+ "create_time": 1606879350,
+ "max_member_count": 99,
+ "creator_tiny_id": 124105218677239793,
+ "talk_permission": 1,
+ "visible_type": 1,
+ "current_slow_mode": 0,
+ "slow_modes": [],
+ "icon_url": "",
+ "jump_switch": 0,
+ "jump_type": 0,
+ "jump_url": "",
+ "category_id": 0,
+ "my_talk_permission": 2
+ },
+ {
+ "owner_guild_id": 1111111111111111111,
+ "channel_id": 639093001,
+ "channel_uin": 639093001,
+ "guild_id": "1111111111111111111",
+ "channel_type": 1,
+ "channel_name": "闲聊吹水",
+ "create_time": 1606878501,
+ "max_member_count": 0,
+ "creator_tiny_id": 124105218677239793,
+ "talk_permission": 1,
+ "visible_type": 1,
+ "current_slow_mode": 0,
+ "slow_modes": [
+ {
+ "slow_mode_key": 0,
+ "slow_mode_text": "关闭",
+ "speak_frequency": 0,
+ "slow_mode_circle": 0
+ },
+ {
+ "slow_mode_key": 1,
+ "slow_mode_text": "每分钟1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 60
+ },
+ {
+ "slow_mode_key": 2,
+ "slow_mode_text": "每分钟2条",
+ "speak_frequency": 2,
+ "slow_mode_circle": 60
+ },
+ {
+ "slow_mode_key": 3,
+ "slow_mode_text": "每分钟5条",
+ "speak_frequency": 5,
+ "slow_mode_circle": 60
+ },
+ {
+ "slow_mode_key": 4,
+ "slow_mode_text": "每分钟10条",
+ "speak_frequency": 10,
+ "slow_mode_circle": 60
+ },
+ {
+ "slow_mode_key": 5,
+ "slow_mode_text": "每5分钟1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 300
+ },
+ {
+ "slow_mode_key": 6,
+ "slow_mode_text": "每10分钟1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 600
+ },
+ {
+ "slow_mode_key": 7,
+ "slow_mode_text": "每15分钟1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 900
+ },
+ {
+ "slow_mode_key": 8,
+ "slow_mode_text": "每30分钟1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 1800
+ },
+ {
+ "slow_mode_key": 9,
+ "slow_mode_text": "每1小时1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 3600
+ },
+ {
+ "slow_mode_key": 10,
+ "slow_mode_text": "每12小时1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 43200
+ },
+ {
+ "slow_mode_key": 11,
+ "slow_mode_text": "每24小时1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 86400
+ }
+ ],
+ "icon_url": "",
+ "jump_switch": 0,
+ "jump_type": 0,
+ "jump_url": "",
+ "category_id": 0,
+ "my_talk_permission": 2
+ }
+ ]
+ },
+ "message": "success",
+ "echo": 111
+}
+
类型 | 说明 |
---|---|
1 | 文字频道 |
2 | 语音频道 |
5 | 直播频道 |
7 | 主题频道 |
获取一个频道成员列表,但是因为数据量大,可能需要分页。
/get_guild_member_list
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
next_token | string | 不提供则从首页开始获取 |
all | bool | 是否一次性获取完所有成员,默认false |
refresh | bool | 是否刷新数据,默认false |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "members": [
+ {
+ "tiny_id": 144115218185291865,
+ "title": "频道助手",
+ "nickname": "频道助手",
+ "role_id": 2,
+ "role_name": "小管家",
+ "role_color": 4294936110,
+ "join_time": 1606878501,
+ "robot_type": 1,
+ "type": 1,
+ "in_black": false,
+ "platform": 0
+ }
+ ],
+ "next_token": "0800100118032001",
+ "finished": true
+ },
+ "echo": ""
+}
+
单独获取频道成员信息,附带有权限信息和身份组哦~!
/get_guild_member_profile
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
user_id | uint64 | 成员tinyId |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "tiny_id": 123456,
+ "nickname": "***",
+ "avatar_url": "https://qqchannel-profile-1251316161.file.myqcloud.com/***",
+ "join_time": 1606878500,
+ "roles": [
+ {
+ "role_id": "4",
+ "role_name": "频道主",
+ "color": 4294917938,
+ "permission": [
+ {
+ "root_id": 10000,
+ "child_ids": [10001, 10002, 10003, 10004, 10005]
+ },
+ {
+ "root_id": 20000,
+ "child_ids": [
+ 20001, 20002, 20003, 20004, 20005, 20006, 20007, 20008, 20009, 20010, 20011, 20012,
+ 20013, 20014, 20015, 20018, 20019
+ ]
+ },
+ {
+ "root_id": 30000,
+ "child_ids": [30001, 30002, 30003, 30004, 30005, 30006, 30007, 90002]
+ },
+ {
+ "root_id": 40000,
+ "child_ids": [40001, 40002]
+ },
+ {
+ "root_id": 50000,
+ "child_ids": [50001]
+ },
+ {
+ "root_id": 60000,
+ "child_ids": [60001]
+ },
+ {
+ "root_id": 70000,
+ "child_ids": [70001, 70002, 70003, 70004, 70005, 70006, 70007]
+ },
+ {
+ "root_id": 80000,
+ "child_ids": [80001, 80002]
+ },
+ {
+ "root_id": 90000,
+ "child_ids": [90001, 30003]
+ },
+ {
+ "root_id": 100000,
+ "child_ids": [100001, 100002]
+ },
+ {
+ "root_id": 1,
+ "child_ids": [1001, 1002, 1003, 1004, 1005]
+ },
+ {
+ "root_id": 2,
+ "child_ids": [
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014,
+ 2015, 2016, 2017, 2018
+ ]
+ },
+ {
+ "root_id": 3,
+ "child_ids": [3001, 3002, 3003, 3004, 3005, 3006]
+ },
+ {
+ "root_id": 4,
+ "child_ids": [4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008]
+ },
+ {
+ "root_id": 5,
+ "child_ids": [5001]
+ },
+ {
+ "root_id": 6,
+ "child_ids": [6001, 6002, 6003]
+ }
+ ],
+ "type": 0,
+ "display_name": "频道主"
+ },
+ {
+ "role_id": "15",
+ "role_name": "15活跃值",
+ "color": 4278190080,
+ "permission": [],
+ "type": 100,
+ "display_name": ""
+ }
+ ]
+ },
+ "echo": 111
+}
+
发送频道内信息,需要单独的API哦,不要使用/send_message
去发频道消息,发不出去的~~
/send_guild_channel_msg
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
channel_id | uint64 | 子频道ID |
message | string or Message | 消息体,可为消息段或者CQ码 |
auto_escape | bool | 是否解析CQ码,true 为不解析,默认false |
retry_cnt | int32 | 消息发送失败,最大重试次数,默认3 |
recall_duration | int64 | 自动撤回间隔(毫秒),默认不撤回 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "message_id": 1933593189,
+ "time": 1706909190
+ },
+ "echo": 111
+}
+
该API接口已经被遗弃!
新的获取帖子广场的帖子哦!
/get_guild_feeds
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
from | uint32 | 开始获取的位置 |
该请求携带了大量原生响应数据,无法详细介绍,请自行测试!
获取身份组列表,包括隐藏的身份组哦~~
/get_guild_roles
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "roles": [
+ {
+ "argb_color": 4286151052,
+ "disabled": false,
+ "independent": false,
+ "max_count": 1000,
+ "member_count": 0,
+ "owned": false,
+ "role_id": 1,
+ "role_name": "普通成员",
+ "permission": []
+ }
+ ]
+ },
+ "echo": 111
+}
+
该接口不会实现,因为您可以调用/get_msg
来获取来自频道的消息,无需实现一个专属的接口。
删除一个身份组,首先,你得保证你有权限,因为这个API不会提供任何返回数据哦!
/delete_guild_role
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
role_id | uint64 | 角色ID |
该 API 无响应数据
设置用户身份组。
/set_guild_member_role
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
role_id | uint64 | 角色ID |
set | bool | 设置还是移除,默认false |
users | string or vector<int64> | 批量设置用户s |
user_id | int64 | 单独设置某个用户的身份 |
如果users是字符串那么其格式为
123456,6656656526,2652656
,以逗号分隔每个tinyId
。
修改频道角色,暂不支持设置权限,如有需要请提交issue
。
/update_guild_role
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
role_id | uint64 | 角色ID |
name | string | 名称 |
color | int64 | 颜色ARGB |
该 API 无响应数据
创建频道身份组。
/create_guild_role
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
name | string | 名称 |
color | int64 | 颜色ARGB |
initial_users | vector<int64> | 默认身份组成员 |
如果是
HTTP
请求,则initial_users
使用字符串,以,
为用户tiny_id
分隔。
字段 | 类型 | 说明 |
---|---|---|
role_id | uint64 | 角色ID |
注意
对于 Shamrock 尚未实现的 API,会在标题添加标记 未实现
该接口用于发送私聊消息。
/send_private_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
user_id | int64 | 是 | QQ 号 |
message | string / object / array | 是 | 消息内容 |
auto_escape | bool | 否 | 是否解析 CQ 码(true为不解析)。 |
recall_duration | int64 | 否 | 自动撤回时间间隔(毫秒) |
message格式可为消息段object,或消息段组合array
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息 ID |
time | int64 | 时间戳 |
该接口用于发送群聊消息。
/send_group_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
message | string / object / array | 是 | 消息内容 |
auto_escape | bool | 否 | 是否解析 CQ 码(true为不解析)。 |
recall_duration | int64 | 否 | 自动撤回时间间隔(毫秒) |
message格式同/send_private_msg
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息 ID |
time | int64 | 时间戳 |
该接口用于发送消息。
/send_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
message_type | string | 是 | 消息类型 |
user_id | int64 | 是 | QQ 号 |
group_id | int64 | 是 | 群号 |
discuss_id | int64 | 是 | 讨论组号 |
message | string / object / array | 是 | 消息内容 |
auto_escape | bool | 否 | 是否解析 CQ 码(true为不解析)。 |
recall_duration | int64 | 否 | 自动撤回时间间隔(毫秒) |
message格式同/send_private_msg
注意
当前发送消息的 API 暂不支持发送讨论组消息。
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息 ID |
time | int64 | 时间戳 |
/get_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
message_id | int32 | 是 | 消息 ID |
字段 | 类型 | 说明 |
---|---|---|
time | int64 | 时间戳 |
message_type | string | 消息类型 |
message_id | int32 | 消息 ID |
real_id | int32 | 真实 ID |
sender | Object<Sender> | 发送人信息 |
message | object | 消息体 |
group_id | int64 | 群号 |
target_id | int64 | 消息目标(私聊) |
peer_id | int64 | 消息接收者,群聊是群号,私聊时是目标QQ |
peer_id
是其他同类框架所表达的target_id
!
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
nickname | string | 昵称 |
sex | string | 性别 |
age | int32 | 年龄 |
uid | string | UID |
该接口用于撤回消息。
/delete_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
message_id | int32 | 是 | 消息 ID |
该接口将返回处理结果,其中 data
字段无数据。。
/get_history_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
message_type | string | 是 | 消息 类型 |
user_id | int64 | 否 | 私聊QQ |
group_id | int64 | 否 | 群号 |
count | int32 | 否 | 获取的消息数量(默认为20) |
message_seq | int32 | 否 | 起始消息的message_id(默认为0,表示从最后一条发言往前) |
字段 | 类型 | 说明 |
---|---|---|
messages | Message[] | 消息集 |
字段 | 类型 | 说明 |
---|---|---|
time | int64 | 时间戳 |
message_type | string | 消息类型 |
message_id | int32 | 消息 ID |
real_id | int32 | 真实 ID |
sender | Object<Sender> | 发送人信息 |
message | object | 消息体 |
group_id | int64 | 群号 |
target_id | int64 | 消息目标(私聊) |
peer_id | int64 | 消息接收者,群聊是群号,私聊时是目标QQ |
peer_id
是其他同类框架所表达的target_id
!
/get_group_msg_history
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
count | int32 | 否 | 获取的消息数量(默认为20) |
message_seq | int32 | 否 | 起始消息的message_id(默认为0,表示从最后一条发言往前) |
字段 | 类型 | 说明 |
---|---|---|
messages | Message[] | 消息集 |
该接口用于清除本地消息缓存。
/clear_msgs
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
message_type | string | 是 | 消息 类型 |
user_id | int64 | 否 | 私聊QQ |
group_id | int64 | 否 | 群号 |
该接口将返回处理结果,其中 data
字段无数据。
获取合并转发内容
/get_forward_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string | 是 | 消息资源ID(卡片消息里面的resId) |
由于QQ内部错误,该接口可能导致闪退等问题的出现!一般是闪退一次后再次重新启动便不再闪退,但是可能无法获取合并转发的内容!
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "messages": [
+ {
+ "time": 1699375697,
+ "message_type": "private",
+ "message_id": 123456,
+ "real_id": 0,
+ "sender": {
+ "user_id": 114514,
+ "nickname": "伏秋洛~",
+ "sex": "unknown",
+ "age": 0,
+ "uid": "u_xxxx"
+ },
+ "message": [
+ {
+ "type": "text",
+ "data": {
+ "text": "aaaaaaaaaa"
+ }
+ }
+ ],
+ "peer_id": 114514,
+ "target_id": 114514
+ }
+ ]
+ },
+ "echo": ""
+}
+
发送群聊合并转发。
/send_group_forward_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 发送到的目标群号 |
messages | foward message[] | 合并转发消息集 |
由于QQ限制,该接口的响应结果暂不具备意义,其中:message_id不匹配、forward_id为空。
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息 ID |
forward_id | int32 | 转发 ID |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "message_id": 251425915,
+ "forward_id": ""
+ }
+}
+
直接引用消息的合并转发,id为消息id
:
[
+ {
+ "type": "node",
+ "data": {
+ "id": "123"
+ }
+ },
+ {
+ "type": "node",
+ "data": {
+ "id": "456"
+ }
+ }
+]
+
注意
Shamrock 不同于 go-cqhttp
,消息节点无法自定义发送者QQ号(设置头像)与昵称。
自定义消息合并转发:
[
+ {
+ "type": "node",
+ "data": {
+ "content": [
+ {
+ "type": "text",
+ "data": {
+ "text": "测试消息1"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "node",
+ "data": {
+ "content": "[CQ:image,file=xxxxx]测试消息2"
+ }
+ }
+]
+
引用自定义混合合并转发:
[
+ {
+ "type": "node",
+ "data": {
+ "content": "我是自定义消息"
+ }
+ },
+ {
+ "type": "node",
+ "data": {
+ "id": "123"
+ }
+ }
+]
+
发送私聊合并转发。
/send_private_forward_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
user_id | int64 | 是 | 发送到的目标QQ |
messages | foward message[] | 合并转发消息集 |
/get_weather_city_code
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
city | string | 是 | 城市 |
[
+ {
+ "adcode": 10000,
+ "province": "广西",
+ "city": "柳州"
+ }
+]
+
该接口用于获取天气,该接口调用来自QQ官方服务。
/get_weather
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
code | string | 是 | ADCode |
city | string | 否 | 城市 |
{
+ "weatherInfo": {
+ "all_astro": [],
+ "lifeindex_forecast_list": [],
+ "weekly_astro": [],
+ "ret": 0,
+ "weather_info": {
+ "temper": "16",
+ "air_humidity": "98",
+ "wind_power": "微风",
+ "wind_direct": "西南风",
+ "weather": "多云",
+ "pubtime": "01:40",
+ "updatetime": 1695664205,
+ "weather_type": "多云",
+ "weather_type_id": "202",
+ "type_id_new": 2,
+ "concrete_type": 2,
+ "sunrise": "06:05",
+ "sunset": "18:06"
+ },
+ "air_info": null,
+ "forecast_list": {
+ "weatherForecast": [
+ {
+ "day_weather": "阴",
+ "night_weather": "多云",
+ "day_temper": "22",
+ "night_temper": "15",
+ "day_wind_direct": "西南风",
+ "night_wind_direct": "变向风",
+ "day_wind_power": "微风",
+ "night_wind_power": "微风",
+ "sunrise_time": "06:05",
+ "sunset_time": "18:06",
+ "pubtime": "202309251800",
+ "day": 0,
+ "day_weather_type": "阴天",
+ "night_weather_type": "多云",
+ "day_weather_type_id": "203",
+ "night_weather_type_id": "202",
+ "day_type_id_new": 3,
+ "day_concrete_type": 3,
+ "night_type_id_new": 2,
+ "night_concrete_type": 2,
+ "pm": "82",
+ "wind_power_desc": ""
+ },
+ ...
+ ],
+ "updatetime": 1695664205,
+ "tomorrowPrompt": "",
+ "weeklyPrompt": ""
+ },
+ "forecast": {
+ "day_weather": "多云",
+ "night_weather": "晴",
+ "day_temper": "24",
+ "night_temper": "16",
+ "day_wind_direct": "变向风",
+ "night_wind_direct": "变向风",
+ "day_wind_power": "微风",
+ "night_wind_power": "微风",
+ "sunrise_time": "06:06",
+ "sunset_time": "18:04",
+ "pubtime": "202309251800",
+ "day": 1,
+ "day_weather_type": "多云",
+ "night_weather_type": "晴",
+ "day_weather_type_id": "202",
+ "night_weather_type_id": "201",
+ "day_type_id_new": 2,
+ "day_concrete_type": 2,
+ "night_type_id_new": 1,
+ "night_concrete_type": 1,
+ "pm": "146",
+ "wind_power_desc": ""
+ },
+ "hourinfo_list": null,
+ "almanac": "",
+ "warning_list": {
+ "lst_warning": [],
+ "last_proc_time": 0
+ },
+ "astro": null,
+ "city": "北京",
+ "area": "",
+ "adcode": 110000,
+ "area_id": 101010100,
+ "en_name": "Beijing",
+ "update_time": 1695664205,
+ "tips_list": null,
+ "lifeindex_list": null,
+ "current_time": 1695664515,
+ "user_weekly_astro": null,
+ "weekly_summary": null
+ },
+ "qrcode": "data:image/png;base64,...",
+ "poster": "",
+ "share": {
+ "data": {
+ "app": "com.tencent.weather.share",
+ "config": {
+ "autosize": 0,
+ "ctime": 1695664515,
+ "forward": 0,
+ "round": 0,
+ "token": "49441099828d62f0ded8112849bce839"
+ },
+ "desc": "",
+ "meta": {
+ "share": {
+ "adcode": 110000,
+ "air_info": null,
+ "area": "",
+ "city": "北京",
+ "current_time": 1695664515,
+ "forecast_list": {
+ "tomorrowPrompt": "",
+ "updatetime": 1695664205,
+ "weatherForecast": [
+ {
+ "day": 0,
+ "day_concrete_type": 3,
+ "day_temper": "22",
+ "day_type_id_new": 3,
+ "day_weather": "阴",
+ "day_weather_type": "阴天",
+ "day_weather_type_id": "203",
+ "day_wind_direct": "西南风",
+ "day_wind_power": "微风",
+ "night_concrete_type": 2,
+ "night_temper": "15",
+ "night_type_id_new": 2,
+ "night_weather": "多云",
+ "night_weather_type": "多云",
+ "night_weather_type_id": "202",
+ "night_wind_direct": "变向风",
+ "night_wind_power": "微风",
+ "pm": "82",
+ "pubtime": "202309251800",
+ "sunrise_time": "06:05",
+ "sunset_time": "18:06",
+ "wind_power_desc": ""
+ },
+ ...
+ ],
+ "weeklyPrompt": ""
+ },
+ "update_time": 1695664205,
+ "weather_info": {
+ "air_humidity": "98",
+ "concrete_type": 2,
+ "pubtime": "01:40",
+ "sunrise": "06:05",
+ "sunset": "18:06",
+ "temper": "16",
+ "type_id_new": 2,
+ "updatetime": 1695664205,
+ "weather": "多云",
+ "weather_type": "多云",
+ "weather_type_id": "202",
+ "wind_direct": "西南风",
+ "wind_power": "微风"
+ }
+ }
+ },
+ "prompt": "[分享]北京 多云 16°",
+ "ver": "1.0.0.1",
+ "view": "share"
+ },
+ "code": 0
+ }
+}
+
该接口用于上传群聊图片, 注意该接口是上传群消息的图片,不是群文件,也不是群相册。
/upload_group_image
POST
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
pic | string | 是 | 图片base64 |
sender | int64 | 是 | |
troop | int64 | 是 | 图片发送到的群聊 |
get_cookies
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
domain | string | 否 | 域名 |
字段 | 类型 | 说明 |
---|---|---|
cookies | string | 指定域名下的 Cookie |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "cookies": "uin=o1234567890; skey=***; p_uin=o1234567890; p_skey=; pt4_token="
+ },
+ "echo": ""
+}
+
get_csrf_token
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
domain | string | 否 | 域名 |
字段 | 类型 | 说明 |
---|---|---|
token | string | 指定域名下的 CSRF 令牌 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "token": "***"
+ },
+ "echo": ""
+}
+
get_cookies
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
domain | string | 否 | 域名 |
字段 | 类型 | 说明 |
---|---|---|
cookies | string | 指定域名下的 Cookie |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "cookies": "uin=o1234567890; skey=***; p_uin=o1234567890; p_skey=; pt4_token="
+ },
+ "echo": ""
+}
+
get_credentials
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
domain | string | 否 | 域名 |
字段 | 类型 | 说明 |
---|---|---|
cookies | string | 指定域名下的 Cookie |
token | string | 指定域名下的 CSRF 令牌 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "token": "***",
+ "cookies": "uin=o1234567890; skey=***; p_uin=o1234567890; p_skey=***; pt4_token=***"
+ },
+ "echo": ""
+}
+
提示
Shamrock 为您提供了一个支持 OneBot 标准的 HTTP API。
您可以通过发送 HTTP 请求来与 Shamrock 进行交互。
提示
Shamrock 目前支持 GET 和 POST 两种请求方式。
在大部分情况下,您可以使用 GET 请求来与 Shamrock 进行交互。
但是,如果您需要向 Shamrock 发送大量数据,或者需要向 Shamrock 发送二进制数据,您需要使用 POST 请求。
GET 请求的 URL 由以下部分组成:
http://<host>:<port>/<endpoint>?<params>
+
链接中的含义如下:
<host>
:Shamrock 的 IP 地址或域名<port>
:Shamrock 的 HTTP API 端口<endpoint>
:Shamrock 的 HTTP API 端点<params>
:HTTP GET 请求的参数POST 请求的 URL 由以下部分组成:
http://<host>:<port>/<endpoint>
+
链接中的含义如下:
<host>
:Shamrock 的 IP 地址或域名<port>
:Shamrock 的 HTTP API 端口<endpoint>
:Shamrock 的 HTTP API 端点POST 请求的数据格式为 JSON
{
+ "param1": "value1",
+ "param2": "value2",
+ ...
+}
+
POST 请求的数据格式为表单
param1=value1¶m2=value2&...
+
大多数情况下,推荐使用 JSON 格式的 POST 请求。
Shamrock 支持使用 WebSocket 进行通信。
可选的 WebSocket 地址有两种:
ws://<host>:<port>
ws://<host>:<port>/api
区别在于,/
除了发送和响应 API 请求外,还支持事件上报功能。
Shamrock 使用 WebSocket 时,请求的数据格式为 JSON
{
+ "action": "send_private_msg", // 请求 API 端点
+ "params": {
+ // 请求参数
+ "user_id": 10000,
+ "message": "hello"
+ },
+ "echo": "123456" // 自定义的回显字段
+}
+
对于 echo
字段,Shamrock 会在响应中原样返回。
Shamrock 的响应格式为 JSON
{
+ "status": "ok", // 状态,ok 为成功,其他将在下文中详细说明
+ "retcode": 0, // 返回码,0 为成功,非 0 为失败
+ "msg": "", // 错误信息,仅在 API 调用失败时出现
+ "wording": "", // 对错误信息的描述,仅在 API 调用失败时出现
+ "data": {
+ // 响应数据
+ "message_id": 123456
+ },
+ "echo": "123456" // 请求中的回显字段
+}
+
Shamrock 的响应状态有以下几种:
ok
:成功failed
:失败注意
对于 Shamrock 尚未实现的 API,会在标题添加标记 未实现
该接口用于获取图片,只能获取已缓存的图片。
/get_image
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
file | string | 是 | 文件 MD5 |
字段 | 类型 | 说明 |
---|---|---|
size | int64 | 文件大小 |
url | string | 文件 URL |
filename | string | 文件 名称 |
该接口用于检查是否可以发送图片。
/can_send_image
提示
该 API 无需参数
字段名 | 数据类型 | 说明 |
---|---|---|
yes | boolean | 是或否 |
该接口用于图片 OCR。
/ocr_image
字段 | 类型 | 说明 |
---|---|---|
image | string | 图片ID |
字段 | 类型 | 说明 |
---|---|---|
texts | List<TextDetection> | OCR结果 |
language | string | 语言 |
字段 | 类型 | 说明 |
---|---|---|
text | string | 文本 |
confidence | int32 | 置信度 |
coordinates | vector2[] | 二维数组表示的坐标 |
该接口用于获取语音。
/get_record
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
file | string | 是 | 文件 MD5 |
out_format | string | 是 | 输出格式 |
字段 | 类型 | 说明 |
---|---|---|
file | string | 文件路径 |
url | string | 文件 URL |
该接口用于检查是否可以发送语音。
/can_send_record
提示
该 API 无需参数
字段名 | 数据类型 | 说明 |
---|---|---|
yes | boolean | 是或否 |
/get_record
提示
要使用此接口, 通常需要安装 ffmpeg, 请参考 OneBot 实现的相关说明。
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
file | string | - | 收到的语音文件名(消息段的 file 参数), 如 0B38145AA44505000B38145AA4450500.silk |
out_format | string | - | 要转换到的格式, 目前支持 mp3 、amr 、wma 、m4a 、spx 、ogg 、wav 、flac |
字段名 | 数据类型 | 说明 |
---|---|---|
file | string | 转换后的语音文件路径, 如 /home/somebody/cqhttp/data/record/0B38145AA44505000B38145AA4450500.mp3 |
该接口用于获取文件。
该接口用于获取视频。
该接口用于获取缩略图。
某个账号因为某种原因寄了,允许切换备用能源!
/switch_account
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
user_id | int64 | 是 |
是否正常执行切换账号请求的响应。
/upload_file
注意
该接口仅仅为HTTP POST提供,WebSocket请使用另外一个。
以file格式上传文件,不要使用binary。
{
+ "file": "/scard/Android/data/com.tencent.mobileqq/Tencent/Shamrock/xxxx"
+}
+
/upload_file_to_shamrock
注意
该接口仅仅为WebSocket提供。
名称 | 类型 | 作用 |
---|---|---|
md5 | string | 文件hex格式 的md5值,32长度的字符串,整个文件的md5 |
offset | uint64 | 文件分段上传偏移,默认值为0,从头上传 |
chunk | string | 文件分段上传数据块(base64),无需开头base64:// |
file_size | uint64 | 总文件大小 |
名称 | 类型 | 作用 |
---|---|---|
file_size | uint64 | 总文件大小 |
finish | bool | 是否完成上传 |
path | string | 该文件在安卓系统(shamrock环境)的路径 |
用法二选一:
1.仅发送url,由Shamrock自己访问该url来下载文件
2.仅发送文件base64,Shamrock解码后直接转存为文件
url和base64至少一个不能为空
同时发送url和base64时,使用url
/download_file
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
url | string | 否 | 下载地址 | |
name | string | 否 | 文件名称 | 文件md5 |
root | string | 否 | 保存文件的根目录,注意请确保QQ可以访问 | Shamrock缓存目录 |
base64 | string | 否 | 文件base64内容 | |
thread_cnt | int32 | 否 | 下载的线程数量 | |
headers | string or array | 否 | 请求头 |
"headers": "User-Agent=YOUR_UA[\r\n]Referer=https://www.baidu.com"
+
"headers": [
+ "User-Agent=YOUR_UA",
+ "Referer=https://www.baidu.com"
+]
+
[\r\n]
为换行符, 使用http请求时请注意编码
{
+ "file": "/scard/Android/data/com.tencent.mobileqq/Tencent/Shamrock/xxxx"
+}
+
通过这个API下载的文件能直接放入CQ码作为图片发送
调用后会阻塞直到下载完成后才会返回数据,请注意下载大文件时的超时
clean_cache
该接口没有参数
{
+ "status": "ok",
+ "retcode": 0
+}
+
/get_device_battery
{
+ "battery": 44,
+ "scale": 3102000,
+ "status": 2
+}
+
/get_start_time
POST
| GET
| 不支持WS
{
+ "status": "ok",
+ "retcode": 0,
+ "data": 1696749716155
+}
+
/log
POST
| GET
| 不支持WS
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
start | int32 | 否 | 开始的行 | |
recent | bool | 否 | 是否只显示最近的日志 | false |
该接口默认关闭,需要在实验室设置手动打开!注意,该接口可能导致您的隐私数据泄露,请勿公开在未知的网络,或者泄露您的token。
POST
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
cmd | array 或 string | 是 | 命令内容 | |
dir | string | 是 | 当前所处的目录 |
/shut
POST
| GET
| 不支持WS
无响应
/get_supported_actions
{ "status": "ok", "retcode": 0, "data": [ "set_group_ban", "clean_cache", "clear_msgs", "create_group_file_folder", "delete_essence_message", "delete_essence_msg", "delete_group_file", "delete_group_folder", "delete_msg", "delete_message", "download_file", "fav.add_image_msg", "fav.add_text_msg", "fav.get_item_content", "fav.get_item_list", "get_csrf_token", "get_cookie", "get_cookies", "get_credentials", "get_device_battery", "get_essence_message_list", "get_essence_msg_list", "get_forward_msg", "get_friend_list", "get_friend_system_msg", "get_group_file_system_info", "get_group_file_url", "get_group_msg_history", "get_group_notice", "_get_group_notice", "get_group_at_all_remain", "get_group_root_files", "get_group_files_by_folder", "get_group_system_msg", "get_guild_list", "get_guild_service_profile", "get_history_msg", "get_http_cookies", "get_image", "get_latest_events", "get_login_info", "get_model_show", "_get_model_show", "get_msg", "get_message", "get_not_joined_group_info", "_get_online_clients", "get_profile_card", "get_user_info", "get_prohibited_member_list", "get_record", "get_self_info", "status", "get_status", "_get_stranger_info", "get_stranger_info", "get_supported_actions", "get_troop_honor_info", "get_group_honor_info", "get_group_info", "get_group_list", "get_group_member_info", "get_group_member_list", "get_uid", "get_uin_by_uid", "get_version", "get_version_info", "get_weather", "get_weather_city_code", "poke", "is_blacklist_uin", "kick_group_member", "set_group_kick", "set_group_leave", "leave_group", "set_group_card", "set_group_name", ".handle_quick_operation_async", "rename_group_folder", "restart_me", "sanc_qrcode", "send_forward_msg", "send_group_forward_msg", "send_group_msg", "send_group_message", "send_group_announcement", "send_group_notice", "send_group_sign", "send_like", "send_message", "send_msg", "send_private_forward_msg", "send_private_message", "send_private_msg", "set_essence_message", "set_essence_msg", "set_friend_add_request", "set_group_add_request", "set_group_admin", "set_group_comment_face", "set_group_special_title", "set_group_whole_ban", "_set_model_show", "set_qq_profile", "switch_account", "test", "upload_group_file", "upload_private_file" ], "echo": "" }
注意
对于 Shamrock 尚未实现的 API,会在标题添加标记 未实现
该接口用于删除好友。
/delete_friend
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
user_id | int64 | - | 好友 QQ 号 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于删除单向好友。
/delete_unidirectional_friend
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 单向好友QQ号 |
该接口将返回处理结果,其中 data
字段无数据。
send_like
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
time | int32 | 是 | 点赞次数 |
user_id | int64 | 是 | 点赞的目标用户 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于获取 QQ 用户的登录号信息。
/get_login_info
提示
该接口无输入参数。
该接口用于设置 QQ 用户的个人资料信息。
/set_qq_profile
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
nickname | string | 是 | 昵称 |
company | string | 是 | 公司 |
string | 是 | 邮箱 | |
college | string | 是 | 大学 |
personal_note | string | 是 | 个人备注 |
age | int32 | 否 | 年龄 |
birthday | string | 否 | 生日(格式:YYYY-MM-DD) |
该接口将返回基本的 json 。
该接口用于获取 QQ 在线机型。
/_get_model_show
字段 | 类型 | 说明 |
---|---|---|
model_show | string | 机型名称 |
need_pay | bool | 是否需要付费 |
该接口用于设置 QQ 在线机型。
/_set_model_show
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
model | string | 是 | 机型 |
manu | string | 是 | 厂商 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于获取当前账号在线客户端列表。
/get_online_clients
字段 | 类型 | 说明 |
---|---|---|
no_cache | bool | 是否无视缓存 |
字段 | 类型 | 说明 |
---|---|---|
clients | Object<Device> | 在线客户端列表 |
字段 | 类型 | 说明 |
---|---|---|
app_id | int64 | 客户端ID |
device_name | string | 设备名称 |
device_kind | string | 设备类型 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | string | ✓ | ✓ | 是 | 合并转发resid |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int64 or string | ✓ | ✓ | 是 | 消息ID |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
data | string | ✓ | ✓ | 是 | JSON 数据 |
提示
Shamrock
提供了一个图形化的配置界面,可进行简单的配置操作。
大部分配置简单易于理解,我们仅仅介绍部分难于理解的配置选项。
让 QQ 客户端
识别设备为平板,使其账号可在安卓和平板同时在线。
提示
除了 WebSocket
相关功能,其他功能的配置进行修改立即生效,无需重新启动 QQ
。 不建议使用 CQ 码
,因为在新一代机器人设计理念中,该操作过于落后,可能会出现许多问题。
注意
被动 WebSocket
在断线之后,每隔 5
秒尝试重新连接。
/storage/emulated/0
或 /sdcard
QQ
主目录: 内部存储目录 + /Android/data/com.tencent.mobileqq
Shamrock
主目录: QQ主目录 + /Tencent/Shamrock
将下方 JSON
文件创建在 Shamrock 主目录 + /config.json
请确保 JSON
格式正确。
{
+ rules: {
+ group_rule: {
+ black_list: [12345678], // 如果群号是\`12345678\`就跳过了哦!
+ white_list: []
+ },
+ private_rule: {
+ black_list: [12345678],
+ white_list: []
+ }
+ },
+ default_token: null,
+ active_websocket: {
+ port: 5800, // 主动WS监听的端口
+ token: 'aaaa1111,bbbb1111', // 同时允许两个token可使用|或,作为分割
+ tokens: ['aaaa1111', 'aaaa2222'], // 使用tokens实现多token,优先级比上面那个高
+ heartbeat_interval: 15000 // 设置为null则默认15000毫秒作为心跳间隔,0则为无心跳
+ },
+ passive_websocket: [
+ {
+ address: 'ws://xxxxxxxxx' // 这里是个例子,如果默认tk存在则使用默认token鉴权
+ },
+ {
+ address: 'ws://aaaaaaaaa',
+ token: 'aaa666', // 提供了特例化token,将不使用默认token
+ heartbeat_interval: 15000 // 设置为null则默认15000毫秒作为心跳间隔,0则为无心跳
+ }
+ ],
+ 'allow-temp-session': false // 是否允许临时消息
+}
+
参数名称 | 类型 | 作用 | 例子 |
---|---|---|---|
default_token | string | 默认 token ,HTTP接口/主被动WS 如果未单独定义 token ,则使用默认 token | aaa123456 |
记得把注释删掉哦?JSON5貌似也没有完全支持呢?该配置文件采用Json5标准!
在 HTTP Upgrade
请求头中添加 access_token
或 ticket
或 Authorization
头
例:
GET / HTTP/1.1
+Host: 192.168.3.4
+Upgrade: websocket
+Connection: upgrade
+Sec-WebSocket-Key: wwwwwwwwwwwwwwwwwwwwww==
+Sec-WebSocket-Version: 13
+Authorization: aaaa1111
+
大部分 Shamrock
的数据/缓存保存在 Shamrock 主目录
其中的日志可作为 Issue
内容,截取部分提交。
.
+├── tmpfiles # 临时文件目录
+│ ├── logs # 日志目录
+│ │ └── xxx.log # 日志文件
+├── config.json # 配置文件
+
该接口用于获取陌生人的信息。
/get_stranger_info
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
user_id | int64 | 是 | QQ 号 |
注意
该 API 可能会返回不存在于以下表格中的字段,请不要作为参考使用。
该接口用于获取好友列表。
/get_friend_list
提示
该接口无输入参数,除 refresh
参数决定是否刷新数据。可能不是立即生效。
该接口返回的 data
数据为数组,每个元素为一个好友的信息,具体如下。
该接口用于获取单向好友列表。
/get_unidirectional_friend_list
提示
该 API 无需参数
响应内容为 json 数组, 每个元素如下:
字段名 | 数据类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
nickname | string | 昵称 |
source | string | 来源 |
该接口用于获取群信息。
/get_group_info
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
注意
该 API 可能会返回不存在于以下表格中的字段,请不要作为参考使用。
该接口用于获取群列表。
/get_group_list
提示
该 API 无需参数
该接口返回的 data
数据为数组,每个元素为一个群的信息,具体如下。
该接口用于获取群成员信息。
/get_group_member_info
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
该接口用于获取群成员列表。
/get_group_member_list
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
该接口返回的 data
数据为数组,每个元素为一个群成员的信息,具体如下。
该接口用于获取群荣誉信息。
/get_group_honor_info
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
current_talkative | List<HonorInfo> | 当前龙王 |
talkative_list | List<HonorInfo> | 历史龙王 |
performer_list | List<HonorInfo> | 群聊之火 |
legend_list | List<HonorInfo> | 群聊炽焰 |
strong_newbie_list | List<HonorInfo> | 冒尖小春笋 |
emotion_list | List<HonorInfo> | 快乐之源 |
all | List<HonorInfo> | 全部荣誉 |
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
nickname | string | 昵称 |
avatar | string | 头像链接 |
day_count | int32 | 持续天数 |
id | int32 | ID |
description | string | 描述 |
该接口用于获取群系统消息。
/get_group_system_msg
字段 | 类型 | 说明 |
---|---|---|
invited_requests | List<InvitedRequest> | 邀请消息列表 |
join_requests | List<JoinRequest> | 进群消息列表 |
注意
如果列表不存在任何消息, 将返回 null
字段 | 类型 | 说明 |
---|---|---|
request_id | int64 | 请求ID |
invitor_uin | int64 | 邀请者 |
invitor_nick | string | 邀请者昵称 |
group_id | int64 | 群号 |
group_name | string | 群名 |
checked | bool | 是否已被处理 |
actor | int64 | 处理者, 未处理为0 |
requester_uin | int64 | 被邀请者ID |
flag | string | flag,用于处理请求 |
字段 | 类型 | 说明 |
---|---|---|
request_id | int64 | 请求ID |
requester_uin | int64 | 请求者ID |
requester_nick | string | 请求者昵称 |
message | string | 验证消息 |
group_id | int64 | 群号 |
group_name | string | 群名 |
checked | bool | 是否已被处理 |
actor | int64 | 处理者, 未处理为0 |
flag | string | flag,用于处理请求 |
该接口用于获取好友系统消息。
/get_friend_system_msg
该接口返回的 data
数据为数组,每个元素为一个好友请求的系统信息,具体如下。
该接口用于获取精华消息列表。
/get_essence_msg_list
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
响应内容为 JSON 数组,每个元素如下:
字段名 | 数据类型 | 说明 |
---|---|---|
sender_id | int64 | 发送者QQ 号 |
sender_nick | string | 发送者昵称 |
sender_time | int64 | 消息发送时间 |
operator_id | int64 | 操作者QQ 号 |
operator_nick | string | 操作者昵称 |
operator_time | int64 | 精华设置时间 |
message_id | int32 | 消息ID,可能为0表示找不到消息映射 |
message_seq | int32 | 消息seq |
获取好友/陌生人是否处于黑名单列表。
/is_blacklist_uin
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
user_id | int64 | 是 | QQ账号 |
字段 | 类型 | 说明 |
---|---|---|
is | bool | 是否是黑名单 |
该接口用于处理加好友请求。
/set_friend_add_request
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
flag | string | - | 加好友请求的 flag(需从上报的数据中获得) |
approve | boolean | true | 是否同意请求 |
remark | string | 空 | 添加后的好友备注(仅在同意时有效) |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于处理加群请求/邀请。
/set_group_add_request
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
flag | string | - | 加群请求的 flag(需从上报的数据中获得) |
sub_type 或 type | string | - | add 或 invite , 请求类型(需要和上报消息中的 sub_type 字段相符) |
approve | boolean | true | 是否同意请求/邀请 |
reason | string | 空 | 拒绝理由(仅在拒绝时有效) |
该接口将返回处理结果,其中 data
字段无数据。
8.9.68
,8.9.70
,8.9.73
,8.9.75
,8.9.78
,8.9.80
,8.9.81
,8.9.83
, 9.0.15
, 9.0.8
issue
Shamrock
内部已经做了对应处理,无需再进行任何操作。
注意
禁止使用隐藏应用列表等其他方法对 QQ
隐藏 Shamrock
,否则会出现 框架未激活
等异常。
部分模拟器采用的是 NAT
网络,请使用
adb forward xxx
+
将模拟器内的端口监听转发到电脑,别和我说为什么别人的模拟器可以在外面直接访问,你的不行就不行!
执行这个命令前,请注意adb是安卓调试桥工具包内的东西,请确保你的环境中有这个玩意,否则请前往谷歌官网或者刷机论坛之类的地方获取。
Shamrock
的部分配置需要重新启动 QQ
(请确保100%杀死QQ),然后在保证 Shamrock
存活的情况下启动 QQ
, Shamrock
的 WebSocket
相关的所有配置都需要重新启动生效。
注意
如果启用了 实验功能->免死金牌 在更新配置或更新模块后需重启系统,否则更新可能不会生效。
提交 issue
,我们会实现。
勾选 Shamrock
的自动唤醒,或者使用某些框架自带QQ死亡自动唤醒的XP, MAGISK...插件。你要习以为常这个操作,请安装一些软件进行按时重启或者闪退重启,同时QQ有时也会有概率杀死他自己。
断网式:这个操作源自于 MIUI
的 息屏省电
,请保证关闭锁屏后断开数据,这个选项,关闭睡眠模式。
缓慢式:使用某些息屏挂机软件,为 QQ
附加一个息屏挂机状态。安装息屏挂机软件 extinguish
,或者使用 MIUI游戏助手
息屏挂机
。
QQ修复了登录响应超时的问题,经测试(逍遥,夜神,MuMu)模拟器可正常使用,去QQ官网下载最新版本即可。
其次,模拟器部署请使用Shamrock的ALL版本,不要使用WSA(Windows安卓子系统)部署(有兼容问题)。
目前依旧在计划中,主要是不太会 docker
。
不需要,因为 OneBot
服务运行在 QQ
主进程中,无需 Shamrock
主进程运行(当然第一次使用 Shamrock
,请启动 Shamrock
,推送配置要求 Shamrock
和 QQ
都在运行)。
目前允许在中国移动云手机(Magisk
)和红手指云手机(Lspatch
)使用 Shamrock
,其它平台未测试。
Shamrock
的日志文件,按照时间和进程名称,保存在 /sdcard/Android/data/com.tencent.mobileqq/Tencent/Shamrock/log
文件夹内,请查看,提交 issue
时可以使用它们,注意请不要提交超过 50kb
的日志文件。
注意
这里的API处于实验性阶段,不会进行大量维护和更新,由于过于简单,如果需要某些功能可以自行PR!
获取收藏列表
/fav/get_item_list
(HTTP)
fav.get_item_list
(WebSocket)
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
page_size | int32 | 是 | 获取的数量 | |
category | int32 | 是 | 分类 | |
start_pos | int32 | 是 | 开始的位置 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "items": [
+ {
+ "id": "1-1-9dec6664-dcb7-4b46-986f-xxxxxx",
+ "author_type": 2,
+ "author": 2806922524,
+ "author_name": "2806922524",
+ "group_name": "ˢʰᵃᵐʳᵒᶜᵏ",
+ "group_id": 333425833,
+ "client_version": "8.9.12820",
+ "time": 1703004793000
+ }
+ ]
+ },
+ "echo": ""
+}
+
获取收藏内容
/fav/get_item_content
(HTTP)
fav.get_item_content
(WebSocket)
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
id | string | 是 | id |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "content": "在想可不可以在手机上跑bot()"
+ },
+ "echo": ""
+}
+
添加一段文字到QQ收藏
/fav/add_text_msg
(HTTP)
fav.add_text_msg
(WebSocket)
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
content | string | 是 | 内容 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "id": "xxxxxxxx"
+ },
+ "echo": ""
+}
+
添加一个图片到QQ收藏
/fav/add_image_msg
(HTTP)
fav.add_image_msg
(WebSocket)
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
file | string | 是 | 图片base64或者绝对路径或者URL |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "id": "xxxxxxxx"
+ },
+ "echo": ""
+}
+
该接口用于上传私聊文件。
注意
只能上传本地文件, 需要上传 http
文件的话请先下载至本地
/upload_private_file
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 目标 |
file | string | 本地文件路径 或 文件base64 或 文件url |
name | string | 文件名称 |
注意
本地文件路径为绝对路径,文件base64为base64://
开头,文件url则应该是正确的http请求地址。
该接口用于上传群文件。
注意
只能上传本地文件, 需要上传 http
文件的话请先下载至本地
/upload_group_file
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
file | string | 本地文件路径 或 文件base64 或 文件url |
name | string | 文件名称 |
注意
本地文件路径为绝对路径,文件base64为base64://
开头,文件url则应该是正确的http请求地址。
注意
参数 folder
在Shamrock不受支持。
该接口用于删除群文件。
/delete_group_file
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
file_id | string | 文件ID 参考 File 对象 |
busid | int32 | 文件类型 参考 File 对象 |
提示
该 API 无响应数据
该接口用于创建群文件文件夹。
注意
仅能在根目录创建文件夹
/create_group_file_folder
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
name | string | 群文件夹名字 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "folder_id": "/ad86c100-031d-4139-8cab-c6c661a413ba",
+ "parent_folder_id": "/",
+ "folder_name": "测试",
+ "create_time": 1706269735,
+ "modify_time": 1706269735,
+ "creator_uin": 1650114384,
+ "modifier_uin": 1650114384
+ },
+ "message": "成功",
+ "echo": 111
+}
+
把已经存在的群文件夹改个名字。
/rename_group_folder
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
folder_id | string | 群文件夹ID |
name | string | 群文件夹名字 |
可通过返回的状态码判断重命名是否成功。
该接口用于删除群文件文件夹。
/delete_group_folder
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
folder_id | string | 文件夹ID 参考 Folder 对象 |
可通过返回的状态码判断删除是否成功。
该接口用于获取群文件系统信息。
/get_group_file_system_info
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
字段 | 类型 | 说明 |
---|---|---|
file_count | int32 | 文件总数 |
limit_count | int32 | 文件上限 |
used_space | int64 | 已使用空间 |
total_space | int64 | 空间上限 |
该接口用于获取群根目录文件列表。
/get_group_root_files
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
字段 | 类型 | 说明 |
---|---|---|
files | List<File> | 文件列表 |
folders | List<Folder> | 文件夹列表 |
字段 | 类型 | 说明 |
---|---|---|
group_id | int32 | 群号 |
file_id | string | 文件ID |
file_name | string | 文件名 |
busid | int32 | 文件类型 |
file_size | int64 | 文件大小 |
upload_time | int64 | 上传时间 |
dead_time | int64 | 过期时间,永久文件恒为0 |
modify_time | int64 | 最后修改时间 |
download_times | int32 | 下载次数 |
uploader | int64 | 上传者ID |
uploader_name | string | 上传者名字 |
md5 | string | md5 |
sha | string | sha |
sha3 | string | sha3 可能获取不到 |
字段 | 类型 | 说明 |
---|---|---|
group_id | int32 | 群号 |
folder_id | string | 文件夹ID |
folder_name | string | 文件名 |
create_time | int64 | 创建时间 |
creator | int64 | 创建者 |
creator_name | string | 创建者名字 |
total_file_count | int32 | 子文件数量 |
该接口用于获取群子目录文件列表。
/get_group_files_by_folder
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
folder_id | string | 文件夹ID 参考 Folder 对象 |
字段 | 类型 | 说明 |
---|---|---|
files | File[] | 文件列表 |
folders | Folder[] | 文件夹列表 |
该接口用于获取群文件资源链接。
/get_group_file_url
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
file_id | string | 文件ID 参考 File 对象 |
busid | int32 | 文件类型 参考 File 对象 |
字段 | 类型 | 说明 |
---|---|---|
url | string | 文件下载链接 |
提示
在后续的文档中,我们将提供 CQ 码和消息段两种格式的消息示例,以便于您更好地理解。
CQ 码是一种特殊的文本格式,用于在消息中插入表情、图片、音乐、语音、视频、网页等内容。
这是一个 CQ 码的基本格式:
[CQ:action,param1=value1,param2=value2]
+
CQ 码中内容含义如下:
action
:动作,指示要进行的操作,如发送图片、音乐等。param
:对应动作需要的参数,如 qq
、file
等。value
:参数所对应的值,如 AT 的 QQ 号。例如,要 AT 一个 QQ 号为 123456
的用户,可以这样写:
[CQ:at,qq=123456] Hello!
+
他会被解析为:
@小明 Hello!
+
CQ 码由 [
和 ]
并以 ,
分隔的多个部分组成,因此如果要在 CQ 码中使用这些字符,需要进行转义。
原字符 | 转义字符 |
---|---|
& | & |
[ | [ |
] | ] |
, | , |
消息段是新一代的消息格式,采用 JSON 格式。
消息段是一个 JSON 对象,以下是一个消息段的基本格式:
{
+ "type": "text", // 消息段类型
+ "data": {
+ // 消息段数据/参数
+ "text": "Hello!"
+ }
+}
+
例如,要 AT 一个 QQ 号为 123456
的用户,可以这样写:
{
+ "type": "at",
+ "data": {
+ "qq": 123456
+ }
+}
+
他会被解析为:
@小明
+
消息段可以组合在一起,形成一个消息。
[
+ {
+ "type": "at",
+ "data": {
+ "qq": 123456
+ }
+ },
+ {
+ "type": "text",
+ "data": {
+ "text": " Hello!"
+ }
+ }
+]
+
以上消息段会被解析为:
@小明 Hello!
+
所有上报事件都包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
time | int64 | 时间戳 |
self_id | int64 | 机器人QQ |
post_type | string | 上报类型 |
提示
post_type
为 message
或 message_sent
时,数据是一致的。
区别在于 message
是收到的消息,message_sent
是发送的消息。
默认情况下,Shamrock 只会上报 message
类型的消息。
类型 | 说明 |
---|---|
message | 收到消息 |
message_sent | 发送消息 |
notice | 通知 |
request | 请求 |
类型 | 说明 |
---|---|
private | 私聊消息 |
group | 群消息 |
类型 | 说明 |
---|---|
friend | 好友消息 |
normal | 群消息 |
匿名消息 | |
group | 群临时消息 |
group_self | 群消息(自身操作) |
notice | 系统提示 |
类型 | 说明 |
---|---|
group_upload | 群文件上传 |
group_admin | 群管理员变动 |
group_decrease | 群成员减少 |
group_increase | 群成员增加 |
group_ban | 群禁言 |
group_recall | 群消息撤回 |
group_card | 群成员名片变动 |
friend_add | 好友添加 |
friend_recall | 好友撤回 |
offline_file | 接收到离线文件包 |
client_status | 客户端状态 |
essence | 精华消息 |
notify | 系统通知 |
类型 | 说明 |
---|---|
honor | 群荣誉变更 |
poke | 戳一戳 |
lucky_king | 运气王 |
title | 群头衔变更 |
类型 | 说明 |
---|---|
friend | 好友请求 |
group | 群请求 |
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 发送者 QQ 号 |
nickname | string | 发送者昵称 |
如果是群消息,还会包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
card | string | 发送者群名片 |
level | string | 发送者等级 |
role | string | 发送者角色 |
title | string | 发送者头衔 |
如果是频道消息,则会包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
tiny_id | string | 发送者TinyId |
类型 | 来源 |
---|---|
0 | 群聊 |
1 | QQ咨询 |
2 | 查找 |
3 | QQ电影 |
4 | 热聊 |
6 | 验证消息 |
7 | 多人聊天 |
8 | 约会 |
9 | 通讯录 |
注意
Shamrock
的更新会围绕一个稳定的版本,如果盲目升级,可能导致 Shamrock
不可用。Shamrock
仍然处于快速开发阶段,可能会有大量 API
在未来版本中被删除或修改。
请不要过度依赖实验室中的功能,以免造成不必要的损失。
提示
目前推荐您下载 开发版本 的 Shamrock
如果您使用了 QRSpeed/ShamrockNative
有关的插件,请确保 Shamrock
存活。
无论什么情况都请确保 QQ
客户端 存活。
禁止对 QQ
客户端 隐藏 Shamrock
,这将导致无法运行。
首次启动,必须打开 Shamrock
,否则无法推送配置文件导致失败。
在Mumu模拟器、逍遥模拟器......各种模拟器,其中对Shamrock兼容较好的是 Mumu模拟器 ,其它模拟器在测试情况下都出现高版本 QQ
闪退的问题。
注意
Shamrock
必须是 ALL版本
才能在模拟器正常使用
推荐的是 Xposed
的 Lsposed
框架,而不是 EdXposed
,在测试情况下, EdXP
出现了无法注入的问题。
查看 使用LSPatch
这个选择过于多元化,你可以使用 redroid
, docker-android
,需要注意的是部分框架要求开起虚拟化才能使用哦!目前依旧是采用 Lspatch+Shamrock
方案在 docker
部署,因为安装 magisk
类需要修补镜像,难以实现。
查看 使用LSPatch
WSA
拥有自带 Magisk
的版本,但是 QQ
在 WSA
在第二次启动时会闪退,怀疑为热更新问题。
QQ
客户端,登录你的 QQ
账号Shamrock
并在 Xposed
启用 Shamrock
模块,如果使用 LSPosed
则需要勾选模块作用域(默认QQ)Shamrock
并重新启动 QQ 客户端
,如果环境为 Xposed
则需要重启手机Shamrock
会显示已激活(需要成功登陆,才会显示已激活)LSPatch
并在 管理
页面选择 +
新建修补,可以选择从存储目录选择 QQAPK
或者直接使用已经安装过的 QQ
本地模式
,这样方便直接更新 Shamrock
模块而不用重新修补,缺点是需要 LSPatch
保持后台运行开始修补
,修补完成后会提示安装(如果已经安装会提示卸载)Shamrock
模块后在 管理
页面点击修补好的 QQ
选择 模块作用域
勾选上 Shamrock
模块然后保存Shamrock
并 重新启动 QQ 客户端
Shamrock
会显示已激活注意
使用 本地模式
修补后需要保持 LSPatch
在后台运行,优点是模块更新无需重新修补 QQ
使用 集成模式
修补后无需保持 LSPatch
在后台运行,缺点是模块更新后需要重新修补 QQ
注意
在 Android 12 以上的系统中,使用 VirtualXposed
会导致闪退。
注意
暂不支持太极使用,正在申请。
该接口用于设置群名。
/set_group_name
字段名 | 数据类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
group_name | string | 新群名 |
提示
该 API 无响应数据
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于设置群头像。
/set_group_portrait
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
file | string | 图片文件名 |
cache | int | 表示是否使用已缓存的文件 |
[1] file
参数支持以下几种格式:
[2] cache
参数: 通过网络 URL 发送时有效, 1
表示使用缓存, 0
关闭关闭缓存, 默认 为1
该接口用于设置群管理员。
/set_group_admin
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
enable | bool | 是 | 是否设置 |
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于设置群成员名片。
/set_group_card
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
group_id | int64 | - | 群号 |
user_id | int64 | - | 要设置的 QQ 号 |
card | string | 空 | 群名片内容, 不填或空字符串表示删除群名片 |
提示
该 API 无响应数据
该接口用于设置群聊备注。
/set_group_remark
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
group_id | int64 | - | 群号 |
remark | string | 空 | 群备注, 不填或空字符串表示删除群备注 |
提示
该 API 无响应数据
该接口用于设置群组专属头衔。
/set_group_special_title
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
special_title | string | 是 | 头衔 |
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于群单人禁言。
/set_group_ban
提示
当 duration
为 0
时,将解除禁言。
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
duration | int64 | 是 | 禁言时长 |
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于群全员禁言。
/set_group_whole_ban
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
group_id | int64 | - | 群号 |
enable | boolean | true | 是否禁言 |
提示
该 API 无响应数据
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于设置精华消息。
/set_essence_msg
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息ID |
提示
该 API 没有响应数据
该接口用于移出精华消息。
/delete_essence_msg
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息ID |
提示
该 API 没有响应数据
该接口用于群打卡。
/send_group_sign
字段名 | 数据类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于发送群公告。
/_send_group_notice
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
group_id | int64 | 群号 | |
content | string | 公告内容 | |
image | string | 图片(可选),支持base64、http(s)和本地路径 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于获取群公告。
/_get_group_notice
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
group_id | int64 | 群号 |
data 的响应内容为 json 数组,每个元素内容如下:
字段 | 类型 | 说明 |
---|---|---|
sender_id | int64 | 公告发表者 |
publish_time | int64 | 公告发表时间 |
message | Object<Message> | 公告内容 |
字段 | 类型 | 说明 |
---|---|---|
text | string | 公告内容 |
images | List<Images> | 公告图片 |
字段 | 类型 | 说明 |
---|---|---|
height | string | 图片高度 |
width | string | 图片宽度 |
id | string | 图片ID,可用https://gdynamic.qpic.cn/gdynamic/{id}/628 获取 |
该接口用于群组踢人。
/set_group_kick
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
reject_add_request | bool | 否 | 是否拒绝再次加群 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于退出群组。
/set_group_leave
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于群戳一戳。
/group_touch
- 用于HTTP
/poke
- 用于主动WebSocket与被动WebSocket
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
user_id | int64 | 是 | QQ 号 |
该接口将返回处理结果,其中 data
字段无数据。。
用于获取群聊谁谁谁啊犯贱或者被二比滥权管理或者某群主时援交手滑禁言掉的人的列表。
/get_prohibited_member_list
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
当机器人是管理员时可用
/get_group_at_all_remain
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
貌似是从别的地方抄的奇怪功能,目前版本(9.0.15)只在部分群聊进行灰度测试!
/set_group_comment_face
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
msg_id | int32 | 是 | 消息ID |
face_id | int32 | 是 | 表情ID |
is_set | bool | 否 | 是否设置或取消评论 |
该接口将返回处理结果,其中 data
字段无数据。。
该接口用于获取频道系统内BOT的资料。
/get_guild_service_profile
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "nickname": "田所浩二",
+ "tiny_id": 1145141919810,
+ "avatar_url": "http://thirdqq.qlogo.cn/g?b=oidb&k=***&kti=***&s=0&t=***"
+ },
+ "echo": 123446
+}
+
获取频道列表,数据相比于Go-CQHTTP会有一点不一样。
/get_guild_list
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "guild_list": [
+ {
+ "guild_id": 111111111111111,
+ "guild_name": "北京大学频道",
+ "guild_display_id": "abcdefg",
+ "profile": "北京大学交流频道",
+ "status": {
+ "is_enable": true,
+ "is_banned": false,
+ "is_frozen": false
+ },
+ "owner_id": 22222222222222,
+ "shutup_expire_time": 0,
+ "allow_search": true
+ }
+ ]
+ },
+ "message": "success",
+ "echo": 111
+}
+
获取频道元数据,例如当前成员数量之类。
/get_guild_meta_by_guest
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "guild_id": 11111111111,
+ "guild_name": "北京大学交流频道",
+ "guild_profile": "",
+ "create_time": 1606878500,
+ "max_member_count": 100000,
+ "max_robot_count": 100,
+ "max_admin_count": 50,
+ "member_count": 6241,
+ "owner_id": 2222222221,
+ "guild_display_id": ""
+ },
+ "echo": 111
+}
+
获取一个频道的子频道(channel)列表。
/get_guild_channel_list
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
refresh | bool | 是否刷新数据,默认false |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "channel_list": [
+ {
+ "owner_guild_id": 1111111111111111111,
+ "channel_id": 639093000,
+ "channel_uin": 639093000,
+ "guild_id": "1111111111111111111",
+ "channel_type": 2,
+ "channel_name": "Test",
+ "create_time": 1606879350,
+ "max_member_count": 99,
+ "creator_tiny_id": 124105218677239793,
+ "talk_permission": 1,
+ "visible_type": 1,
+ "current_slow_mode": 0,
+ "slow_modes": [],
+ "icon_url": "",
+ "jump_switch": 0,
+ "jump_type": 0,
+ "jump_url": "",
+ "category_id": 0,
+ "my_talk_permission": 2
+ },
+ {
+ "owner_guild_id": 1111111111111111111,
+ "channel_id": 639093001,
+ "channel_uin": 639093001,
+ "guild_id": "1111111111111111111",
+ "channel_type": 1,
+ "channel_name": "闲聊吹水",
+ "create_time": 1606878501,
+ "max_member_count": 0,
+ "creator_tiny_id": 124105218677239793,
+ "talk_permission": 1,
+ "visible_type": 1,
+ "current_slow_mode": 0,
+ "slow_modes": [
+ {
+ "slow_mode_key": 0,
+ "slow_mode_text": "关闭",
+ "speak_frequency": 0,
+ "slow_mode_circle": 0
+ },
+ {
+ "slow_mode_key": 1,
+ "slow_mode_text": "每分钟1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 60
+ },
+ {
+ "slow_mode_key": 2,
+ "slow_mode_text": "每分钟2条",
+ "speak_frequency": 2,
+ "slow_mode_circle": 60
+ },
+ {
+ "slow_mode_key": 3,
+ "slow_mode_text": "每分钟5条",
+ "speak_frequency": 5,
+ "slow_mode_circle": 60
+ },
+ {
+ "slow_mode_key": 4,
+ "slow_mode_text": "每分钟10条",
+ "speak_frequency": 10,
+ "slow_mode_circle": 60
+ },
+ {
+ "slow_mode_key": 5,
+ "slow_mode_text": "每5分钟1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 300
+ },
+ {
+ "slow_mode_key": 6,
+ "slow_mode_text": "每10分钟1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 600
+ },
+ {
+ "slow_mode_key": 7,
+ "slow_mode_text": "每15分钟1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 900
+ },
+ {
+ "slow_mode_key": 8,
+ "slow_mode_text": "每30分钟1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 1800
+ },
+ {
+ "slow_mode_key": 9,
+ "slow_mode_text": "每1小时1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 3600
+ },
+ {
+ "slow_mode_key": 10,
+ "slow_mode_text": "每12小时1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 43200
+ },
+ {
+ "slow_mode_key": 11,
+ "slow_mode_text": "每24小时1条",
+ "speak_frequency": 1,
+ "slow_mode_circle": 86400
+ }
+ ],
+ "icon_url": "",
+ "jump_switch": 0,
+ "jump_type": 0,
+ "jump_url": "",
+ "category_id": 0,
+ "my_talk_permission": 2
+ }
+ ]
+ },
+ "message": "success",
+ "echo": 111
+}
+
类型 | 说明 |
---|---|
1 | 文字频道 |
2 | 语音频道 |
5 | 直播频道 |
7 | 主题频道 |
获取一个频道成员列表,但是因为数据量大,可能需要分页。
/get_guild_member_list
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
next_token | string | 不提供则从首页开始获取 |
all | bool | 是否一次性获取完所有成员,默认false |
refresh | bool | 是否刷新数据,默认false |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "members": [
+ {
+ "tiny_id": 144115218185291865,
+ "title": "频道助手",
+ "nickname": "频道助手",
+ "role_id": 2,
+ "role_name": "小管家",
+ "role_color": 4294936110,
+ "join_time": 1606878501,
+ "robot_type": 1,
+ "type": 1,
+ "in_black": false,
+ "platform": 0
+ }
+ ],
+ "next_token": "0800100118032001",
+ "finished": true
+ },
+ "echo": ""
+}
+
单独获取频道成员信息,附带有权限信息和身份组哦~!
/get_guild_member_profile
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
user_id | uint64 | 成员tinyId |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "tiny_id": 123456,
+ "nickname": "***",
+ "avatar_url": "https://qqchannel-profile-1251316161.file.myqcloud.com/***",
+ "join_time": 1606878500,
+ "roles": [
+ {
+ "role_id": "4",
+ "role_name": "频道主",
+ "color": 4294917938,
+ "permission": [
+ {
+ "root_id": 10000,
+ "child_ids": [10001, 10002, 10003, 10004, 10005]
+ },
+ {
+ "root_id": 20000,
+ "child_ids": [
+ 20001, 20002, 20003, 20004, 20005, 20006, 20007, 20008, 20009, 20010, 20011, 20012,
+ 20013, 20014, 20015, 20018, 20019
+ ]
+ },
+ {
+ "root_id": 30000,
+ "child_ids": [30001, 30002, 30003, 30004, 30005, 30006, 30007, 90002]
+ },
+ {
+ "root_id": 40000,
+ "child_ids": [40001, 40002]
+ },
+ {
+ "root_id": 50000,
+ "child_ids": [50001]
+ },
+ {
+ "root_id": 60000,
+ "child_ids": [60001]
+ },
+ {
+ "root_id": 70000,
+ "child_ids": [70001, 70002, 70003, 70004, 70005, 70006, 70007]
+ },
+ {
+ "root_id": 80000,
+ "child_ids": [80001, 80002]
+ },
+ {
+ "root_id": 90000,
+ "child_ids": [90001, 30003]
+ },
+ {
+ "root_id": 100000,
+ "child_ids": [100001, 100002]
+ },
+ {
+ "root_id": 1,
+ "child_ids": [1001, 1002, 1003, 1004, 1005]
+ },
+ {
+ "root_id": 2,
+ "child_ids": [
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014,
+ 2015, 2016, 2017, 2018
+ ]
+ },
+ {
+ "root_id": 3,
+ "child_ids": [3001, 3002, 3003, 3004, 3005, 3006]
+ },
+ {
+ "root_id": 4,
+ "child_ids": [4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008]
+ },
+ {
+ "root_id": 5,
+ "child_ids": [5001]
+ },
+ {
+ "root_id": 6,
+ "child_ids": [6001, 6002, 6003]
+ }
+ ],
+ "type": 0,
+ "display_name": "频道主"
+ },
+ {
+ "role_id": "15",
+ "role_name": "15活跃值",
+ "color": 4278190080,
+ "permission": [],
+ "type": 100,
+ "display_name": ""
+ }
+ ]
+ },
+ "echo": 111
+}
+
发送频道内信息,需要单独的API哦,不要使用/send_message
去发频道消息,发不出去的~~
/send_guild_channel_msg
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
channel_id | uint64 | 子频道ID |
message | string or Message | 消息体,可为消息段或者CQ码 |
auto_escape | bool | 是否解析CQ码,true 为不解析,默认false |
retry_cnt | int32 | 消息发送失败,最大重试次数,默认3 |
recall_duration | int64 | 自动撤回间隔(毫秒),默认不撤回 |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "message_id": 1933593189,
+ "time": 1706909190
+ },
+ "echo": 111
+}
+
该API接口已经被遗弃!
新的获取帖子广场的帖子哦!
/get_guild_feeds
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
from | uint32 | 开始获取的位置 |
该请求携带了大量原生响应数据,无法详细介绍,请自行测试!
获取身份组列表,包括隐藏的身份组哦~~
/get_guild_roles
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "roles": [
+ {
+ "argb_color": 4286151052,
+ "disabled": false,
+ "independent": false,
+ "max_count": 1000,
+ "member_count": 0,
+ "owned": false,
+ "role_id": 1,
+ "role_name": "普通成员",
+ "permission": []
+ }
+ ]
+ },
+ "echo": 111
+}
+
该接口不会实现,因为您可以调用/get_msg
来获取来自频道的消息,无需实现一个专属的接口。
删除一个身份组,首先,你得保证你有权限,因为这个API不会提供任何返回数据哦!
/delete_guild_role
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
role_id | uint64 | 角色ID |
该 API 无响应数据
设置用户身份组。
/set_guild_member_role
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
role_id | uint64 | 角色ID |
set | bool | 设置还是移除,默认false |
users | string or vector<int64> | 批量设置用户s |
user_id | int64 | 单独设置某个用户的身份 |
如果users是字符串那么其格式为
123456,6656656526,2652656
,以逗号分隔每个tinyId
。
修改频道角色,暂不支持设置权限,如有需要请提交issue
。
/update_guild_role
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
role_id | uint64 | 角色ID |
name | string | 名称 |
color | int64 | 颜色ARGB |
该 API 无响应数据
创建频道身份组。
/create_guild_role
字段 | 类型 | 说明 |
---|---|---|
guild_id | uint64 | 频道ID |
name | string | 名称 |
color | int64 | 颜色ARGB |
initial_users | vector<int64> | 默认身份组成员 |
如果是
HTTP
请求,则initial_users
使用字符串,以,
为用户tiny_id
分隔。
字段 | 类型 | 说明 |
---|---|---|
role_id | uint64 | 角色ID |
提示
对于下述消息类型, 涉及 文件地址
的参数规则如下:
file://
开头。http://
或 https://
开头。base64://
开头。字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
file | string | ✓ | ✓ | 是 | 图片文件地址 |
url | string | ✓ | ✓ | 否 | 图片链接地址 |
type | string | ✓ | x | 否 | 图片类型, 分为show , flash , original |
subType | int32 | ✓ | x | 否 | 图片子类型 |
value | 说明 |
---|---|
0 | 正常图片 |
1 | 表情包, 在客户端会被分类到表情包图片并缩放显示 |
2 | 热图 |
3 | 斗图 |
4 | 智图? |
7 | 贴图 |
8 | 自拍 |
9 | 贴图广告? |
10 | 有待测试 |
13 | 热搜图 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
file | string | × | ✓ | 是 | 语音文件地址 |
url | string | ✓ | ✓ | 否 | 语音链接地址 |
magic | bool | × | ✓ | 否 | 是否为魔法语音 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
file | string | × | ✓ | 是 | 视频文件地址 |
字段 | 类型 | 说明 |
---|---|---|
message_type | string | 消息类型 |
sub_type | string | 消息子类型 |
message_id | int64 | 消息 ID |
user_id | int64 | 发送者 QQ 号(在频道中,则为发送者的Tiny ID) |
tiny_id | int64 | 发送者的Tiny ID(频道) |
message | object | 消息内容 |
raw_message | string | CQ 码格式消息 |
font | int32 | 字体 |
sender | object | 发送人信息 |
group_id | int64 | 群号 |
target_id | int64 | 消息目标(私聊) |
temp_source | int32 | 临时聊天来源(私聊) |
peer_id | int64 | 消息接收者,群聊是群号,私聊时是目标QQ |
当 message_type
为 private
时,表示收到了私聊消息。
当 message_type
为 group
时,表示收到了群消息。
当 message_type
为 less
时,表示收到了群消息。
当 message_type
为 guild
时,表示收到了群消息。
Shamrock 提供了快速回复的功能,可以在收到消息时快速回复消息。
字段 | 类型 | 说明 |
---|---|---|
reply | string | 回复内容 |
auto_escape | bool | 是否自动转义 |
auto_reply | bool | 是否自动回复到消息 |
Shamrock 提供了快速操作的功能,可以在收到消息时快速执行操作。
字段 | 类型 | 说明 |
---|---|---|
reply | string | 回复内容 |
auto_escape | bool | 是否自动转义 |
at_sender | bool | 是否 @发送者 |
delete | bool | 是否撤回消息 |
kick | bool | 是否踢出发送者 |
ban | bool | 是否禁言发送者 |
ban_duration | int64 | 禁言时长(秒) |
该接口用于发送私聊消息。
/send_private_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
user_id | int64 | 是 | QQ 号 |
message | string / object / array | 是 | 消息内容 |
auto_escape | bool | 否 | 是否解析 CQ 码(true为不解析)。 |
recall_duration | int64 | 否 | 自动撤回时间间隔(毫秒) |
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息 ID |
time | int64 | 时间戳 |
该接口用于发送群聊消息。
/send_group_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
message | string / object / array | 是 | 消息内容 |
auto_escape | bool | 否 | 是否解析 CQ 码(true为不解析)。 |
recall_duration | int64 | 否 | 自动撤回时间间隔(毫秒) |
message格式同/send_private_msg
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息 ID |
time | int64 | 时间戳 |
该接口用于发送消息。
/send_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
message_type | string | 是 | 消息类型 |
user_id | int64 | 是 | QQ 号 |
group_id | int64 | 是 | 群号 |
discuss_id | int64 | 是 | 讨论组号 |
message | string / object / array | 是 | 消息内容 |
auto_escape | bool | 否 | 是否解析 CQ 码(true为不解析)。 |
recall_duration | int64 | 否 | 自动撤回时间间隔(毫秒) |
message格式同/send_private_msg
注意
当前发送消息的 API 暂不支持发送讨论组消息。
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息 ID |
time | int64 | 时间戳 |
/get_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
message_id | int32 | 是 | 消息 ID |
字段 | 类型 | 说明 |
---|---|---|
time | int64 | 时间戳 |
message_type | string | 消息类型 |
message_id | int32 | 消息 ID |
real_id | int32 | 真实 ID |
sender | Object<Sender> | 发送人信息 |
message | object | 消息体 |
group_id | int64 | 群号 |
target_id | int64 | 消息目标(私聊) |
peer_id | int64 | 消息接收者,群聊是群号,私聊时是目标QQ |
peer_id
是其他同类框架所表达的target_id
!
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | QQ 号 |
nickname | string | 昵称 |
sex | string | 性别 |
age | int32 | 年龄 |
uid | string | UID |
该接口用于撤回消息。
/delete_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
message_id | int32 | 是 | 消息 ID |
该接口将返回处理结果,其中 data
字段无数据。。
/get_history_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
message_type | string | 是 | 消息 类型 |
user_id | int64 | 否 | 私聊QQ |
group_id | int64 | 否 | 群号 |
count | int32 | 否 | 获取的消息数量(默认为20) |
message_seq | int32 | 否 | 起始消息的message_id(默认为0,表示从最后一条发言往前) |
字段 | 类型 | 说明 |
---|---|---|
messages | Message[] | 消息集 |
字段 | 类型 | 说明 |
---|---|---|
time | int64 | 时间戳 |
message_type | string | 消息类型 |
message_id | int32 | 消息 ID |
real_id | int32 | 真实 ID |
sender | Object<Sender> | 发送人信息 |
message | object | 消息体 |
group_id | int64 | 群号 |
target_id | int64 | 消息目标(私聊) |
peer_id | int64 | 消息接收者,群聊是群号,私聊时是目标QQ |
peer_id
是其他同类框架所表达的target_id
!
/get_group_msg_history
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 群号 |
count | int32 | 否 | 获取的消息数量(默认为20) |
message_seq | int32 | 否 | 起始消息的message_id(默认为0,表示从最后一条发言往前) |
字段 | 类型 | 说明 |
---|---|---|
messages | Message[] | 消息集 |
该接口用于清除本地消息缓存。
/clear_msgs
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
message_type | string | 是 | 消息 类型 |
user_id | int64 | 否 | 私聊QQ |
group_id | int64 | 否 | 群号 |
该接口将返回处理结果,其中 data
字段无数据。
获取合并转发内容
/get_forward_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string | 是 | 消息资源ID(卡片消息里面的resId) |
由于QQ内部错误,该接口可能导致闪退等问题的出现!一般是闪退一次后再次重新启动便不再闪退,但是可能无法获取合并转发的内容!
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "messages": [
+ {
+ "time": 1699375697,
+ "message_type": "private",
+ "message_id": 123456,
+ "real_id": 0,
+ "sender": {
+ "user_id": 114514,
+ "nickname": "伏秋洛~",
+ "sex": "unknown",
+ "age": 0,
+ "uid": "u_xxxx"
+ },
+ "message": [
+ {
+ "type": "text",
+ "data": {
+ "text": "aaaaaaaaaa"
+ }
+ }
+ ],
+ "peer_id": 114514,
+ "target_id": 114514
+ }
+ ]
+ },
+ "echo": ""
+}
+
发送群聊合并转发。
/send_group_forward_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
group_id | int64 | 是 | 发送到的目标群号 |
messages | foward message[] | 合并转发消息集 |
由于QQ限制,该接口的响应结果暂不具备意义,其中:message_id不匹配、forward_id为空。
字段 | 类型 | 说明 |
---|---|---|
message_id | int32 | 消息 ID |
forward_id | int32 | 转发 ID |
{
+ "status": "ok",
+ "retcode": 0,
+ "data": {
+ "message_id": 251425915,
+ "forward_id": ""
+ }
+}
+
直接引用消息的合并转发,id为消息id
:
[
+ {
+ "type": "node",
+ "data": {
+ "id": "123"
+ }
+ },
+ {
+ "type": "node",
+ "data": {
+ "id": "456"
+ }
+ }
+]
+
注意
Shamrock 不同于 go-cqhttp
,消息节点无法自定义发送者QQ号(设置头像)与昵称。
自定义消息合并转发:
[
+ {
+ "type": "node",
+ "data": {
+ "content": [
+ {
+ "type": "text",
+ "data": {
+ "text": "测试消息1"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "node",
+ "data": {
+ "content": "[CQ:image,file=xxxxx]测试消息2"
+ }
+ }
+]
+
引用自定义混合合并转发:
[
+ {
+ "type": "node",
+ "data": {
+ "content": "我是自定义消息"
+ }
+ },
+ {
+ "type": "node",
+ "data": {
+ "id": "123"
+ }
+ }
+]
+
发送私聊合并转发。
/send_private_forward_msg
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
user_id | int64 | 是 | 发送到的目标QQ |
messages | foward message[] | 合并转发消息集 |
提示
当 qq
字段为 "0"
或"all"
时, 表示 AT 全体成员。
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
string | ✓ | ✓ | 否 | QQ 号 |
注意
将在未来实现 qq
字段为 online
和 admin
时的功能。
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | ✓ | 是 | 表情 ID |
big | bool | ✓ | X | 否 | 是否是大表情 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | ✓ | 是 | 表情 ID |
count | int | ✓ | √ | 是 | 数量 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | ✓ | 是 | 消息 ID |
当 notice_type
为 friend_recall
时,表示收到了私聊消息撤回事件。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 好友 QQ 号 |
operator_id | int64 | 操作者 QQ 号 |
message_id | int64 | 消息 ID |
当 notice_type
为 group_recall
时,表示收到了群聊消息撤回事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 发送者 QQ 号 |
operator_id | int64 | 操作者 QQ 号 |
message_id | int64 | 消息 ID |
当 notice_type
为 group_increase
时,表示收到了群组成员增加事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 新增成员 QQ |
operator_id | int64 | 操作者 QQ 号 |
operator_uid | string | 操作者 UID |
user_uid | string | 新成员 UID |
sub_type | string | 子类型(approve/invite) |
当 notice_type
为 group_decrease
时,表示收到了群组成员减少事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 减少成员 QQ |
operator_id | int64 | 操作者 QQ 号 |
operator_uid | string | 操作者 UID |
user_uid | string | 新成员 UID |
sub_type | string | 子类型(leave/kick/kick_me) |
当 notice_type
为 group_admin
时,表示收到了群组管理员变动事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 变动成员 QQ |
sub_type | string | 子类型(set/unset) |
当 notice_type
为 group_upload
时,表示收到了群文件上传事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 上传者 QQ |
file | object | 群文件信息 |
字段名 | 数据类型 | 说明 |
---|---|---|
id | string | 文件 ID |
name | string | 文件名 |
size | int64 | 文件大小 ( 字节数 ) |
busid | int64 | busid ( 目前不清楚有什么作用 ) |
url | string | 下载地址 |
当 notice_type
为 private_upload
时,表示收到了群文件上传事件。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 上传者 QQ |
sender | int64 | 上传者 QQ |
private_file | object | 私聊文件信息 |
字段名 | 数据类型 | 说明 |
---|---|---|
id | string | 文件 ID |
name | string | 文件名 |
size | int64 | 文件大小 ( 字节数 ) |
url | string | 下载地址 |
sub_id | string | 子文件ID |
exppire | int64 | 文件过期时间 |
当 notice_type
为 group_ban
时,表示收到了群禁言事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 被禁言成员 QQ |
operator_id | int64 | 操作者 QQ |
duration | int64 | 禁言时长(秒) |
sub_type | string | 子类型(ban/lift_ban) |
当 notice_type
为 group_card
时,表示收到了群成员名片变动事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 变动成员 QQ |
card_new | string | 新名片 |
card_old | string | 旧名片 |
当 notice_type
为 friend_add
时,表示收到了好友添加事件。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 新添加好友 QQ 号 |
当 notice_type
为 offline_file
时,表示收到了离线文件事件。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 发送者 QQ |
file | object | 文件信息 |
字段 | 类型 | 说明 |
---|---|---|
name | string | 文件名 |
size | int64 | 文件大小 |
url | string | 下载链接 |
当 notice_type
为 essence
时,表示收到了精华消息事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
sender_id | int64 | 发送者 QQ |
operator_id | int64 | 操作者 QQ |
message_id | int64 | 消息 ID |
sub_type | string | 子类型(add/delete) |
当 notice_type
为 client_status
时,表示收到了客户端状态事件。
字段 | 类型 | 说明 |
---|---|---|
client | object | 客户端信息 |
online | bool | 在线状态 |
当 notice_type
为 notify
且 sub_type
为 poke
时,表示收到了头像戳一戳事件。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 发送者 QQ |
sender_id | int64 | 好友 QQ (仅私聊) |
group_id | int64 | 群号(仅群聊) |
target_id | int64 | 被戳者 QQ |
poke_detail | PokeDetail | 戳一戳的详细信息 |
字段 | 类型 | 说明 |
---|---|---|
action | string | 操作名称,如“戳了戳” |
suffix | string | 后缀,未设置则未空 |
action_img_url | string | 操作图标 |
当 notice_type
为 notify
且 sub_type
为 lucky_king
时,表示收到了群红包运气王事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 发送者 |
target_id | int64 | 运气王 |
当 notice_type
为 notify
且 sub_type
为 honor
时,表示收到了群荣誉变更事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 操作者 |
honor_type | string | 荣誉类型 |
当 notice_type
为 notify
且 sub_type
为 title
时,表示收到了群头衔变更事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 操作者 |
title | string | 获得头衔 |
/get_weather_city_code
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
city | string | 是 | 城市 |
[
+ {
+ "adcode": 10000,
+ "province": "广西",
+ "city": "柳州"
+ }
+]
+
该接口用于获取天气,该接口调用来自QQ官方服务。
/get_weather
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
code | string | 是 | ADCode |
city | string | 否 | 城市 |
{
+ "weatherInfo": {
+ "all_astro": [],
+ "lifeindex_forecast_list": [],
+ "weekly_astro": [],
+ "ret": 0,
+ "weather_info": {
+ "temper": "16",
+ "air_humidity": "98",
+ "wind_power": "微风",
+ "wind_direct": "西南风",
+ "weather": "多云",
+ "pubtime": "01:40",
+ "updatetime": 1695664205,
+ "weather_type": "多云",
+ "weather_type_id": "202",
+ "type_id_new": 2,
+ "concrete_type": 2,
+ "sunrise": "06:05",
+ "sunset": "18:06"
+ },
+ "air_info": null,
+ "forecast_list": {
+ "weatherForecast": [
+ {
+ "day_weather": "阴",
+ "night_weather": "多云",
+ "day_temper": "22",
+ "night_temper": "15",
+ "day_wind_direct": "西南风",
+ "night_wind_direct": "变向风",
+ "day_wind_power": "微风",
+ "night_wind_power": "微风",
+ "sunrise_time": "06:05",
+ "sunset_time": "18:06",
+ "pubtime": "202309251800",
+ "day": 0,
+ "day_weather_type": "阴天",
+ "night_weather_type": "多云",
+ "day_weather_type_id": "203",
+ "night_weather_type_id": "202",
+ "day_type_id_new": 3,
+ "day_concrete_type": 3,
+ "night_type_id_new": 2,
+ "night_concrete_type": 2,
+ "pm": "82",
+ "wind_power_desc": ""
+ },
+ ...
+ ],
+ "updatetime": 1695664205,
+ "tomorrowPrompt": "",
+ "weeklyPrompt": ""
+ },
+ "forecast": {
+ "day_weather": "多云",
+ "night_weather": "晴",
+ "day_temper": "24",
+ "night_temper": "16",
+ "day_wind_direct": "变向风",
+ "night_wind_direct": "变向风",
+ "day_wind_power": "微风",
+ "night_wind_power": "微风",
+ "sunrise_time": "06:06",
+ "sunset_time": "18:04",
+ "pubtime": "202309251800",
+ "day": 1,
+ "day_weather_type": "多云",
+ "night_weather_type": "晴",
+ "day_weather_type_id": "202",
+ "night_weather_type_id": "201",
+ "day_type_id_new": 2,
+ "day_concrete_type": 2,
+ "night_type_id_new": 1,
+ "night_concrete_type": 1,
+ "pm": "146",
+ "wind_power_desc": ""
+ },
+ "hourinfo_list": null,
+ "almanac": "",
+ "warning_list": {
+ "lst_warning": [],
+ "last_proc_time": 0
+ },
+ "astro": null,
+ "city": "北京",
+ "area": "",
+ "adcode": 110000,
+ "area_id": 101010100,
+ "en_name": "Beijing",
+ "update_time": 1695664205,
+ "tips_list": null,
+ "lifeindex_list": null,
+ "current_time": 1695664515,
+ "user_weekly_astro": null,
+ "weekly_summary": null
+ },
+ "qrcode": "data:image/png;base64,...",
+ "poster": "",
+ "share": {
+ "data": {
+ "app": "com.tencent.weather.share",
+ "config": {
+ "autosize": 0,
+ "ctime": 1695664515,
+ "forward": 0,
+ "round": 0,
+ "token": "49441099828d62f0ded8112849bce839"
+ },
+ "desc": "",
+ "meta": {
+ "share": {
+ "adcode": 110000,
+ "air_info": null,
+ "area": "",
+ "city": "北京",
+ "current_time": 1695664515,
+ "forecast_list": {
+ "tomorrowPrompt": "",
+ "updatetime": 1695664205,
+ "weatherForecast": [
+ {
+ "day": 0,
+ "day_concrete_type": 3,
+ "day_temper": "22",
+ "day_type_id_new": 3,
+ "day_weather": "阴",
+ "day_weather_type": "阴天",
+ "day_weather_type_id": "203",
+ "day_wind_direct": "西南风",
+ "day_wind_power": "微风",
+ "night_concrete_type": 2,
+ "night_temper": "15",
+ "night_type_id_new": 2,
+ "night_weather": "多云",
+ "night_weather_type": "多云",
+ "night_weather_type_id": "202",
+ "night_wind_direct": "变向风",
+ "night_wind_power": "微风",
+ "pm": "82",
+ "pubtime": "202309251800",
+ "sunrise_time": "06:05",
+ "sunset_time": "18:06",
+ "wind_power_desc": ""
+ },
+ ...
+ ],
+ "weeklyPrompt": ""
+ },
+ "update_time": 1695664205,
+ "weather_info": {
+ "air_humidity": "98",
+ "concrete_type": 2,
+ "pubtime": "01:40",
+ "sunrise": "06:05",
+ "sunset": "18:06",
+ "temper": "16",
+ "type_id_new": 2,
+ "updatetime": 1695664205,
+ "weather": "多云",
+ "weather_type": "多云",
+ "weather_type_id": "202",
+ "wind_direct": "西南风",
+ "wind_power": "微风"
+ }
+ }
+ },
+ "prompt": "[分享]北京 多云 16°",
+ "ver": "1.0.0.1",
+ "view": "share"
+ },
+ "code": 0
+ }
+}
+
该接口用于上传群聊图片, 注意该接口是上传群消息的图片,不是群文件,也不是群相册。
/upload_group_image
POST
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
pic | string | 是 | 图片base64 |
sender | int64 | 是 | |
troop | int64 | 是 | 图片发送到的群聊 |
get_cookies
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
domain | string | 否 | 域名 |
get_csrf_token
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
domain | string | 否 | 域名 |
get_cookies
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
domain | string | 否 | 域名 |
get_credentials
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
domain | string | 否 | 域名 |
提示
Shamrock 为您提供了一个支持 OneBot 标准的 HTTP API。
您可以通过发送 HTTP 请求来与 Shamrock 进行交互。
提示
Shamrock 目前支持 GET 和 POST 两种请求方式。
在大部分情况下,您可以使用 GET 请求来与 Shamrock 进行交互。
但是,如果您需要向 Shamrock 发送大量数据,或者需要向 Shamrock 发送二进制数据,您需要使用 POST 请求。
GET 请求的 URL 由以下部分组成:
http://<host>:<port>/<endpoint>?<params>
+
链接中的含义如下:
<host>
:Shamrock 的 IP 地址或域名<port>
:Shamrock 的 HTTP API 端口<endpoint>
:Shamrock 的 HTTP API 端点<params>
:HTTP GET 请求的参数POST 请求的 URL 由以下部分组成:
http://<host>:<port>/<endpoint>
+
链接中的含义如下:
<host>
:Shamrock 的 IP 地址或域名<port>
:Shamrock 的 HTTP API 端口<endpoint>
:Shamrock 的 HTTP API 端点POST 请求的数据格式为 JSON
{
+ "param1": "value1",
+ "param2": "value2",
+ ...
+}
+
POST 请求的数据格式为表单
param1=value1¶m2=value2&...
+
大多数情况下,推荐使用 JSON 格式的 POST 请求。
Shamrock 支持使用 WebSocket 进行通信。
可选的 WebSocket 地址有两种:
ws://<host>:<port>
ws://<host>:<port>/api
区别在于,/
除了发送和响应 API 请求外,还支持事件上报功能。
Shamrock 使用 WebSocket 时,请求的数据格式为 JSON
{
+ "action": "send_private_msg", // 请求 API 端点
+ "params": {
+ // 请求参数
+ "user_id": 10000,
+ "message": "hello"
+ },
+ "echo": "123456" // 自定义的回显字段
+}
+
对于 echo
字段,Shamrock 会在响应中原样返回。
Shamrock 的响应格式为 JSON
{
+ "status": "ok", // 状态,ok 为成功,其他将在下文中详细说明
+ "retcode": 0, // 返回码,0 为成功,非 0 为失败
+ "msg": "", // 错误信息,仅在 API 调用失败时出现
+ "wording": "", // 对错误信息的描述,仅在 API 调用失败时出现
+ "data": {
+ // 响应数据
+ "message_id": 123456
+ },
+ "echo": "123456" // 请求中的回显字段
+}
+
Shamrock 的响应状态有以下几种:
ok
:成功failed
:失败当 request_type
为 friend
时,表示收到了加好友请求。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 请求者 QQ 号 |
comment | string | 验证信息 |
flag | string | 请求 flag |
Shamrock 提供了快速处理的功能,可以在收到请求时快速处理请求。
字段 | 类型 | 说明 |
---|---|---|
approve | bool | 是否同意 |
remark | string | 备注 |
当 request_type
为 group
时,表示收到了加群请求/邀请。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 请求者 QQ 号 |
comment | string | 验证信息 |
flag | string | 请求 flag |
sub_type | string | 子类型(add/invite) |
Shamrock 提供了快速处理的功能,可以在收到请求时快速处理请求。
字段 | 类型 | 说明 |
---|---|---|
approve | bool | 是否同意 |
reason | string | 拒绝理由 |
该接口用于获取图片,只能获取已缓存的图片。
/get_image
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
file | string | 是 | 文件 MD5 |
字段 | 类型 | 说明 |
---|---|---|
size | int64 | 文件大小 |
url | string | 文件 URL |
filename | string | 文件 名称 |
该接口用于检查是否可以发送图片。
/can_send_image
提示
该 API 无需参数
字段名 | 数据类型 | 说明 |
---|---|---|
yes | boolean | 是或否 |
该接口用于图片 OCR。
/ocr_image
字段 | 类型 | 说明 |
---|---|---|
image | string | 图片ID |
字段 | 类型 | 说明 |
---|---|---|
texts | List<TextDetection> | OCR结果 |
language | string | 语言 |
字段 | 类型 | 说明 |
---|---|---|
text | string | 文本 |
confidence | int32 | 置信度 |
coordinates | vector2[] | 二维数组表示的坐标 |
该接口用于获取语音。
/get_record
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
file | string | 是 | 文件 MD5 |
out_format | string | 是 | 输出格式 |
字段 | 类型 | 说明 |
---|---|---|
file | string | 文件路径 |
url | string | 文件 URL |
该接口用于检查是否可以发送语音。
/can_send_record
提示
该 API 无需参数
字段名 | 数据类型 | 说明 |
---|---|---|
yes | boolean | 是或否 |
/get_record
提示
要使用此接口, 通常需要安装 ffmpeg, 请参考 OneBot 实现的相关说明。
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
file | string | - | 收到的语音文件名(消息段的 file 参数), 如 0B38145AA44505000B38145AA4450500.silk |
out_format | string | - | 要转换到的格式, 目前支持 mp3 、amr 、wma 、m4a 、spx 、ogg 、wav 、flac |
字段名 | 数据类型 | 说明 |
---|---|---|
file | string | 转换后的语音文件路径, 如 /home/somebody/cqhttp/data/record/0B38145AA44505000B38145AA4450500.mp3 |
某个账号因为某种原因寄了,允许切换备用能源!
/switch_account
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
user_id | int64 | 是 |
是否正常执行切换账号请求的响应。
/upload_file
注意
该接口仅仅为HTTP POST提供,WebSocket请使用另外一个。
以file格式上传文件,不要使用binary。
{
+ "file": "/scard/Android/data/com.tencent.mobileqq/Tencent/Shamrock/xxxx"
+}
+
/upload_file_to_shamrock
注意
该接口仅仅为WebSocket提供。
名称 | 类型 | 作用 |
---|---|---|
md5 | string | 文件hex格式 的md5值,32长度的字符串,整个文件的md5 |
offset | uint64 | 文件分段上传偏移,默认值为0,从头上传 |
chunk | string | 文件分段上传数据块(base64),无需开头base64:// |
file_size | uint64 | 总文件大小 |
名称 | 类型 | 作用 |
---|---|---|
file_size | uint64 | 总文件大小 |
finish | bool | 是否完成上传 |
path | string | 该文件在安卓系统(shamrock环境)的路径 |
用法二选一:
1.仅发送url,由Shamrock自己访问该url来下载文件
2.仅发送文件base64,Shamrock解码后直接转存为文件
url和base64至少一个不能为空
同时发送url和base64时,使用url
/download_file
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
url | string | 否 | 下载地址 | |
name | string | 否 | 文件名称 | 文件md5 |
root | string | 否 | 保存文件的根目录,注意请确保QQ可以访问 | Shamrock缓存目录 |
base64 | string | 否 | 文件base64内容 | |
thread_cnt | int32 | 否 | 下载的线程数量 | |
headers | string or array | 否 | 请求头 |
"headers": "User-Agent=YOUR_UA[\\r\\n]Referer=https://www.baidu.com"
+
"headers": [
+ "User-Agent=YOUR_UA",
+ "Referer=https://www.baidu.com"
+]
+
[\\r\\n]
为换行符, 使用http请求时请注意编码
{
+ "file": "/scard/Android/data/com.tencent.mobileqq/Tencent/Shamrock/xxxx"
+}
+
通过这个API下载的文件能直接放入CQ码作为图片发送
调用后会阻塞直到下载完成后才会返回数据,请注意下载大文件时的超时
clean_cache
该接口没有参数
{
+ "status": "ok",
+ "retcode": 0
+}
+
/get_device_battery
{
+ "battery": 44,
+ "scale": 3102000,
+ "status": 2
+}
+
/get_start_time
POST
| GET
| 不支持WS
{
+ "status": "ok",
+ "retcode": 0,
+ "data": 1696749716155
+}
+
/log
POST
| GET
| 不支持WS
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
start | int32 | 否 | 开始的行 | |
recent | bool | 否 | 是否只显示最近的日志 | false |
该接口默认关闭,需要在实验室设置手动打开!注意,该接口可能导致您的隐私数据泄露,请勿公开在未知的网络,或者泄露您的token。
POST
字段 | 类型 | 必须 | 说明 | 默认值 |
---|---|---|---|---|
cmd | array 或 string | 是 | 命令内容 | |
dir | string | 是 | 当前所处的目录 |
/shut
POST
| GET
| 不支持WS
无响应
/get_supported_actions
{ "status": "ok", "retcode": 0, "data": [ "set_group_ban", "clean_cache", "clear_msgs", "create_group_file_folder", "delete_essence_message", "delete_essence_msg", "delete_group_file", "delete_group_folder", "delete_msg", "delete_message", "download_file", "fav.add_image_msg", "fav.add_text_msg", "fav.get_item_content", "fav.get_item_list", "get_csrf_token", "get_cookie", "get_cookies", "get_credentials", "get_device_battery", "get_essence_message_list", "get_essence_msg_list", "get_forward_msg", "get_friend_list", "get_friend_system_msg", "get_group_file_system_info", "get_group_file_url", "get_group_msg_history", "get_group_notice", "_get_group_notice", "get_group_at_all_remain", "get_group_root_files", "get_group_files_by_folder", "get_group_system_msg", "get_guild_list", "get_guild_service_profile", "get_history_msg", "get_http_cookies", "get_image", "get_latest_events", "get_login_info", "get_model_show", "_get_model_show", "get_msg", "get_message", "get_not_joined_group_info", "_get_online_clients", "get_profile_card", "get_user_info", "get_prohibited_member_list", "get_record", "get_self_info", "status", "get_status", "_get_stranger_info", "get_stranger_info", "get_supported_actions", "get_troop_honor_info", "get_group_honor_info", "get_group_info", "get_group_list", "get_group_member_info", "get_group_member_list", "get_uid", "get_uin_by_uid", "get_version", "get_version_info", "get_weather", "get_weather_city_code", "poke", "is_blacklist_uin", "kick_group_member", "set_group_kick", "set_group_leave", "leave_group", "set_group_card", "set_group_name", ".handle_quick_operation_async", "rename_group_folder", "restart_me", "sanc_qrcode", "send_forward_msg", "send_group_forward_msg", "send_group_msg", "send_group_message", "send_group_announcement", "send_group_notice", "send_group_sign", "send_like", "send_message", "send_msg", "send_private_forward_msg", "send_private_message", "send_private_msg", "set_essence_message", "set_essence_msg", "set_friend_add_request", "set_group_add_request", "set_group_admin", "set_group_comment_face", "set_group_special_title", "set_group_whole_ban", "_set_model_show", "set_qq_profile", "switch_account", "test", "upload_group_file", "upload_private_file" ], "echo": "" }
`,86),n=[s];function r(i,u){return e(),a("div",null,n)}const p=t(d,[["render",r],["__file","shamrock.html.vue"]]);export{p as default}; diff --git a/assets/shamrock.html-93415924.js b/assets/shamrock.html-93415924.js new file mode 100644 index 00000000..2e006bd5 --- /dev/null +++ b/assets/shamrock.html-93415924.js @@ -0,0 +1 @@ +const l=JSON.parse('{"key":"v-1f099f65","path":"/api/shamrock.html","title":"Shamrock 接口","lang":"zh-CN","frontmatter":{"title":"Shamrock 接口","icon":"feather-alt"},"headers":[{"level":2,"title":"切换账号","slug":"切换账号","link":"#切换账号","children":[{"level":3,"title":"API端点","slug":"api端点","link":"#api端点","children":[]}]},{"level":2,"title":"参数","slug":"参数","link":"#参数","children":[{"level":3,"title":"响应","slug":"响应","link":"#响应","children":[]}]},{"level":2,"title":"上传文件到缓存目录 (HTTP)","slug":"上传文件到缓存目录-http","link":"#上传文件到缓存目录-http","children":[{"level":3,"title":"API 端点","slug":"api-端点","link":"#api-端点","children":[]},{"level":3,"title":"参数","slug":"参数-1","link":"#参数-1","children":[]},{"level":3,"title":"响应","slug":"响应-1","link":"#响应-1","children":[]}]},{"level":2,"title":"上传文件到缓存目录 (WebSocket + HTTP)","slug":"上传文件到缓存目录-websocket-http","link":"#上传文件到缓存目录-websocket-http","children":[{"level":3,"title":"API 端点","slug":"api-端点-1","link":"#api-端点-1","children":[]},{"level":3,"title":"参数","slug":"参数-2","link":"#参数-2","children":[]},{"level":3,"title":"响应数据","slug":"响应数据","link":"#响应数据","children":[]}]},{"level":2,"title":"让Shamrock下载文件到缓存目录","slug":"让shamrock下载文件到缓存目录","link":"#让shamrock下载文件到缓存目录","children":[{"level":3,"title":"API 端点","slug":"api-端点-2","link":"#api-端点-2","children":[]},{"level":3,"title":"参数","slug":"参数-3","link":"#参数-3","children":[]},{"level":3,"title":"响应","slug":"响应-2","link":"#响应-2","children":[]}]},{"level":2,"title":"清除缓存","slug":"清除缓存","link":"#清除缓存","children":[{"level":3,"title":"API 端点","slug":"api-端点-3","link":"#api-端点-3","children":[]},{"level":3,"title":"参数","slug":"参数-4","link":"#参数-4","children":[]},{"level":3,"title":"响应","slug":"响应-3","link":"#响应-3","children":[]}]},{"level":2,"title":"获取手机电池信息","slug":"获取手机电池信息","link":"#获取手机电池信息","children":[{"level":3,"title":"API 端点","slug":"api-端点-4","link":"#api-端点-4","children":[]},{"level":3,"title":"响应","slug":"响应-4","link":"#响应-4","children":[]}]},{"level":2,"title":"获取Shamerock启动时间","slug":"获取shamerock启动时间","link":"#获取shamerock启动时间","children":[{"level":3,"title":"API 端点","slug":"api-端点-5","link":"#api-端点-5","children":[]},{"level":3,"title":"请求类型","slug":"请求类型","link":"#请求类型","children":[]},{"level":3,"title":"响应","slug":"响应-5","link":"#响应-5","children":[]}]},{"level":2,"title":"获取Shamrock日志","slug":"获取shamrock日志","link":"#获取shamrock日志","children":[{"level":3,"title":"API 端点","slug":"api-端点-6","link":"#api-端点-6","children":[]},{"level":3,"title":"请求类型","slug":"请求类型-1","link":"#请求类型-1","children":[]},{"level":3,"title":"参数","slug":"参数-5","link":"#参数-5","children":[]}]},{"level":2,"title":"远程Shell执行","slug":"远程shell执行","link":"#远程shell执行","children":[{"level":3,"title":"请求类型","slug":"请求类型-2","link":"#请求类型-2","children":[]},{"level":3,"title":"参数","slug":"参数-6","link":"#参数-6","children":[]}]},{"level":2,"title":"关闭Shamrock","slug":"关闭shamrock","link":"#关闭shamrock","children":[{"level":3,"title":"API 端点","slug":"api-端点-7","link":"#api-端点-7","children":[]},{"level":3,"title":"请求类型","slug":"请求类型-3","link":"#请求类型-3","children":[]},{"level":3,"title":"响应","slug":"响应-6","link":"#响应-6","children":[]}]},{"level":2,"title":"获取所有支持的动作","slug":"获取所有支持的动作","link":"#获取所有支持的动作","children":[{"level":3,"title":"API 端点","slug":"api-端点-8","link":"#api-端点-8","children":[]},{"level":3,"title":"响应","slug":"响应-7","link":"#响应-7","children":[]}]}],"git":{"createdTime":1698464511000,"updatedTime":1708951999000,"contributors":[{"name":"白池","email":"98259561+whitechi73@users.noreply.github.com","commits":7},{"name":"aleck099","email":"aleck099@outlook.com","commits":2},{"name":"Kamisato-Ayaka-233","email":"2627706725@qq.com","commits":1},{"name":"huan_kong","email":"2564076459@qq.com","commits":1},{"name":"真心","email":"qgzhenxin@qq.com","commits":1}]},"readingTime":{"minutes":3.02,"words":907},"filePathRelative":"api/shamrock.md","localizedDate":"2023年10月28日","excerpt":""}');export{l as data}; diff --git a/assets/special.html-0dd674b5.js b/assets/special.html-0dd674b5.js new file mode 100644 index 00000000..429f372b --- /dev/null +++ b/assets/special.html-0dd674b5.js @@ -0,0 +1,102 @@ +import{_ as o}from"./plugin-vue_export-helper-c27b6911.js";import{r,o as c,c as p,b as i,w as e,e as l,a as t,d as a}from"./app-edf8b1e7.js";const u={},h=l('字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | x | 是 | 5 没中, 4 擦边没中, 3 卡框, 2 擦边中, 1 正中 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | x | 是 | 锤 3 剪 2 布 1 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | x | 是 | 点数 ID |
注意
Shamrock 对于戳一戳的定义与 go-cqhttp
不同。
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
type | int | ✓ | ✓ | 是 | 戳一戳类型 |
id | int | ✓ | ✓ | 是 | 戳一戳 ID |
strength | int | ✓ | ✓ | 否 | 戳一戳强度(1-5 默认1) |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | ✓ | 是 | QQ号 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
type | string | ✓ | ✓ | 是 | 音乐类型(qq /163 ) |
id | int | ✓ | ✓ | 是 | 音乐 ID |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
type | string | ✓ | ✓ | 是 | 音乐类型(自定义请使用 custom |
url | string | ✓ | ✓ | 是 | 跳转链接 |
audio | string | ✓ | ✓ | 是 | 音乐音频链接 |
title | string | ✓ | ✓ | 是 | 标题 |
singer | string | ✓ | ✓ | 是 | 歌手 |
image | string | ✓ | ✓ | 否 | 封面图片链接 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
city | string | ✓ | ✓ | 否 | 城市名称 |
code | string | ✓ | ✓ | 否 | 城市代码 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
lat | float | ✓ | ✓ | 是 | 纬度 |
lon | float | ✓ | ✓ | 是 | 经度 |
title | string | ✓ | × | 否 | 标题 |
content | string | ✓ | × | 否 | 内容 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
url | string | ✓ | ✓ | 是 | 链接地址 |
title | string | ✓ | × | 是 | 标题 |
content | string | ✓ | × | 否 | 内容 |
image | string | ✓ | × | 否 | 图片链接 |
file | string | ✓ | × | 否 | 文件链接 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
int | ✓ | ✓ | 是 | QQ 号 | |
id | int | ✓ | ✓ | 是 | 礼物 ID |
该接口用于删除好友。
/delete_friend
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
user_id | int64 | - | 好友 QQ 号 |
该接口将返回处理结果,其中 data
字段无数据。
该接口用于删除单向好友。
/delete_unidirectional_friend
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 单向好友QQ号 |
该接口将返回处理结果,其中 data
字段无数据。
send_like
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
time | int32 | 是 | 点赞次数 |
user_id | int64 | 是 | 点赞的目标用户 |
该接口将返回处理结果,其中 data
字段无数据。
Shamrock 的语音解码器已经模块化,你可以自行选择安装。
如果未安装 SILK 语音引擎,Shamrock 则无法发送 mp3/flac/wav/ogg 等格式的语音消息。
为了完整支持语音消息,你需要安装 SILK 语音引擎。
Shamrock 主目录
下的 lib
文件夹中所有上报事件都包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
time | int64 | 时间戳 |
self_id | int64 | 机器人QQ |
post_type | string | 上报类型 |
提示
post_type
为 message
或 message_sent
时,数据是一致的。
区别在于 message
是收到的消息,message_sent
是发送的消息。
默认情况下,Shamrock 只会上报 message
类型的消息。
类型 | 说明 |
---|---|
message | 收到消息 |
message_sent | 发送消息 |
notice | 通知 |
request | 请求 |
类型 | 说明 |
---|---|
private | 私聊消息 |
group | 群消息 |
类型 | 说明 |
---|---|
friend | 好友消息 |
normal | 群消息 |
匿名消息 | |
group | 群临时消息 |
group_self | 群消息(自身操作) |
notice | 系统提示 |
类型 | 说明 |
---|---|
group_upload | 群文件上传 |
group_admin | 群管理员变动 |
group_decrease | 群成员减少 |
group_increase | 群成员增加 |
group_ban | 群禁言 |
group_recall | 群消息撤回 |
group_card | 群成员名片变动 |
friend_add | 好友添加 |
friend_recall | 好友撤回 |
offline_file | 接收到离线文件包 |
client_status | 客户端状态 |
essence | 精华消息 |
notify | 系统通知 |
类型 | 说明 |
---|---|
honor | 群荣誉变更 |
poke | 戳一戳 |
lucky_king | 运气王 |
title | 群头衔变更 |
类型 | 说明 |
---|---|
friend | 好友请求 |
group | 群请求 |
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 发送者 QQ 号 |
nickname | string | 发送者昵称 |
如果是群消息,还会包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
card | string | 发送者群名片 |
level | string | 发送者等级 |
role | string | 发送者角色 |
title | string | 发送者头衔 |
如果是频道消息,则会包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
tiny_id | string | 发送者TinyId |
类型 | 来源 |
---|---|
0 | 群聊 |
1 | QQ咨询 |
2 | 查找 |
3 | QQ电影 |
4 | 热聊 |
6 | 验证消息 |
7 | 多人聊天 |
8 | 约会 |
9 | 通讯录 |
提示
所有上报事件都包含通用数据,详见 通用数据。
包含在通用数据中的字段不会在下面的表格中重复出现。
字段 | 类型 | 说明 |
---|---|---|
message_type | string | 消息类型 |
sub_type | string | 消息子类型 |
message_id | int64 | 消息 ID |
user_id | int64 | 发送者 QQ 号(在频道中,则为发送者的Tiny ID) |
tiny_id | int64 | 发送者的Tiny ID(频道) |
message | object | 消息内容 |
raw_message | string | CQ 码格式消息 |
font | int32 | 字体 |
sender | object | 发送人信息 |
group_id | int64 | 群号 |
target_id | int64 | 消息目标(私聊) |
temp_source | int32 | 临时聊天来源(私聊) |
peer_id | int64 | 消息接收者,群聊是群号,私聊时是目标QQ |
当 message_type
为 private
时,表示收到了私聊消息。
当 message_type
为 group
时,表示收到了群消息。
当 message_type
为 less
时,表示收到了群消息。
当 message_type
为 guild
时,表示收到了群消息。
Shamrock 提供了快速回复的功能,可以在收到消息时快速回复消息。
字段 | 类型 | 说明 |
---|---|---|
reply | string | 回复内容 |
auto_escape | bool | 是否自动转义 |
auto_reply | bool | 是否自动回复到消息 |
Shamrock 提供了快速操作的功能,可以在收到消息时快速执行操作。
字段 | 类型 | 说明 |
---|---|---|
reply | string | 回复内容 |
auto_escape | bool | 是否自动转义 |
at_sender | bool | 是否 @发送者 |
delete | bool | 是否撤回消息 |
kick | bool | 是否踢出发送者 |
ban | bool | 是否禁言发送者 |
ban_duration | int64 | 禁言时长(秒) |
注意
对于 Shamrock 未实现的事件,会在标题添加标记 未实现
提示
所有上报事件都包含通用数据,详见 通用数据。
包含在通用数据中的字段不会在下面的表格中重复出现。
当 notice_type
为 friend_recall
时,表示收到了私聊消息撤回事件。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 好友 QQ 号 |
operator_id | int64 | 操作者 QQ 号 |
message_id | int64 | 消息 ID |
当 notice_type
为 group_recall
时,表示收到了群聊消息撤回事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 发送者 QQ 号 |
operator_id | int64 | 操作者 QQ 号 |
message_id | int64 | 消息 ID |
当 notice_type
为 group_increase
时,表示收到了群组成员增加事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 新增成员 QQ |
operator_id | int64 | 操作者 QQ 号 |
operator_uid | string | 操作者 UID |
user_uid | string | 新成员 UID |
sub_type | string | 子类型(approve/invite) |
当 notice_type
为 group_decrease
时,表示收到了群组成员减少事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 减少成员 QQ |
operator_id | int64 | 操作者 QQ 号 |
operator_uid | string | 操作者 UID |
user_uid | string | 新成员 UID |
sub_type | string | 子类型(leave/kick/kick_me) |
当 notice_type
为 group_admin
时,表示收到了群组管理员变动事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 变动成员 QQ |
sub_type | string | 子类型(set/unset) |
当 notice_type
为 group_upload
时,表示收到了群文件上传事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 上传者 QQ |
file | object | 群文件信息 |
字段名 | 数据类型 | 说明 |
---|---|---|
id | string | 文件 ID |
name | string | 文件名 |
size | int64 | 文件大小 ( 字节数 ) |
busid | int64 | busid ( 目前不清楚有什么作用 ) |
url | string | 下载地址 |
当 notice_type
为 private_upload
时,表示收到了群文件上传事件。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 上传者 QQ |
sender | int64 | 上传者 QQ |
private_file | object | 私聊文件信息 |
字段名 | 数据类型 | 说明 |
---|---|---|
id | string | 文件 ID |
name | string | 文件名 |
size | int64 | 文件大小 ( 字节数 ) |
url | string | 下载地址 |
sub_id | string | 子文件ID |
exppire | int64 | 文件过期时间 |
当 notice_type
为 group_ban
时,表示收到了群禁言事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 被禁言成员 QQ |
operator_id | int64 | 操作者 QQ |
duration | int64 | 禁言时长(秒) |
sub_type | string | 子类型(ban/lift_ban) |
当 notice_type
为 group_card
时,表示收到了群成员名片变动事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 变动成员 QQ |
card_new | string | 新名片 |
card_old | string | 旧名片 |
当 notice_type
为 friend_add
时,表示收到了好友添加事件。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 新添加好友 QQ 号 |
当 notice_type
为 offline_file
时,表示收到了离线文件事件。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 发送者 QQ |
file | object | 文件信息 |
字段 | 类型 | 说明 |
---|---|---|
name | string | 文件名 |
size | int64 | 文件大小 |
url | string | 下载链接 |
当 notice_type
为 essence
时,表示收到了精华消息事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
sender_id | int64 | 发送者 QQ |
operator_id | int64 | 操作者 QQ |
message_id | int64 | 消息 ID |
sub_type | string | 子类型(add/delete) |
当 notice_type
为 client_status
时,表示收到了客户端状态事件。
字段 | 类型 | 说明 |
---|---|---|
client | object | 客户端信息 |
online | bool | 在线状态 |
当 notice_type
为 notify
且 sub_type
为 poke
时,表示收到了头像戳一戳事件。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 发送者 QQ |
sender_id | int64 | 好友 QQ (仅私聊) |
group_id | int64 | 群号(仅群聊) |
target_id | int64 | 被戳者 QQ |
poke_detail | PokeDetail | 戳一戳的详细信息 |
字段 | 类型 | 说明 |
---|---|---|
action | string | 操作名称,如“戳了戳” |
suffix | string | 后缀,未设置则未空 |
action_img_url | string | 操作图标 |
当 notice_type
为 notify
且 sub_type
为 lucky_king
时,表示收到了群红包运气王事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 发送者 |
target_id | int64 | 运气王 |
当 notice_type
为 notify
且 sub_type
为 honor
时,表示收到了群荣誉变更事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 操作者 |
honor_type | string | 荣誉类型 |
当 notice_type
为 notify
且 sub_type
为 title
时,表示收到了群头衔变更事件。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 操作者 |
title | string | 获得头衔 |
注意
对于 Shamrock 未实现的事件,会在标题添加标记 未实现
提示
所有上报事件都包含通用数据,详见 通用数据。
包含在通用数据中的字段不会在下面的表格中重复出现。
当 request_type
为 friend
时,表示收到了加好友请求。
字段 | 类型 | 说明 |
---|---|---|
user_id | int64 | 请求者 QQ 号 |
comment | string | 验证信息 |
flag | string | 请求 flag |
Shamrock 提供了快速处理的功能,可以在收到请求时快速处理请求。
字段 | 类型 | 说明 |
---|---|---|
approve | bool | 是否同意 |
remark | string | 备注 |
当 request_type
为 group
时,表示收到了加群请求/邀请。
字段 | 类型 | 说明 |
---|---|---|
group_id | int64 | 群号 |
user_id | int64 | 请求者 QQ 号 |
comment | string | 验证信息 |
flag | string | 请求 flag |
sub_type | string | 子类型(add/invite) |
Shamrock 提供了快速处理的功能,可以在收到请求时快速处理请求。
字段 | 类型 | 说明 |
---|---|---|
approve | bool | 是否同意 |
reason | string | 拒绝理由 |
提示
Shamrock
提供了一个图形化的配置界面,可进行简单的配置操作。
大部分配置简单易于理解,我们仅仅介绍部分难于理解的配置选项。
让 QQ 客户端
识别设备为平板,使其账号可在安卓和平板同时在线。
提示
除了 WebSocket
相关功能,其他功能的配置进行修改立即生效,无需重新启动 QQ
。 不建议使用 CQ 码
,因为在新一代机器人设计理念中,该操作过于落后,可能会出现许多问题。
注意
被动 WebSocket
在断线之后,每隔 5
秒尝试重新连接。
/storage/emulated/0
或 /sdcard
QQ
主目录: 内部存储目录 + /Android/data/com.tencent.mobileqq
Shamrock
主目录: QQ主目录 + /Tencent/Shamrock
将下方 JSON
文件创建在 Shamrock 主目录 + /config.json
请确保 JSON
格式正确。
{
+ rules: {
+ group_rule: {
+ black_list: [12345678], // 如果群号是`12345678`就跳过了哦!
+ white_list: []
+ },
+ private_rule: {
+ black_list: [12345678],
+ white_list: []
+ }
+ },
+ default_token: null,
+ active_websocket: {
+ port: 5800, // 主动WS监听的端口
+ token: 'aaaa1111,bbbb1111', // 同时允许两个token可使用|或,作为分割
+ tokens: ['aaaa1111', 'aaaa2222'], // 使用tokens实现多token,优先级比上面那个高
+ heartbeat_interval: 15000 // 设置为null则默认15000毫秒作为心跳间隔,0则为无心跳
+ },
+ passive_websocket: [
+ {
+ address: 'ws://xxxxxxxxx' // 这里是个例子,如果默认tk存在则使用默认token鉴权
+ },
+ {
+ address: 'ws://aaaaaaaaa',
+ token: 'aaa666', // 提供了特例化token,将不使用默认token
+ heartbeat_interval: 15000 // 设置为null则默认15000毫秒作为心跳间隔,0则为无心跳
+ }
+ ],
+ 'allow-temp-session': false // 是否允许临时消息
+}
+
参数名称 | 类型 | 作用 | 例子 |
---|---|---|---|
default_token | string | 默认 token ,HTTP接口/主被动WS 如果未单独定义 token ,则使用默认 token | aaa123456 |
记得把注释删掉哦?JSON5貌似也没有完全支持呢?该配置文件采用Json5标准!
在 HTTP Upgrade
请求头中添加 access_token
或 ticket
或 Authorization
头
例:
GET / HTTP/1.1
+Host: 192.168.3.4
+Upgrade: websocket
+Connection: upgrade
+Sec-WebSocket-Key: wwwwwwwwwwwwwwwwwwwwww==
+Sec-WebSocket-Version: 13
+Authorization: aaaa1111
+
大部分 Shamrock
的数据/缓存保存在 Shamrock 主目录
其中的日志可作为 Issue
内容,截取部分提交。
.
+├── tmpfiles # 临时文件目录
+│ ├── logs # 日志目录
+│ │ └── xxx.log # 日志文件
+├── config.json # 配置文件
+
8.9.68
,8.9.70
,8.9.73
,8.9.75
,8.9.78
,8.9.80
,8.9.81
,8.9.83
, 9.0.15
, 9.0.8
issue
Shamrock
内部已经做了对应处理,无需再进行任何操作。
注意
禁止使用隐藏应用列表等其他方法对 QQ
隐藏 Shamrock
,否则会出现 框架未激活
等异常。
部分模拟器采用的是 NAT
网络,请使用
adb forward xxx
+
将模拟器内的端口监听转发到电脑,别和我说为什么别人的模拟器可以在外面直接访问,你的不行就不行!
执行这个命令前,请注意adb是安卓调试桥工具包内的东西,请确保你的环境中有这个玩意,否则请前往谷歌官网或者刷机论坛之类的地方获取。
Shamrock
的部分配置需要重新启动 QQ
(请确保100%杀死QQ),然后在保证 Shamrock
存活的情况下启动 QQ
, Shamrock
的 WebSocket
相关的所有配置都需要重新启动生效。
注意
如果启用了 实验功能->免死金牌 在更新配置或更新模块后需重启系统,否则更新可能不会生效。
提交 issue
,我们会实现。
勾选 Shamrock
的自动唤醒,或者使用某些框架自带QQ死亡自动唤醒的XP, MAGISK...插件。你要习以为常这个操作,请安装一些软件进行按时重启或者闪退重启,同时QQ有时也会有概率杀死他自己。
断网式:这个操作源自于 MIUI
的 息屏省电
,请保证关闭锁屏后断开数据,这个选项,关闭睡眠模式。
缓慢式:使用某些息屏挂机软件,为 QQ
附加一个息屏挂机状态。安装息屏挂机软件 extinguish
,或者使用 MIUI游戏助手
息屏挂机
。
QQ修复了登录响应超时的问题,经测试(逍遥,夜神,MuMu)模拟器可正常使用,去QQ官网下载最新版本即可。
其次,模拟器部署请使用Shamrock的ALL版本,不要使用WSA(Windows安卓子系统)部署(有兼容问题)。
目前依旧在计划中,主要是不太会 docker
。
不需要,因为 OneBot
服务运行在 QQ
主进程中,无需 Shamrock
主进程运行(当然第一次使用 Shamrock
,请启动 Shamrock
,推送配置要求 Shamrock
和 QQ
都在运行)。
目前允许在中国移动云手机(Magisk
)和红手指云手机(Lspatch
)使用 Shamrock
,其它平台未测试。
Shamrock
的日志文件,按照时间和进程名称,保存在 /sdcard/Android/data/com.tencent.mobileqq/Tencent/Shamrock/log
文件夹内,请查看,提交 issue
时可以使用它们,注意请不要提交超过 50kb
的日志文件。
注意
Shamrock
的更新会围绕一个稳定的版本,如果盲目升级,可能导致 Shamrock
不可用。Shamrock
仍然处于快速开发阶段,可能会有大量 API
在未来版本中被删除或修改。
请不要过度依赖实验室中的功能,以免造成不必要的损失。
提示
目前推荐您下载 开发版本 的 Shamrock
Shamrock
的稳定版本,请访问 GitHub ReleasesShamrock
的开发版本(推荐),请访问 GitHub Actions注意
请使用 Shamrock
兼容的 QQ
客户端部署,见 支持的QQ版本
如果您使用了 QRSpeed/ShamrockNative
有关的插件,请确保 Shamrock
存活。
无论什么情况都请确保 QQ
客户端 存活。
禁止对 QQ
客户端 隐藏 Shamrock
,这将导致无法运行。
首次启动,必须打开 Shamrock
,否则无法推送配置文件导致失败。
在Mumu模拟器、逍遥模拟器......各种模拟器,其中对Shamrock兼容较好的是 Mumu模拟器 ,其它模拟器在测试情况下都出现高版本 QQ
闪退的问题。
注意
Shamrock
必须是 ALL版本
才能在模拟器正常使用
推荐的是 Xposed
的 Lsposed
框架,而不是 EdXposed
,在测试情况下, EdXP
出现了无法注入的问题。
查看 使用LSPatch
这个选择过于多元化,你可以使用 redroid
, docker-android
,需要注意的是部分框架要求开起虚拟化才能使用哦!目前依旧是采用 Lspatch+Shamrock
方案在 docker
部署,因为安装 magisk
类需要修补镜像,难以实现。
查看 使用LSPatch
使用PVE安装任意Windows系统之后,阅读文章 PVE开启嵌套虚拟化
之后可在系统内使用 安卓模拟器部署。
操作视频参考PVE下安装BlissOS及Magisk,LSP
之后可以直接使用 OpenShamrock
参考文章:KVM上部署Android 该文章使用的安卓版本可能较低,请使用安卓9+系统
WSA
拥有自带 Magisk
的版本,但是 QQ
在 WSA
在第二次启动时会闪退,怀疑为热更新问题。
QQ
客户端,登录你的 QQ
账号Shamrock
并在 Xposed
启用 Shamrock
模块,如果使用 LSPosed
则需要勾选模块作用域(默认QQ)Shamrock
并重新启动 QQ 客户端
,如果环境为 Xposed
则需要重启手机Shamrock
会显示已激活(需要成功登陆,才会显示已激活)LSPatch
并在 管理
页面选择 +
新建修补,可以选择从存储目录选择 QQAPK
或者直接使用已经安装过的 QQ
本地模式
,这样方便直接更新 Shamrock
模块而不用重新修补,缺点是需要 LSPatch
保持后台运行开始修补
,修补完成后会提示安装(如果已经安装会提示卸载)Shamrock
模块后在 管理
页面点击修补好的 QQ
选择 模块作用域
勾选上 Shamrock
模块然后保存Shamrock
并 重新启动 QQ 客户端
Shamrock
会显示已激活注意
使用 本地模式
修补后需要保持 LSPatch
在后台运行,优点是模块更新无需重新修补 QQ
使用 集成模式
修补后无需保持 LSPatch
在后台运行,缺点是模块更新后需要重新修补 QQ
注意
在 Android 12 以上的系统中,使用 VirtualXposed
会导致闪退。
注意
暂不支持太极使用,正在申请。
注意
对于 Shamrock 未实现的消息类型,会在标题添加标记 未实现
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | string | ✓ | ✓ | 是 | 合并转发resid |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int64 or string | ✓ | ✓ | 是 | 消息ID |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
data | string | ✓ | ✓ | 是 | JSON 数据 |
[CQ:json,data={"app":"com.tencent.structmsg","config":{"autosize":true,"ctime":1621234567,"forward":true,"token":"shamrock"},"desc":"这是一条 JSON 消息"...}]
+
{
+ "type": "json",
+ "data": {
+ "data": "{\"app\":\"com.tencent.structmsg\",\"config\":{\"autosize\":true,\"ctime\":1621234567,\"forward\":true,\"token\":\"shamrock\"},\"desc\":\"这是一条 JSON 消息\"...}"
+ }
+}
+
提示
在后续的文档中,我们将提供 CQ 码和消息段两种格式的消息示例,以便于您更好地理解。
CQ 码是一种特殊的文本格式,用于在消息中插入表情、图片、音乐、语音、视频、网页等内容。
这是一个 CQ 码的基本格式:
[CQ:action,param1=value1,param2=value2]
+
CQ 码中内容含义如下:
action
:动作,指示要进行的操作,如发送图片、音乐等。param
:对应动作需要的参数,如 qq
、file
等。value
:参数所对应的值,如 AT 的 QQ 号。例如,要 AT 一个 QQ 号为 123456
的用户,可以这样写:
[CQ:at,qq=123456] Hello!
+
他会被解析为:
@小明 Hello!
+
CQ 码由 [
和 ]
并以 ,
分隔的多个部分组成,因此如果要在 CQ 码中使用这些字符,需要进行转义。
原字符 | 转义字符 |
---|---|
& | & |
[ | [ |
] | ] |
, | , |
消息段是新一代的消息格式,采用 JSON 格式。
消息段是一个 JSON 对象,以下是一个消息段的基本格式:
{
+ "type": "text", // 消息段类型
+ "data": {
+ // 消息段数据/参数
+ "text": "Hello!"
+ }
+}
+
例如,要 AT 一个 QQ 号为 123456
的用户,可以这样写:
{
+ "type": "at",
+ "data": {
+ "qq": 123456
+ }
+}
+
他会被解析为:
@小明
+
消息段可以组合在一起,形成一个消息。
[
+ {
+ "type": "at",
+ "data": {
+ "qq": 123456
+ }
+ },
+ {
+ "type": "text",
+ "data": {
+ "text": " Hello!"
+ }
+ }
+]
+
以上消息段会被解析为:
@小明 Hello!
+
提示
对于下述消息类型, 涉及 文件地址
的参数规则如下:
file://
开头。http://
或 https://
开头。base64://
开头。字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
file | string | ✓ | ✓ | 是 | 图片文件地址 |
url | string | ✓ | ✓ | 否 | 图片链接地址 |
type | string | ✓ | x | 否 | 图片类型, 分为show , flash , original |
subType | int32 | ✓ | x | 否 | 图片子类型 |
[CQ:image,file=file:///sdcard/Pictures/shamrock.png]
+
{
+ "type": "image",
+ "data": {
+ "file": "file:///sdcard/Pictures/shamrock.png"
+ }
+}
+
value | 说明 |
---|---|
0 | 正常图片 |
1 | 表情包, 在客户端会被分类到表情包图片并缩放显示 |
2 | 热图 |
3 | 斗图 |
4 | 智图? |
7 | 贴图 |
8 | 自拍 |
9 | 贴图广告? |
10 | 有待测试 |
13 | 热搜图 |
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
file | string | × | ✓ | 是 | 语音文件地址 |
url | string | ✓ | ✓ | 否 | 语音链接地址 |
magic | bool | × | ✓ | 否 | 是否为魔法语音 |
[CQ:record,file=file:///sdcard/Music/shamrock.mp3]
+
{
+ "type": "record",
+ "data": {
+ "file": "file:///sdcard/Music/shamrock.mp3"
+ }
+}
+
注意
发送语音消息需要安装语音引擎,可以在 这里 查看。
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
file | string | × | ✓ | 是 | 视频文件地址 |
[CQ:video,file=file:///sdcard/Movies/shamrock.mp4]
+
{
+ "type": "video",
+ "data": {
+ "file": "file:///sdcard/Movies/shamrock.mp4"
+ }
+}
+
提示
当 qq
字段为 "0"
或"all"
时, 表示 AT 全体成员。
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
string | ✓ | ✓ | 否 | QQ 号 |
注意
将在未来实现 qq
字段为 online
和 admin
时的功能。
[CQ:at,qq=123456]
+
{
+ "type": "at",
+ "data": {
+ "qq": "123456"
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | ✓ | 是 | 表情 ID |
big | bool | ✓ | X | 否 | 是否是大表情 |
提示
表情 ID 可以在 这里 查看。
[CQ:face,id=351,big=true]
+
{
+ "type": "face",
+ "data": {
+ "id": 351,
+ "big": true
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | ✓ | 是 | 表情 ID |
count | int | ✓ | √ | 是 | 数量 |
提示
表情 ID 可以在 这里 查看。
[CQ:bubble_face,id=351,count=114514]
+
{
+ "type": "bubble_face",
+ "data": {
+ "id": 351,
+ "count": 114514
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | ✓ | 是 | 消息 ID |
[CQ:reply,id=1]
+
{
+ "type": "reply",
+ "data": {
+ "id": 1
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | x | 是 | 5 没中, 4 擦边没中, 3 卡框, 2 擦边中, 1 正中 |
[CQ:basketball,id=1]
+
{
+ "type": "basketball",
+ "data": {
+ "id": 1
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | x | 是 | 锤 3 剪 2 布 1 |
[CQ:new_rps,id=1]
+
{
+ "type": "new_rps",
+ "data": {
+ "id": 1
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | x | 是 | 点数 ID |
[CQ:new_dice,id=1]
+
{
+ "type": "new_dice",
+ "data": {
+ "id": 1
+ }
+}
+
[CQ:dice]
+
{
+ "type": "dice",
+ "data": {}
+}
+
[CQ:rps]
+
{
+ "type": "rps",
+ "data": {}
+}
+
注意
Shamrock 对于戳一戳的定义与 go-cqhttp
不同。
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
type | int | ✓ | ✓ | 是 | 戳一戳类型 |
id | int | ✓ | ✓ | 是 | 戳一戳 ID |
strength | int | ✓ | ✓ | 否 | 戳一戳强度(1-5 默认1) |
[CQ:poke,type=1,id=10000]
+
{
+ "type": "poke",
+ "data": {
+ "type": 1,
+ "id": 10000,
+ "strength": 1
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
id | int | ✓ | ✓ | 是 | QQ号 |
[CQ:touch,id=123456]
+
{
+ "type": "touch",
+ "data": {
+ "id": 123456
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
type | string | ✓ | ✓ | 是 | 音乐类型(qq /163 ) |
id | int | ✓ | ✓ | 是 | 音乐 ID |
[CQ:music,type=qq,id=123456]
+
{
+ "type": "music",
+ "data": {
+ "type": "qq",
+ "id": 123456
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
type | string | ✓ | ✓ | 是 | 音乐类型(自定义请使用 custom |
url | string | ✓ | ✓ | 是 | 跳转链接 |
audio | string | ✓ | ✓ | 是 | 音乐音频链接 |
title | string | ✓ | ✓ | 是 | 标题 |
singer | string | ✓ | ✓ | 是 | 歌手 |
image | string | ✓ | ✓ | 否 | 封面图片链接 |
[CQ:music,type=custom,url=https://example.com,audio=https://example.com/music.mp3,title=Music,singer=Music,image=https://example.com/image.jpg]
+
{
+ "type": "music",
+ "data": {
+ "type": "custom",
+ "url": "https://example.com",
+ "audio": "https://example.com/music.mp3",
+ "title": "Music",
+ "singer": "Music",
+ "image": "https://example.com/image.jpg"
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
city | string | ✓ | ✓ | 否 | 城市名称 |
code | string | ✓ | ✓ | 否 | 城市代码 |
[CQ:weather,city=上海]
+
{
+ "type": "weather",
+ "data": {
+ "city": "上海"
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
lat | float | ✓ | ✓ | 是 | 纬度 |
lon | float | ✓ | ✓ | 是 | 经度 |
title | string | ✓ | × | 否 | 标题 |
content | string | ✓ | × | 否 | 内容 |
[CQ:location,lat=39.915168,lon=116.403875]
+
{
+ "type": "location",
+ "data": {
+ "lat": 39.915168,
+ "lon": 116.403875
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
url | string | ✓ | ✓ | 是 | 链接地址 |
title | string | ✓ | × | 是 | 标题 |
content | string | ✓ | × | 否 | 内容 |
image | string | ✓ | × | 否 | 图片链接 |
file | string | ✓ | × | 否 | 文件链接 |
[CQ:share,url=https://example.com,title=Example,content=Example,image=https://example.com/image.jpg,file=https://example.com/file.zip]
+
{
+ "type": "share",
+ "data": {
+ "url": "https://example.com",
+ "title": "Example",
+ "content": "Example",
+ "image": "https://example.com/image.jpg",
+ "file": "https://example.com/file.zip"
+ }
+}
+
字段 | 类型 | 收 | 发 | 必填 | 说明 |
---|---|---|---|---|---|
int | ✓ | ✓ | 是 | QQ 号 | |
id | int | ✓ | ✓ | 是 | 礼物 ID |
[CQ:gift,qq=123456,id=10000]
+
{
+ "type": "gift",
+ "data": {
+ "qq": 123456,
+ "id": 10000
+ }
+}
+