Repository: sealdice/sealdice-core (language: go)

Issue:
[Bug]: 后台群组管理群名「未获取到」
### 在提问之前...

- [X] 我理解 Issue 是用于反馈和解决问题的，而非吐槽评论区，将尽可能提供更多信息帮助问题解决
- [X] 我填写了简短且清晰明确的标题，以便开发者在翻阅 issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
- [X] 我已查看master branch或最新测试版的更新内容，并未提及该 bug 已被修复的情况
- [X] 已有issue中并没有看见其他人与我反馈相同的问题

### 问题描述

后台群组管理无法获取正确群名，通知也一直是<%未知群名%>

### 如何复现

更新有问题的测试版本

### 你期望发生的

跟以前一样能够显示正确的群名

### 实际上发生的

「未获取到」
![KDHBGZ4{D`{YT27S5 M`M9N](https://github.com/sealdice/sealdice-core/assets/127825341/22876a5f-9ab5-4c71-8e47-14f8b2484dbe)


### 日志文件

早上经过测试应该在11.22之后的dev版本之后出现问题

### 截图

_No response_

### 海豹核心版本

231129(dev-0a94

### 操作系统

win

### 帐号类型

qq

### 使用协议

apad,ws正向分离

### 附加内容

_No response_


Discussion / hints:
二分测试了一下，是这 5 个 commit 引起的。

<img width="599" alt="image" src="https://github.com/sealdice/sealdice-core/assets/45380560/81582d62-3a1f-4b13-a203-08894169c147">

@fy0 

Fix patch:
diff --git a/dice/im_session.go b/dice/im_session.go
index aef49133..2175b31a 100644
--- a/dice/im_session.go
+++ b/dice/im_session.go
@@ -450,8 +450,9 @@ type MsgContext struct {
 	CommandID       int64       // 指令ID
 	CommandHideFlag string      // 暗骰标记
 	CommandInfo     interface{} // 命令信息
-	PrivilegeLevel  int         `jsbind:"privilegeLevel"` // 权限等级 40邀请者 50管理 60群主 70信任 100master
-	DelegateText    string      `jsbind:"delegateText"`   // 代骰附加文本
+	PrivilegeLevel  int         `jsbind:"privilegeLevel"` // 权限等级 -30ban 40邀请者 50管理 60群主 70信任 100master
+	GroupRoleLevel  int         // 群内权限 40邀请者 50管理 60群主 70信任 100master，相当于不考虑ban的权限等级
+	DelegateText    string      `jsbind:"delegateText"` // 代骰附加文本
 
 	deckDepth         int                                         // 抽牌递归深度
 	DeckPools         map[*DeckInfo]map[string]*ShuffleRandomPool // 不放回抽取的缓存
@@ -479,6 +480,8 @@ func (ctx *MsgContext) fillPrivilege(msg *Message) int {
 		default: /* no-op */
 		}
 
+		ctx.GroupRoleLevel = ctx.PrivilegeLevel
+
 		// 加入黑名单相关权限
 		if val, exists := ctx.Dice.BanList.Map.Load(ctx.Player.UserID); exists {
 			switch val.Rank {
@@ -1023,14 +1026,21 @@ func checkBan(ctx *MsgContext, msg *Message) (notReply bool) {
 	}
 
 	if ctx.PrivilegeLevel == -30 {
+		groupLevel := ctx.GroupRoleLevel
 		if d.BanList.BanBehaviorQuitIfAdmin && msg.MessageType == "group" {
 			// 黑名单用户 - 立即退出所在群
 			groupID := msg.GroupID
 			notReply = true
-			if ctx.PrivilegeLevel >= 40 {
+			if groupLevel >= 40 {
 				if isWhiteGroup {
 					log.Infof("收到群(%s)内邀请者以上权限黑名单用户<%s>(%s)的消息，但在信任群所以不尝试退群", groupID, msg.Sender.Nickname, msg.Sender.UserID)
 				} else {
+					text := fmt.Sprintf("警告: <%s>(%s)是黑名单用户，将对骰主进行通知并退群。", msg.Sender.Nickname, msg.Sender.UserID)
+					ReplyGroupRaw(ctx, &Message{GroupID: groupID}, text, "")
+
+					noticeMsg := fmt.Sprintf("检测到群(%s)内黑名单用户<%s>(%s)，因是管理以上权限，执行通告后自动退群", groupID, msg.Sender.Nickname, msg.Sender.UserID)
+					log.Info(noticeMsg)
+					ctx.Notice(noticeMsg)
 					banQuitGroup()
 				}
 			} else {
diff --git a/dice/platform_adapter_gocq.go b/dice/platform_adapter_gocq.go
index f83a5147..ce6b45bd 100644
--- a/dice/platform_adapter_gocq.go
+++ b/dice/platform_adapter_gocq.go
@@ -151,7 +151,7 @@ type MessageQQBase struct {
 	} `json:"data"`
 	Retcode int64 `json:"retcode"`
 	// Status string `json:"status"`
-	Echo any `json:"echo"` // 声明类型而不是interface的原因是interface下数字不能正确转换
+	Echo json.RawMessage `json:"echo"` // 声明类型而不是interface的原因是interface下数字不能正确转换
 
 	Msg string `json:"msg"`
 	// Status  interface{} `json:"status"`
@@ -454,7 +454,7 @@ func (pa *PlatformAdapterGocq) Serve() int {
 		}
 
 		// 获得用户信息
-		if msgQQ.Echo == -1 {
+		if string(msgQQ.Echo) == "-1" {
 			ep.Nickname = msgQQ.Data.Nickname
 			ep.UserID = FormatDiceIDQQ(string(msgQQ.Data.UserID))
 
@@ -471,7 +471,7 @@ func (pa *PlatformAdapterGocq) Serve() int {
 		if pa.echoMap2 != nil {
 			if v, ok := pa.echoMap2.Load(msgQQ.Echo); ok {
 				v.ch <- message
-				msgQQ.Echo = v.echoOverwrite
+				msgQQ.Echo = []byte(fmt.Sprintf("%v", v.echoOverwrite))
 				return
 			}
 
@@ -485,7 +485,7 @@ func (pa *PlatformAdapterGocq) Serve() int {
 		}
 
 		// 获得群信息
-		if msgQQ.Echo == -2 { //nolint:nestif
+		if string(msgQQ.Echo) == "-2" { //nolint:nestif
 			if msgQQ.Data != nil {
 				groupID := FormatDiceIDQQGroup(string(msgQQ.Data.GroupID))
 				dm.GroupNameCache.Set(groupID, &GroupNameCacheItem{
@@ -997,7 +997,7 @@ func (pa *PlatformAdapterGocq) Serve() int {
 			// fmt.Println("Recieved message1 " + message)
 			session.Execute(ep, msg, false)
 		} else {
-			fmt.Println("Recieved message " + message)
+			fmt.Println("Received message " + message)
 		}
 	}
 
diff --git a/dice/platform_adapter_gocq_actions.go b/dice/platform_adapter_gocq_actions.go
index e4435373..996ac403 100644
--- a/dice/platform_adapter_gocq_actions.go
+++ b/dice/platform_adapter_gocq_actions.go
@@ -111,7 +111,7 @@ func (pa *PlatformAdapterGocq) GetGroupInfo(groupID string) *OnebotGroupInfo {
 
 	data := &OnebotGroupInfo{}
 	err := pa.waitEcho2(echo, data, func(emi *echoMapInfo) {
-		emi.echoOverwrite = "-2" // 强制覆盖为获取群信息，与之前兼容
+		emi.echoOverwrite = -2 // 强制覆盖为获取群信息，与之前兼容
 		socketSendText(pa.Socket, string(a))
 	})
 	if err == nil {
diff --git a/go.sum b/go.sum
index 6295ea2e..893059e5 100644
--- a/go.sum
+++ b/go.sum
@@ -328,8 +328,6 @@ github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA=
 github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
 github.com/schollz/progressbar/v3 v3.14.1 h1:VD+MJPCr4s3wdhTc7OEJ/Z3dAeBzJ7yKH/P4lC5yRTI=
 github.com/schollz/progressbar/v3 v3.14.1/go.mod h1:Zc9xXneTzWXF81TGoqL71u0sBPjULtEHYtj/WVgVy8E=
-github.com/sealdice/botgo v0.0.0-20231208025114-3e01028e067a h1:7xMT3HoFEWTsX5X5SX9STUOPvL8ftZfoTSCAdZ38h9Y=
-github.com/sealdice/botgo v0.0.0-20231208025114-3e01028e067a/go.mod h1:MGtR0REQDslBwQE+Rln4P9iDjH/ZInlu5qzOLdvBWJU=
 github.com/sealdice/botgo v0.0.0-20231208035838-29bc68dc3f98 h1:FKdQU7gaFUFff/zzNjDuZq+gQVWSlxke+FuXW044AaE=
 github.com/sealdice/botgo v0.0.0-20231208035838-29bc68dc3f98/go.mod h1:MGtR0REQDslBwQE+Rln4P9iDjH/ZInlu5qzOLdvBWJU=
 github.com/sealdice/dicescript v0.0.0-20231102165212-053ea0992846 h1:cy05fBQY++fYQbyhLcI5ltZKI8YO2gOgnVB50J2Vz48=
diff --git a/sealdice-builtins b/sealdice-builtins
index 3ebb6f29..68c7381d 160000
--- a/sealdice-builtins
+++ b/sealdice-builtins
@@ -1,1 +1,1 @@
-Subproject commit 3ebb6f293216bdcda3c627406188009efce43f13
+Subproject commit 68c7381d0bc2f0a84bc5fffdbb090b0d57f23e79
diff --git a/sealdice-ui b/sealdice-ui
index 33e52466..52c00769 160000
--- a/sealdice-ui
+++ b/sealdice-ui
@@ -1,1 +1,1 @@
-Subproject commit 33e524663d60e1f792290ee0d16155e64f4242de
+Subproject commit 52c0076926a64525c6f731eb128e9a1c9c5a4cb9


Test patch: