snowluma: SnowLuma (OneBot 11) Go SDK, drop-in compatible with napcat

This commit is contained in:
2026-10-25 15:45:35 +08:00
commit 9a5f870225
19 changed files with 3617 additions and 0 deletions

528
api_ext.go Normal file
View File

@ -0,0 +1,528 @@
package snowluma
import "context"
// 本文件收录 SnowLuma 独有、napcat 未覆盖的扩展动作。
// 返回结构未结构化的动作统一返回 jsonRaw(map),需要更细结构时用 Call 裸调自行解码。
// 未收录的动作一律可通过 Client.Call / Context.Call 裸调。
// ---- 闪传(flash transfer) ----
// CreateFlashTask 创建闪传任务,返回 fileset 信息。
func (a API) CreateFlashTask(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "create_flash_task", params)
}
// GetFilesetInfo 获取文件集信息。
func (a API) GetFilesetInfo(ctx context.Context, filesetID string) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_fileset_info", H{"fileset_id": filesetID})
}
// GetFlashFileList 获取闪传文件集内的文件列表。
func (a API) GetFlashFileList(ctx context.Context, filesetID string) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_flash_file_list", H{"fileset_id": filesetID})
}
// ListFilesets 列出当前账号的所有闪传文件集。
func (a API) ListFilesets(ctx context.Context) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "list_filesets", H{})
}
// GetFlashFileURL 获取闪传文件链接。
func (a API) GetFlashFileURL(ctx context.Context, filesetID, fileID string) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_flash_file_url", H{"fileset_id": filesetID, "file_id": fileID})
}
// GetShareLink 获取文件分享链接。
func (a API) GetShareLink(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_share_link", params)
}
// DeleteFlashFile 删除闪传文件。
func (a API) DeleteFlashFile(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "delete_flash_file", params)
return err
}
// RenameFlashFile 重命名闪传文件。
func (a API) RenameFlashFile(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "rename_flash_file", params)
return err
}
// DownloadFileset 解析闪传文件下载直链(不下载,由调用方实现下载)。
func (a API) DownloadFileset(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "download_fileset", params)
}
// SendFlashMsg 发送闪传消息(私聊或群聊,引用 fileset_id 让对端下载)。
func (a API) SendFlashMsg(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "send_flash_msg", params)
}
// GetFilesetID 从 QQ 闪传分享码或官方分享链接获取 fileset_id。
func (a API) GetFilesetID(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_fileset_id", params)
}
// ---- Ark 卡片 ----
// SendGroupArkShare 分享群 Ark 卡片(NapCat 标准名)。
func (a API) SendGroupArkShare(ctx context.Context, groupID int64, ark string) error {
_, err := CallAPI[jsonNull](a.call, ctx, "send_group_ark_share", H{"group_id": groupID, "ark": ark})
return err
}
// SendArkShare 分享用户/群 Ark 卡片(NapCat 标准名)。
func (a API) SendArkShare(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "send_ark_share", params)
return err
}
// SharePeer 分享用户/群推荐 Ark 卡片。
func (a API) SharePeer(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "share_peer", params)
}
// ShareGroupEx 分享群 Ark 卡片。
func (a API) ShareGroupEx(ctx context.Context, groupID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "share_group_ex", H{"group_id": groupID})
}
// SendTuwenArk 发送图文 Ark 卡片(私聊/群聊)。
func (a API) SendTuwenArk(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "send_tuwen_ark", params)
return err
}
// ClickInlineKeyboardButton 点击内联键盘按钮。
func (a API) ClickInlineKeyboardButton(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "click_inline_keyboard_button", params)
return err
}
// ---- 群待办 ----
// GetGroupTodoList 获取群待办列表。
func (a API) GetGroupTodoList(ctx context.Context, groupID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_group_todo_list", H{"group_id": groupID})
}
// SetGroupTodo 设置群待办。
func (a API) SetGroupTodo(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_todo", params)
return err
}
// CompleteGroupTodo 完成群待办。
func (a API) CompleteGroupTodo(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "complete_group_todo", params)
return err
}
// CancelGroupTodo 取消群待办。
func (a API) CancelGroupTodo(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "cancel_group_todo", params)
return err
}
// ---- 群分类标签 / 群管理扩展 ----
// GetGroupTags 读取某个群分类下的资料标签。
func (a API) GetGroupTags(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_group_tags", params)
}
// AddGroupTag 向某个群分类添加资料标签。
func (a API) AddGroupTag(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "add_group_tag", params)
return err
}
// DeleteGroupTag 从某个群分类移除资料标签。
func (a API) DeleteGroupTag(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "delete_group_tag", params)
return err
}
// GetGroupAdminSettings 获取群管理设置的当前值。
func (a API) GetGroupAdminSettings(ctx context.Context, groupID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_group_admin_settings", H{"group_id": groupID})
}
// SetGroupKickMembers 批量踢出群成员。
func (a API) SetGroupKickMembers(ctx context.Context, groupID int64, userIDs []int64, rejectAddRequest bool) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_kick_members", H{"group_id": groupID, "user_ids": userIDs, "reject_add_request": rejectAddRequest})
return err
}
// SetGroupAddOption 设置加群选项。
func (a API) SetGroupAddOption(ctx context.Context, groupID int64, option string) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_add_option", H{"group_id": groupID, "option": option})
return err
}
// SetGroupSearch 设置群被搜索方式(群指纹 / 群号搜索开关)。
func (a API) SetGroupSearch(ctx context.Context, groupID int64, searchable bool) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_search", H{"group_id": groupID, "searchable": searchable})
return err
}
// SetGroupMemberInvitePolicy 设置群成员邀请策略。
func (a API) SetGroupMemberInvitePolicy(ctx context.Context, groupID int64, policy string) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_member_invite_policy", H{"group_id": groupID, "policy": policy})
return err
}
// SetGroupNewMemberHistoryVisibility 设置新成员是否可查看历史消息。
func (a API) SetGroupNewMemberHistoryVisibility(ctx context.Context, groupID int64, visible bool) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_new_member_history_visibility", H{"group_id": groupID, "visible": visible})
return err
}
// SetGroupMemberPermissions 设置群成员权限(仅群主可改)。
func (a API) SetGroupMemberPermissions(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_member_permissions", params)
return err
}
// SetGroupRobotAddOption 设置群机器人加群选项。
func (a API) SetGroupRobotAddOption(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_robot_add_option", params)
return err
}
// ---- 群相册 ----
// GetGroupAlbumList 获取群相册列表。
func (a API) GetGroupAlbumList(ctx context.Context, groupID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_group_album_list", H{"group_id": groupID})
}
// GetQunAlbumList 获取群相册列表(NapCat 风格分页)。
func (a API) GetQunAlbumList(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_qun_album_list", params)
}
// UploadImageToQunAlbum 上传图片到群相册。
func (a API) UploadImageToQunAlbum(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "upload_image_to_qun_album", params)
}
// UploadVideoToQunAlbum 上传视频到群相册。
func (a API) UploadVideoToQunAlbum(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "upload_video_to_qun_album", params)
}
// GetGroupAlbumMediaList 获取相册图片/视频列表(分页)。
func (a API) GetGroupAlbumMediaList(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_group_album_media_list", params)
}
// DoGroupAlbumComment 评论相册媒体。
func (a API) DoGroupAlbumComment(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "do_group_album_comment", params)
return err
}
// SetGroupAlbumMediaLike 点赞相册媒体。
func (a API) SetGroupAlbumMediaLike(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_album_media_like", params)
return err
}
// CancelGroupAlbumMediaLike 取消点赞相册媒体。
func (a API) CancelGroupAlbumMediaLike(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "cancel_group_album_media_like", params)
return err
}
// DelGroupAlbumMedia 删除相册图片/视频。
func (a API) DelGroupAlbumMedia(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "del_group_album_media", params)
return err
}
// ---- QQ 空间 ----
// GetQzoneMsgList 获取空间动态列表(自己的或目标用户的)。
func (a API) GetQzoneMsgList(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_qzone_msg_list", params)
}
// GetQzoneMsgDetail 获取动态详情(含一页评论)。
func (a API) GetQzoneMsgDetail(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_qzone_msg_detail", params)
}
// GetQzoneFeeds 获取好友动态流(结构化内容 + 游标)。
func (a API) GetQzoneFeeds(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_qzone_feeds", params)
}
// SendQzoneMsg 发布空间动态(文本/图片,权限)。
func (a API) SendQzoneMsg(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "send_qzone_msg", params)
}
// DeleteQzoneMsg 删除动态(按 tid)。
func (a API) DeleteQzoneMsg(ctx context.Context, tid string) error {
_, err := CallAPI[jsonNull](a.call, ctx, "delete_qzone_msg", H{"tid": tid})
return err
}
// SetQzoneMsgRight 修改动态可见权限。
func (a API) SetQzoneMsgRight(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_qzone_msg_right", params)
return err
}
// LikeQzone 点赞空间动态。
func (a API) LikeQzone(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "like_qzone", params)
return err
}
// UnlikeQzone 取消点赞空间动态。
func (a API) UnlikeQzone(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "unlike_qzone", params)
return err
}
// CommentQzone 评论/回复空间动态(可带图片)。
func (a API) CommentQzone(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "comment_qzone", params)
return err
}
// SetQzoneBan 在自己的空间黑名单中拉黑/解除拉黑。
func (a API) SetQzoneBan(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_qzone_ban", params)
return err
}
// ---- 系统表情 ----
// FetchSysFaces 获取 QQ 系统表情目录(按包)。
func (a API) FetchSysFaces(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "fetch_sys_faces", params)
}
// FetchFaceEntity 按 face_id 获取单个表情。
func (a API) FetchFaceEntity(ctx context.Context, faceID int) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "fetch_face_entity", H{"face_id": faceID})
}
// SearchSysFaces 按 id/名称/别名/包搜索系统表情。
func (a API) SearchSysFaces(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "search_sys_faces", params)
}
// FetchSuperFaceID 判断某表情是否使用 super-face 格式。
func (a API) FetchSuperFaceID(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "fetch_super_face_id", params)
}
// ---- 流式接口 ----
// UploadFileStream 分块上传文件到 bot 本地路径(stream)。
func (a API) UploadFileStream(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "upload_file_stream", params)
}
// CleanStreamTempFile 清理流式上传/下载临时目录。
func (a API) CleanStreamTempFile(ctx context.Context) error {
_, err := CallAPI[jsonNull](a.call, ctx, "clean_stream_temp_file", H{})
return err
}
// DownloadFileStream 流式下载文件(本地/URL/缓存媒体,分块)。
func (a API) DownloadFileStream(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "download_file_stream", params)
}
// DownloadFileImageStream 流式下载图片。
func (a API) DownloadFileImageStream(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "download_file_image_stream", params)
}
// DownloadFileRecordStream 流式下载语音。
func (a API) DownloadFileRecordStream(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "download_file_record_stream", params)
}
// TestDownloadStream 推送 10 帧测试数据验证流式传输。
func (a API) TestDownloadStream(ctx context.Context) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "test_download_stream", H{})
}
// ---- 其他扩展 ----
// SendCustomFace 发送账号自定义表情(emoji_id/MD5)作为图片。
func (a API) SendCustomFace(ctx context.Context, params H) (MessageID, error) {
out, err := CallAPI[messageIDResult](a.call, ctx, "send_custom_face", params)
return MessageID(out.MessageID), err
}
// GetGroupShareLink 获取群分享/邀请链接。
func (a API) GetGroupShareLink(ctx context.Context, groupID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_group_share_link", H{"group_id": groupID})
}
// SetGroupReaction 群聊表情回应。
func (a API) SetGroupReaction(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_reaction", params)
return err
}
// FetchPttText 获取语音转文字结果(别名 get_ptt_text / get_record_text)。
func (a API) FetchPttText(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "fetch_ptt_text", params)
}
// SetFriendRemark 设置好友备注。
func (a API) SetFriendRemark(ctx context.Context, userID int64, remark string) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_friend_remark", H{"user_id": userID, "remark": remark})
return err
}
// SetGroupRemark 设置群备注。
func (a API) SetGroupRemark(ctx context.Context, groupID int64, remark string) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_group_remark", H{"group_id": groupID, "remark": remark})
return err
}
// SetDiyOnlineStatus 设置自定义在线状态。
func (a API) SetDiyOnlineStatus(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_diy_online_status", params)
return err
}
// GetGroupIgnoredNotifies 获取被过滤的入群请求。
func (a API) GetGroupIgnoredNotifies(ctx context.Context, groupID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_group_ignored_notifies", H{"group_id": groupID})
}
// GetGroupIgnoreAddRequest 获取被忽略的入群请求(NapCat)。
func (a API) GetGroupIgnoreAddRequest(ctx context.Context, groupID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_group_ignore_add_request", H{"group_id": groupID})
}
// GetGroupSignedList 获取群今日打卡列表。
func (a API) GetGroupSignedList(ctx context.Context, groupID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_group_signed_list", H{"group_id": groupID})
}
// FetchCustomFaceDetail 获取自定义表情详情。
func (a API) FetchCustomFaceDetail(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "fetch_custom_face_detail", params)
}
// GetEmojiLikes 获取表情回应用户。
func (a API) GetEmojiLikes(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_emoji_likes", params)
}
// GetMsgEmojiLikes 获取一条消息的全部表情回应。
func (a API) GetMsgEmojiLikes(ctx context.Context, messageID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_msg_emoji_likes", H{"message_id": messageID})
}
// SetFriendsCategory 移动好友到指定分组。
func (a API) SetFriendsCategory(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "set_friends_category", params)
return err
}
// GetUnidirectionalFriendList 获取单向好友列表。
func (a API) GetUnidirectionalFriendList(ctx context.Context) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_unidirectional_friend_list", H{})
}
// GetClientkey 获取 clientkey + 过期时间 + index。
func (a API) GetClientkey(ctx context.Context, domain string) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_clientkey", H{"domain": domain})
}
// GetGroupDetailInfo 获取群详细信息。
func (a API) GetGroupDetailInfo(ctx context.Context, groupID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_group_detail_info", H{"group_id": groupID})
}
// TransGroupFile 转存群文件。
func (a API) TransGroupFile(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "trans_group_file", params)
return err
}
// BotExit 退出机器人。
func (a API) BotExit(ctx context.Context) error {
_, err := CallAPI[jsonNull](a.call, ctx, "bot_exit", H{})
return err
}
// GetAIRecord 生成 AI 语音。
func (a API) GetAIRecord(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_ai_record", params)
}
// RequestDecryptKey 请求数据库解密密钥。
func (a API) RequestDecryptKey(ctx context.Context) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "request_decrypt_key", H{})
}
// GetRKeyServer 获取 rkey 服务器信息。
func (a API) GetRKeyServer(ctx context.Context) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_rkey_server", H{})
}
// SendPacket 发送原始 SSO 包(cmd + hex data)。
func (a API) SendPacket(ctx context.Context, cmd string, data string) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "send_packet", H{"cmd": cmd, "data": data})
}
// GetCollectionList 获取收藏列表。
func (a API) GetCollectionList(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_collection_list", params)
}
// GetFriendDress 获取指定 QQ 号正在使用的个性装扮。
func (a API) GetFriendDress(ctx context.Context, userID int64) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "_get_friend_dress", H{"user_id": userID})
}
// UploadForwardMsg 上传合并转发资源。
func (a API) UploadForwardMsg(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "upload_forward_msg", params)
}
// ---- 群文件扩展 ----
// MoveGroupFile 在群文件夹间移动文件。
func (a API) MoveGroupFile(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "move_group_file", params)
return err
}
// RenameGroupFile 重命名群文件。
func (a API) RenameGroupFile(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "rename_group_file", params)
return err
}
// DeleteGroupFileFolder 删除群文件夹(SnowLuma 标准名,与 DeleteGroupFolder 等价)。
func (a API) DeleteGroupFileFolder(ctx context.Context, groupID int64, folderID string) error {
_, err := CallAPI[jsonNull](a.call, ctx, "delete_group_file_folder", H{"group_id": groupID, "folder_id": folderID})
return err
}
// RenameGroupFileFolder 重命名群文件夹。
func (a API) RenameGroupFileFolder(ctx context.Context, params H) error {
_, err := CallAPI[jsonNull](a.call, ctx, "rename_group_file_folder", params)
return err
}
// GetPrivateFileURL 获取私聊文件下载链接。
func (a API) GetPrivateFileURL(ctx context.Context, params H) (jsonRaw, error) {
return CallAPI[jsonRaw](a.call, ctx, "get_private_file_url", params)
}