From 6e71cd6064eda306522059322fb4aa3e9e73d981 Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@foxmail.com>
Date: Mon, 11 Mar 2024 11:55:10 +0800
Subject: [PATCH] feat: group whole ban event

---
 src/onebot11/constructor.ts | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts
index 8e544b5..4ecf2fa 100644
--- a/src/onebot11/constructor.ts
+++ b/src/onebot11/constructor.ts
@@ -271,11 +271,21 @@ export class OB11Constructor {
                     log("收到群群员禁言提示", groupElement)
                     const memberUid = groupElement.shutUp.member.uid
                     const adminUid = groupElement.shutUp.admin.uid
-                    const memberUin = (await getGroupMember(msg.peerUid, null, memberUid))?.uin || (await NTQQApi.getUserDetailInfo(memberUid))?.uin
+                    let memberUin: string = ""
+                    let duration = parseInt(groupElement.shutUp.duration)
+                    let sub_type: "ban" | "lift_ban" = duration > 0 ? "ban" : "lift_ban"
+                    if (memberUid){
+                        memberUin = (await getGroupMember(msg.peerUid, null, memberUid))?.uin || (await NTQQApi.getUserDetailInfo(memberUid))?.uin
+                    }
+                    else {
+                        memberUin = "0";  // 0表示全员禁言
+                        if (duration > 0) {
+                            duration = -1
+                        }
+                    }
                     const adminUin = (await getGroupMember(msg.peerUid, null, adminUid))?.uin || (await NTQQApi.getUserDetailInfo(adminUid))?.uin
-                    const duration = parseInt(groupElement.shutUp.duration)
                     if (memberUin && adminUin) {
-                        return new OB11GroupBanEvent(parseInt(msg.peerUid), parseInt(memberUin), parseInt(adminUin), duration, duration > 0 ? "ban" : "lift_ban");
+                        return new OB11GroupBanEvent(parseInt(msg.peerUid), parseInt(memberUin), parseInt(adminUin), duration, sub_type);
                     }
                 }
             }