mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
feat: GetGroupRootFiles
This commit is contained in:
parent
b7efbdf239
commit
cd930c43b6
@ -1,11 +1,11 @@
|
||||
import { ReceiveCmdS } from '../hook'
|
||||
import { Group, GroupMember, GroupMemberRole, GroupNotifies, GroupRequestOperateTypes, GroupNotify } from '../types'
|
||||
import { Group, GroupMember, GroupMemberRole, GroupNotifies, GroupRequestOperateTypes, GroupNotify, GetFileListParam } from '../types'
|
||||
import { invoke, NTClass, NTMethod } from '../ntcall'
|
||||
import { GeneralCallResult } from '../services'
|
||||
import { NTQQWindows } from './window'
|
||||
import { getSession } from '../wrapper'
|
||||
import { NTEventDispatch } from '@/common/utils/eventTask'
|
||||
import { NodeIKernelGroupListener } from '../listeners'
|
||||
import { NodeIKernelGroupListener, OnGroupFileInfoUpdateParams } from '../listeners'
|
||||
import { NodeIKernelGroupService } from '../services'
|
||||
import { Service, Context } from 'cordis'
|
||||
import { isNumeric } from '@/common/utils/misc'
|
||||
@ -301,4 +301,24 @@ export class NTQQGroupApi extends Service {
|
||||
async deleteGroupFile(groupId: string, fileIdList: string[]) {
|
||||
return await invoke('nodeIKernelRichMediaService/deleteGroupFile', [{ groupId, busIdList: [102], fileIdList }, null])
|
||||
}
|
||||
|
||||
async getGroupFileList(groupId: string, fileListForm: GetFileListParam) {
|
||||
invoke('nodeIKernelMsgListener/onGroupFileInfoUpdate', [], { classNameIsRegister: true })
|
||||
const data = await invoke<{ fileInfo: OnGroupFileInfoUpdateParams }>(
|
||||
'nodeIKernelRichMediaService/getGroupFileList',
|
||||
[
|
||||
{
|
||||
groupId,
|
||||
fileListForm
|
||||
},
|
||||
null,
|
||||
],
|
||||
{
|
||||
cbCmd: 'nodeIKernelMsgListener/onGroupFileInfoUpdate',
|
||||
afterFirstCmd: false,
|
||||
cmdCB: (payload, result) => payload.fileInfo.reqId === result
|
||||
}
|
||||
)
|
||||
return data.fileInfo.item
|
||||
}
|
||||
}
|
||||
|
@ -23,15 +23,55 @@ export interface OnRichMediaDownloadCompleteParams {
|
||||
userUsedSpacePerDay: unknown | null
|
||||
}
|
||||
|
||||
export interface onGroupFileInfoUpdateParamType {
|
||||
export interface OnGroupFileInfoUpdateParams {
|
||||
retCode: number
|
||||
retMsg: string
|
||||
clientWording: string
|
||||
isEnd: boolean
|
||||
item: Array<any>
|
||||
allFileCount: string
|
||||
nextIndex: string
|
||||
reqId: string
|
||||
item: {
|
||||
peerId: string
|
||||
type: number
|
||||
folderInfo?: {
|
||||
folderId: string
|
||||
parentFolderId: string
|
||||
folderName: string
|
||||
createTime: number
|
||||
modifyTime: number
|
||||
createUin: string
|
||||
creatorName: string
|
||||
totalFileCount: number
|
||||
modifyUin: string
|
||||
modifyName: string
|
||||
usedSpace: string
|
||||
}
|
||||
fileInfo?: {
|
||||
fileModelId: string
|
||||
fileId: string
|
||||
fileName: string
|
||||
fileSize: string
|
||||
busId: number
|
||||
uploadedSize: string
|
||||
uploadTime: number
|
||||
deadTime: number
|
||||
modifyTime: number
|
||||
downloadTimes: number
|
||||
sha: string
|
||||
sha3: string
|
||||
md5: string
|
||||
uploaderLocalPath: string
|
||||
uploaderName: string
|
||||
uploaderUin: string
|
||||
parentFolderId: string
|
||||
localPath: string
|
||||
transStatus: number
|
||||
transType: number
|
||||
elementId: string
|
||||
isFolder: boolean
|
||||
}
|
||||
}[]
|
||||
allFileCount: number
|
||||
nextIndex: number
|
||||
reqId: number
|
||||
}
|
||||
|
||||
// {
|
||||
@ -82,7 +122,7 @@ export interface IKernelMsgListener {
|
||||
|
||||
onGroupFileInfoAdd(groupItem: unknown): void
|
||||
|
||||
onGroupFileInfoUpdate(groupFileListResult: onGroupFileInfoUpdateParamType): void
|
||||
onGroupFileInfoUpdate(groupFileListResult: OnGroupFileInfoUpdateParams): void
|
||||
|
||||
onGroupGuildUpdate(groupGuildNotifyInfo: unknown): void
|
||||
|
||||
@ -295,7 +335,7 @@ export class MsgListener implements IKernelMsgListener {
|
||||
|
||||
}
|
||||
|
||||
onGroupFileInfoUpdate(groupFileListResult: onGroupFileInfoUpdateParamType) {
|
||||
onGroupFileInfoUpdate(groupFileListResult: OnGroupFileInfoUpdateParams) {
|
||||
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ interface InvokeOptions<ReturnType> {
|
||||
channel?: NTChannel
|
||||
classNameIsRegister?: boolean
|
||||
cbCmd?: string | string[]
|
||||
cmdCB?: (payload: ReturnType) => boolean
|
||||
cmdCB?: (payload: ReturnType, result: unknown) => boolean
|
||||
afterFirstCmd?: boolean // 是否在methodName调用完之后再去hook cbCmd
|
||||
timeout?: number
|
||||
}
|
||||
@ -132,12 +132,13 @@ export function invoke<
|
||||
}
|
||||
}
|
||||
else {
|
||||
let result: unknown
|
||||
// 这里的callback比较特殊,QQ后端先返回是否调用成功,再返回一条结果数据
|
||||
const secondCallback = () => {
|
||||
const hookId = registerReceiveHook<R>(options.cbCmd!, (payload) => {
|
||||
// log(methodName, "second callback", cbCmd, payload, cmdCB);
|
||||
if (!!options.cmdCB) {
|
||||
if (options.cmdCB(payload)) {
|
||||
if (options.cmdCB(payload, result)) {
|
||||
removeReceiveHook(hookId)
|
||||
success = true
|
||||
resolve(payload)
|
||||
@ -151,14 +152,14 @@ export function invoke<
|
||||
})
|
||||
}
|
||||
!afterFirstCmd && secondCallback()
|
||||
hookApiCallbacks[callbackId] = (result: GeneralCallResult) => {
|
||||
if (result?.result === 0 || result === undefined) {
|
||||
//log(`${params.methodName} callback`, result)
|
||||
hookApiCallbacks[callbackId] = (res: GeneralCallResult) => {
|
||||
result = res
|
||||
if (res?.result === 0 || ['undefined', 'number'].includes(typeof res)) {
|
||||
afterFirstCmd && secondCallback()
|
||||
}
|
||||
else {
|
||||
log('ntqq api call failed,', method, result)
|
||||
reject(`ntqq api call failed, ${method}, ${result.errMsg}`)
|
||||
log('ntqq api call failed,', method, res)
|
||||
reject(`ntqq api call failed, ${method}, ${res.errMsg}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
62
src/onebot11/action/go-cqhttp/GetGroupRootFiles.ts
Normal file
62
src/onebot11/action/go-cqhttp/GetGroupRootFiles.ts
Normal file
@ -0,0 +1,62 @@
|
||||
import BaseAction from '../BaseAction'
|
||||
import { ActionName } from '../types'
|
||||
import { OB11GroupFile, OB11GroupFileFolder } from '../../types'
|
||||
|
||||
interface Payload {
|
||||
group_id: string | number
|
||||
file_count: string | number
|
||||
}
|
||||
|
||||
interface Response {
|
||||
files: OB11GroupFile[]
|
||||
folders: OB11GroupFileFolder[]
|
||||
}
|
||||
|
||||
export class GetGroupRootFiles extends BaseAction<Payload, Response> {
|
||||
actionName = ActionName.GoCQHTTP_GetGroupRootFiles
|
||||
|
||||
async _handle(payload: Payload) {
|
||||
const data = await this.ctx.ntGroupApi.getGroupFileList(payload.group_id.toString(), {
|
||||
sortType: 1,
|
||||
fileCount: +(payload.file_count ?? 50),
|
||||
startIndex: 0,
|
||||
sortOrder: 2,
|
||||
showOnlinedocFolder: 0,
|
||||
})
|
||||
|
||||
this.ctx.logger.info(data)
|
||||
|
||||
return {
|
||||
files: data.filter(item => item.fileInfo)
|
||||
.map(item => {
|
||||
const file = item.fileInfo!
|
||||
return {
|
||||
group_id: +item.peerId,
|
||||
file_id: file.fileId,
|
||||
file_name: file.fileName,
|
||||
busid: file.busId,
|
||||
file_size: +file.fileSize,
|
||||
upload_time: file.uploadTime,
|
||||
dead_time: file.deadTime,
|
||||
modify_time: file.modifyTime,
|
||||
download_times: file.downloadTimes,
|
||||
uploader: +file.uploaderUin,
|
||||
uploader_name: file.uploaderName
|
||||
}
|
||||
}),
|
||||
folders: data.filter(item => item.folderInfo)
|
||||
.map(item => {
|
||||
const folder = item.folderInfo!
|
||||
return {
|
||||
group_id: +item.peerId,
|
||||
folder_id: folder.folderId,
|
||||
folder_name: folder.folderName,
|
||||
create_time: folder.createTime,
|
||||
creator: +folder.createUin,
|
||||
creator_name: folder.creatorName,
|
||||
total_file_count: folder.totalFileCount
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
@ -59,6 +59,7 @@ import { GetGroupSystemMsg } from './go-cqhttp/GetGroupSystemMsg'
|
||||
import { CreateGroupFileFolder } from './go-cqhttp/CreateGroupFileFolder'
|
||||
import { DelGroupFolder } from './go-cqhttp/DelGroupFolder'
|
||||
import { GetGroupAtAllRemain } from './go-cqhttp/GetGroupAtAllRemain'
|
||||
import { GetGroupRootFiles } from './go-cqhttp/GetGroupRootFiles'
|
||||
|
||||
export function initActionMap(adapter: Adapter) {
|
||||
const actionHandlers = [
|
||||
@ -124,7 +125,8 @@ export function initActionMap(adapter: Adapter) {
|
||||
new GetGroupSystemMsg(adapter),
|
||||
new CreateGroupFileFolder(adapter),
|
||||
new DelGroupFolder(adapter),
|
||||
new GetGroupAtAllRemain(adapter)
|
||||
new GetGroupAtAllRemain(adapter),
|
||||
new GetGroupRootFiles(adapter)
|
||||
]
|
||||
const actionMap = new Map<string, BaseAction<any, any>>()
|
||||
for (const action of actionHandlers) {
|
||||
|
@ -77,5 +77,6 @@ export enum ActionName {
|
||||
GoCQHTTP_GetGroupSystemMsg = 'get_group_system_msg',
|
||||
GoCQHTTP_CreateGroupFileFolder = 'create_group_file_folder',
|
||||
GoCQHTTP_DelGroupFolder = 'delete_group_folder',
|
||||
GoCQHTTP_GetGroupAtAllRemain = 'get_group_at_all_remain'
|
||||
GoCQHTTP_GetGroupAtAllRemain = 'get_group_at_all_remain',
|
||||
GoCQHTTP_GetGroupRootFiles = 'get_group_root_files'
|
||||
}
|
||||
|
@ -310,3 +310,27 @@ export interface OB11Status {
|
||||
online: boolean | null
|
||||
good: boolean
|
||||
}
|
||||
|
||||
export interface OB11GroupFile {
|
||||
group_id: number
|
||||
file_id: string
|
||||
file_name: string
|
||||
busid: number
|
||||
file_size: number
|
||||
upload_time: number
|
||||
dead_time: number
|
||||
modify_time: number
|
||||
download_times: number
|
||||
uploader: number
|
||||
uploader_name: string
|
||||
}
|
||||
|
||||
export interface OB11GroupFileFolder {
|
||||
group_id: number
|
||||
folder_id: string
|
||||
folder_name: string
|
||||
create_time: number
|
||||
creator: number
|
||||
creator_name: string
|
||||
total_file_count: number
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user