加入群管理员维护能力

This commit is contained in:
liuwei
2026-01-21 17:32:37 +08:00
parent 8e00c0078c
commit f3fe625ceb
2 changed files with 132 additions and 2 deletions

View File

@@ -142,7 +142,8 @@ class GroupBotManager:
# 本地缓存作为类级别静态属性
local_cache = {
"group_permissions": {}, # 用于缓存群组功能权限
"group_list": set() # 用于缓存 group:list
"group_list": set(), # 用于缓存 group:list
"group_admins": {} # 用于缓存群级管理员
}
# 管理员列表缓存
@@ -179,6 +180,9 @@ class GroupBotManager:
GroupBotManager.local_cache["group_permissions"][group_id][feature] = PermissionStatus(status_value)
else:
GroupBotManager.local_cache["group_permissions"][group_id][feature] = PermissionStatus.DISABLED
admins_key = f'group:{group_id}:admins'
admins = r.smembers(admins_key) or set()
GroupBotManager.local_cache["group_admins"][group_id] = set(admins)
@staticmethod
def save_to_redis():
@@ -192,6 +196,10 @@ class GroupBotManager:
key = f'group:{group_id}:permissions'
for feature, status in permissions.items():
r.hset(key, feature.name, status.value)
for group_id, admins in GroupBotManager.local_cache["group_admins"].items():
admins_key = f'group:{group_id}:admins'
if admins:
r.sadd(admins_key, *list(admins))
@staticmethod
def set_group_permission(group_id, feature: Feature, status: PermissionStatus):
@@ -209,6 +217,42 @@ class GroupBotManager:
# 输出保存到redis成功
logger.info(f"set_group_permission({group_id}, {feature.name}, {status.value})")
@staticmethod
def get_group_admins(group_id) -> List[str]:
if group_id in GroupBotManager.local_cache["group_admins"]:
return list(GroupBotManager.local_cache["group_admins"][group_id])
return []
@staticmethod
def is_group_admin(group_id, user_id: str) -> bool:
admins = GroupBotManager.local_cache["group_admins"].get(group_id, set())
return user_id in admins
@staticmethod
def add_group_admin(group_id, user_id: str) -> bool:
r = get_redis_connection()
if group_id not in GroupBotManager.local_cache["group_admins"]:
GroupBotManager.local_cache["group_admins"][group_id] = set()
GroupBotManager.local_cache["group_admins"][group_id].add(user_id)
r.sadd(f'group:{group_id}:admins', user_id)
return True
@staticmethod
def remove_group_admin(group_id, user_id: str) -> bool:
r = get_redis_connection()
admins = GroupBotManager.local_cache["group_admins"].get(group_id, set())
if user_id in admins:
admins.remove(user_id)
r.srem(f'group:{group_id}:admins', user_id)
return True
return False
@staticmethod
def is_admin_for_group(user_id: str, group_id: str) -> bool:
if GroupBotManager.is_admin(user_id):
return True
return GroupBotManager.is_group_admin(group_id, user_id)
@staticmethod
def get_group_permission(group_id, feature: Feature):
"""获取群组某个功能的权限状态"""
@@ -333,10 +377,13 @@ class GroupBotManager:
GroupBotManager.local_cache["group_list"].remove(group_id)
if group_id in GroupBotManager.local_cache["group_permissions"]:
del GroupBotManager.local_cache["group_permissions"][group_id]
if group_id in GroupBotManager.local_cache["group_admins"]:
del GroupBotManager.local_cache["group_admins"][group_id]
# 从Redis中移除群组
r.srem("group:list", group_id)
r.delete(f'group:{group_id}:permissions')
r.delete(f'group:{group_id}:admins')
return f"已成功清除群 {group_id} 的所有设置"