diff --git a/src/ntqqapi/types/msg.ts b/src/ntqqapi/types/msg.ts
index c9741e6..9812fe5 100644
--- a/src/ntqqapi/types/msg.ts
+++ b/src/ntqqapi/types/msg.ts
@@ -6,6 +6,7 @@ export interface GetFileListParam {
   startIndex: number
   sortOrder: number
   showOnlinedocFolder: number
+  folderId?: string
 }
 
 export enum ElementType {
diff --git a/src/onebot11/action/go-cqhttp/GetGroupFilesByFolder.ts b/src/onebot11/action/go-cqhttp/GetGroupFilesByFolder.ts
new file mode 100644
index 0000000..c3ee992
--- /dev/null
+++ b/src/onebot11/action/go-cqhttp/GetGroupFilesByFolder.ts
@@ -0,0 +1,54 @@
+import { BaseAction, Schema } from '../BaseAction'
+import { ActionName } from '../types'
+import { OB11GroupFile, OB11GroupFileFolder } from '@/onebot11/types'
+
+interface Payload {
+  group_id: string | number
+  folder_id: string
+  file_count: string | number
+}
+
+interface Response {
+  files: OB11GroupFile[]
+  folders: OB11GroupFileFolder[]
+}
+
+export class GetGroupFilesByFolder extends BaseAction<Payload, Response> {
+  actionName = ActionName.GoCQHTTP_GetGroupFilesByFolder
+  payloadSchema = Schema.object({
+    group_id: Schema.union([Number, String]).required(),
+    folder_id: Schema.string().required(),
+    file_count: Schema.union([Number, String]).default(50)
+  })
+
+  async _handle(payload: Payload) {
+    const data = await this.ctx.ntGroupApi.getGroupFileList(payload.group_id.toString(), {
+      sortType: 1,
+      fileCount: +payload.file_count,
+      startIndex: 0,
+      sortOrder: 2,
+      showOnlinedocFolder: 0,
+      folderId: payload.folder_id
+    })
+    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: []
+    }
+  }
+}
diff --git a/src/onebot11/action/index.ts b/src/onebot11/action/index.ts
index d18fabb..0c85a33 100644
--- a/src/onebot11/action/index.ts
+++ b/src/onebot11/action/index.ts
@@ -53,7 +53,7 @@ import { GetGroupHonorInfo } from './group/GetGroupHonorInfo'
 import { HandleQuickOperation } from './go-cqhttp/QuickOperation'
 import { SetEssenceMsg } from './go-cqhttp/SetEssenceMsg'
 import { DelEssenceMsg } from './go-cqhttp/DelEssenceMsg'
-import GetEvent from './llonebot/GetEvent'
+import { GetEvent } from './llonebot/GetEvent'
 import { DelGroupFile } from './go-cqhttp/DelGroupFile'
 import { GetGroupSystemMsg } from './go-cqhttp/GetGroupSystemMsg'
 import { CreateGroupFileFolder } from './go-cqhttp/CreateGroupFileFolder'
@@ -66,6 +66,7 @@ import { GetProfileLike } from './llonebot/GetProfileLike'
 import { FetchEmojiLike } from './llonebot/FetchEmojiLike'
 import { FetchCustomFace } from './llonebot/FetchCustomFace'
 import { GetFriendMsgHistory } from './llonebot/GetFriendMsgHistory'
+import { GetGroupFilesByFolder } from './go-cqhttp/GetGroupFilesByFolder'
 
 export function initActionMap(adapter: Adapter) {
   const actionHandlers = [
@@ -80,6 +81,8 @@ export function initActionMap(adapter: Adapter) {
     new SetOnlineStatus(adapter),
     new GetProfileLike(adapter),
     new GetFriendMsgHistory(adapter),
+    new FetchEmojiLike(adapter),
+    new FetchCustomFace(adapter),
     // onebot11
     new SendLike(adapter),
     new GetMsg(adapter),
@@ -137,8 +140,7 @@ export function initActionMap(adapter: Adapter) {
     new GetGroupAtAllRemain(adapter),
     new GetGroupRootFiles(adapter),
     new SendGroupNotice(adapter),
-    new FetchEmojiLike(adapter),
-    new FetchCustomFace(adapter),
+    new GetGroupFilesByFolder(adapter),
   ]
   const actionMap = new Map<string, BaseAction<any, unknown>>()
   for (const action of actionHandlers) {
diff --git a/src/onebot11/action/llonebot/GetEvent.ts b/src/onebot11/action/llonebot/GetEvent.ts
index 8cb3aed..effb7fe 100644
--- a/src/onebot11/action/llonebot/GetEvent.ts
+++ b/src/onebot11/action/llonebot/GetEvent.ts
@@ -11,7 +11,7 @@ interface Payload {
   timeout: number
 }
 
-export default class GetEvent extends BaseAction<Payload, PostEventType[]> {
+export class GetEvent extends BaseAction<Payload, PostEventType[]> {
   actionName = ActionName.GetEvent
 
   protected async _handle(payload: Payload): Promise<PostEventType[]> {
diff --git a/src/onebot11/action/types.ts b/src/onebot11/action/types.ts
index fb47c39..967ce67 100644
--- a/src/onebot11/action/types.ts
+++ b/src/onebot11/action/types.ts
@@ -81,4 +81,5 @@ export enum ActionName {
   GoCQHTTP_GetGroupAtAllRemain = 'get_group_at_all_remain',
   GoCQHTTP_GetGroupRootFiles = 'get_group_root_files',
   GoCQHTTP_SendGroupNotice = '_send_group_notice',
+  GoCQHTTP_GetGroupFilesByFolder = 'get_group_files_by_folder'
 }