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 { 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 { invoke, NTClass, NTMethod } from '../ntcall'
|
||||||
import { GeneralCallResult } from '../services'
|
import { GeneralCallResult } from '../services'
|
||||||
import { NTQQWindows } from './window'
|
import { NTQQWindows } from './window'
|
||||||
import { getSession } from '../wrapper'
|
import { getSession } from '../wrapper'
|
||||||
import { NTEventDispatch } from '@/common/utils/eventTask'
|
import { NTEventDispatch } from '@/common/utils/eventTask'
|
||||||
import { NodeIKernelGroupListener } from '../listeners'
|
import { NodeIKernelGroupListener, OnGroupFileInfoUpdateParams } from '../listeners'
|
||||||
import { NodeIKernelGroupService } from '../services'
|
import { NodeIKernelGroupService } from '../services'
|
||||||
import { Service, Context } from 'cordis'
|
import { Service, Context } from 'cordis'
|
||||||
import { isNumeric } from '@/common/utils/misc'
|
import { isNumeric } from '@/common/utils/misc'
|
||||||
@ -301,4 +301,24 @@ export class NTQQGroupApi extends Service {
|
|||||||
async deleteGroupFile(groupId: string, fileIdList: string[]) {
|
async deleteGroupFile(groupId: string, fileIdList: string[]) {
|
||||||
return await invoke('nodeIKernelRichMediaService/deleteGroupFile', [{ groupId, busIdList: [102], fileIdList }, null])
|
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
|
userUsedSpacePerDay: unknown | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface onGroupFileInfoUpdateParamType {
|
export interface OnGroupFileInfoUpdateParams {
|
||||||
retCode: number
|
retCode: number
|
||||||
retMsg: string
|
retMsg: string
|
||||||
clientWording: string
|
clientWording: string
|
||||||
isEnd: boolean
|
isEnd: boolean
|
||||||
item: Array<any>
|
item: {
|
||||||
allFileCount: string
|
peerId: string
|
||||||
nextIndex: string
|
type: number
|
||||||
reqId: string
|
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
|
onGroupFileInfoAdd(groupItem: unknown): void
|
||||||
|
|
||||||
onGroupFileInfoUpdate(groupFileListResult: onGroupFileInfoUpdateParamType): void
|
onGroupFileInfoUpdate(groupFileListResult: OnGroupFileInfoUpdateParams): void
|
||||||
|
|
||||||
onGroupGuildUpdate(groupGuildNotifyInfo: unknown): 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
|
channel?: NTChannel
|
||||||
classNameIsRegister?: boolean
|
classNameIsRegister?: boolean
|
||||||
cbCmd?: string | string[]
|
cbCmd?: string | string[]
|
||||||
cmdCB?: (payload: ReturnType) => boolean
|
cmdCB?: (payload: ReturnType, result: unknown) => boolean
|
||||||
afterFirstCmd?: boolean // 是否在methodName调用完之后再去hook cbCmd
|
afterFirstCmd?: boolean // 是否在methodName调用完之后再去hook cbCmd
|
||||||
timeout?: number
|
timeout?: number
|
||||||
}
|
}
|
||||||
@ -132,12 +132,13 @@ export function invoke<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
let result: unknown
|
||||||
// 这里的callback比较特殊,QQ后端先返回是否调用成功,再返回一条结果数据
|
// 这里的callback比较特殊,QQ后端先返回是否调用成功,再返回一条结果数据
|
||||||
const secondCallback = () => {
|
const secondCallback = () => {
|
||||||
const hookId = registerReceiveHook<R>(options.cbCmd!, (payload) => {
|
const hookId = registerReceiveHook<R>(options.cbCmd!, (payload) => {
|
||||||
// log(methodName, "second callback", cbCmd, payload, cmdCB);
|
// log(methodName, "second callback", cbCmd, payload, cmdCB);
|
||||||
if (!!options.cmdCB) {
|
if (!!options.cmdCB) {
|
||||||
if (options.cmdCB(payload)) {
|
if (options.cmdCB(payload, result)) {
|
||||||
removeReceiveHook(hookId)
|
removeReceiveHook(hookId)
|
||||||
success = true
|
success = true
|
||||||
resolve(payload)
|
resolve(payload)
|
||||||
@ -151,14 +152,14 @@ export function invoke<
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
!afterFirstCmd && secondCallback()
|
!afterFirstCmd && secondCallback()
|
||||||
hookApiCallbacks[callbackId] = (result: GeneralCallResult) => {
|
hookApiCallbacks[callbackId] = (res: GeneralCallResult) => {
|
||||||
if (result?.result === 0 || result === undefined) {
|
result = res
|
||||||
//log(`${params.methodName} callback`, result)
|
if (res?.result === 0 || ['undefined', 'number'].includes(typeof res)) {
|
||||||
afterFirstCmd && secondCallback()
|
afterFirstCmd && secondCallback()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
log('ntqq api call failed,', method, result)
|
log('ntqq api call failed,', method, res)
|
||||||
reject(`ntqq api call failed, ${method}, ${result.errMsg}`)
|
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 { CreateGroupFileFolder } from './go-cqhttp/CreateGroupFileFolder'
|
||||||
import { DelGroupFolder } from './go-cqhttp/DelGroupFolder'
|
import { DelGroupFolder } from './go-cqhttp/DelGroupFolder'
|
||||||
import { GetGroupAtAllRemain } from './go-cqhttp/GetGroupAtAllRemain'
|
import { GetGroupAtAllRemain } from './go-cqhttp/GetGroupAtAllRemain'
|
||||||
|
import { GetGroupRootFiles } from './go-cqhttp/GetGroupRootFiles'
|
||||||
|
|
||||||
export function initActionMap(adapter: Adapter) {
|
export function initActionMap(adapter: Adapter) {
|
||||||
const actionHandlers = [
|
const actionHandlers = [
|
||||||
@ -124,7 +125,8 @@ export function initActionMap(adapter: Adapter) {
|
|||||||
new GetGroupSystemMsg(adapter),
|
new GetGroupSystemMsg(adapter),
|
||||||
new CreateGroupFileFolder(adapter),
|
new CreateGroupFileFolder(adapter),
|
||||||
new DelGroupFolder(adapter),
|
new DelGroupFolder(adapter),
|
||||||
new GetGroupAtAllRemain(adapter)
|
new GetGroupAtAllRemain(adapter),
|
||||||
|
new GetGroupRootFiles(adapter)
|
||||||
]
|
]
|
||||||
const actionMap = new Map<string, BaseAction<any, any>>()
|
const actionMap = new Map<string, BaseAction<any, any>>()
|
||||||
for (const action of actionHandlers) {
|
for (const action of actionHandlers) {
|
||||||
|
@ -77,5 +77,6 @@ export enum ActionName {
|
|||||||
GoCQHTTP_GetGroupSystemMsg = 'get_group_system_msg',
|
GoCQHTTP_GetGroupSystemMsg = 'get_group_system_msg',
|
||||||
GoCQHTTP_CreateGroupFileFolder = 'create_group_file_folder',
|
GoCQHTTP_CreateGroupFileFolder = 'create_group_file_folder',
|
||||||
GoCQHTTP_DelGroupFolder = 'delete_group_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
|
online: boolean | null
|
||||||
good: boolean
|
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