加入群管理员维护能力
This commit is contained in:
@@ -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} 的所有设置"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user