@@ -15,32 +15,49 @@ import (
1515 zero "github.com/wdvxdr1123/ZeroBot"
1616)
1717
18- // userID -> 被封插件列表
19- func getUsersBlack ( ) map [int64 ][]string {
18+ // userID -> 被封插件列表(白名单为启用的列表)
19+ func getUsersBlackOrWhite ( filterWhite bool ) map [int64 ][]string {
2020 var users []dao.UserSetting
21- proxy .GetDB ().Select ("id" , "black_plugins" ).Where ("LENGTH(black_plugins) > 1" ).Find (& users )
21+
22+ proxy .GetDB ().Select ("id" , "black_plugins" , "white_plugins" , "white_mode" ).Where ("LENGTH(black_plugins) > 1 or LENGTH(white_plugins) > 1" ).Find (& users )
2223 res := make (map [int64 ][]string )
2324 for _ , user := range users {
24- blacks := utils . MergeStringSlices ( strings . Split ( user . BlackPlugins , "|" )) // 去重去空
25- if len ( blacks ) == 0 {
25+ var plugins [] string
26+ if user . WhiteMode != filterWhite {
2627 continue
2728 }
28- res [user .ID ] = blacks
29+ if filterWhite {
30+ plugins = utils .MergeStringSlices (strings .Split (user .WhitePlugins , "|" )) // 去重去空
31+ } else {
32+ plugins = utils .MergeStringSlices (strings .Split (user .BlackPlugins , "|" )) // 去重去空
33+ }
34+ if len (plugins ) == 0 {
35+ continue
36+ }
37+ res [user .ID ] = plugins
2938 }
3039 return res
3140}
3241
33- // groupID -> 被封插件列表
34- func getGroupsBlack ( ) map [int64 ][]string {
42+ // groupID -> 被封插件列表(白名单为启用的列表)
43+ func getGroupsBlackOrWhite ( filterWhite bool ) map [int64 ][]string {
3544 var groups []dao.GroupSetting
36- proxy .GetDB ().Select ("id" , "black_plugins" ).Where ("LENGTH(black_plugins) > 1" ).Find (& groups )
45+ proxy .GetDB ().Select ("id" , "black_plugins" , "white_plugins" , "white_mode" ).Where ("LENGTH(black_plugins) > 1" ).Find (& groups )
3746 res := make (map [int64 ][]string )
3847 for _ , group := range groups {
39- blacks := utils .MergeStringSlices (strings .Split (group .BlackPlugins , "|" )) // 去重去空
40- if len (blacks ) == 0 {
48+ var plugins []string
49+ if group .WhiteMode != filterWhite {
50+ continue
51+ }
52+ if filterWhite {
53+ plugins = utils .MergeStringSlices (strings .Split (group .WhitePlugins , "|" )) // 去重去空
54+ } else {
55+ plugins = utils .MergeStringSlices (strings .Split (group .BlackPlugins , "|" )) // 去重去空
56+ }
57+ if len (plugins ) == 0 {
4158 continue
4259 }
43- res [group .ID ] = blacks
60+ res [group .ID ] = plugins
4461 }
4562 return res
4663}
@@ -57,7 +74,7 @@ func showBlack(ctx *zero.Ctx) {
5774 }
5875 // 群管理员 in 群聊
5976 var str string
60- userM := getUsersBlack ( )
77+ userM := getUsersBlackOrWhite ( false )
6178 rsp := ctx .GetGroupMemberList (ctx .Event .GroupID ) // 过滤掉非本群成员
6279 users := rsp .Array ()
6380 for _ , user := range users {
@@ -88,9 +105,60 @@ func showBlack(ctx *zero.Ctx) {
88105 ctx .SendChain (msg )
89106}
90107
108+ func showWhite (ctx * zero.Ctx ) {
109+ userM := getUsersBlackOrWhite (true )
110+ groupM := getGroupsBlackOrWhite (true )
111+ if len (userM ) == 0 && len (groupM ) == 0 {
112+ ctx .Send ("没有群/用户运行在白名单模式" )
113+ return
114+ }
115+ // 用户
116+ if len (userM ) > 0 {
117+ str := "用户:"
118+ userDesM := make (map [int64 ]string )
119+ for id , blacks := range userM {
120+ var des string
121+ if id == 0 { // 全体用户(全局)
122+ des = fmt .Sprintf ("全体: %v\n " , formBlackDescription (blacks ))
123+ } else { // 正常用户
124+ user := ctx .GetStrangerInfo (id , false )
125+ des = fmt .Sprintf ("%v(%v): %v\n " , user .Get ("nickname" ), id , formBlackDescription (blacks ))
126+ }
127+ userDesM [id ] = des
128+ str += des + "\n "
129+ }
130+ w , _ := images .MeasureStringDefault (str , 24 , 1.3 )
131+ msg , err := images .GenQQListMsgWithAva (userDesM , w , true )
132+ if err != nil {
133+ ctx .Send (str )
134+ } else {
135+ ctx .SendChain (message .Text ("用户:\n " ), msg )
136+ }
137+ }
138+ // 群聊
139+ if len (groupM ) > 0 {
140+ str := "群:"
141+ groupDesM := make (map [int64 ]string )
142+ for id , blacks := range groupM {
143+ group := ctx .GetGroupInfo (id , false )
144+ des := fmt .Sprintf ("%v(%v): %v\n " ,
145+ group .Name , id , formBlackDescription (blacks ))
146+ groupDesM [id ] = des
147+ str += des + "\n "
148+ }
149+ w , _ := images .MeasureStringDefault (str , 24 , 1.3 )
150+ msg , err := images .GenQQListMsgWithAva (groupDesM , w , false )
151+ if err != nil {
152+ ctx .Send (str )
153+ } else {
154+ ctx .SendChain (message .Text ("群:\n " ), msg )
155+ }
156+ }
157+ }
158+
91159func showBlackInPrimarySuper (ctx * zero.Ctx ) {
92- userM := getUsersBlack ( )
93- groupM := getGroupsBlack ( )
160+ userM := getUsersBlackOrWhite ( false )
161+ groupM := getGroupsBlackOrWhite ( false )
94162 if len (userM ) == 0 && len (groupM ) == 0 {
95163 ctx .Send ("大家都是好人,黑名单暂时是空哒" )
96164 return
0 commit comments