feat(ban): 在调用ban列表时主动删除过期数据 (#1997)

* feat(ban): 在调用ban列表时主动删除过期数据
- 除了接收到被ban用户的信息外,现在主动调用`ban列表`命令也会删除过期数据
- 修复 unban 返回信息错误

* refactor(ban): 优化 unban 函数返回值逻辑

- 使用或运算简化返回值判断逻辑
- 移除不必要的字符串转换

* refactor(zhenxun): 优化 unban 函数返回值类型

- 将 unban 函数的返回类型从 tuple[bool, str | None] 改为 tuple[bool, str]
- 修改返回值,确保总是返回字符串类型,避免类型检查错误
This commit is contained in:
molanp 2025-08-05 19:12:15 +08:00 committed by GitHub
parent 7719be9866
commit 872d2499a2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 9 deletions

View File

@ -65,6 +65,9 @@ class BanManage:
duration = "" duration = ""
else: else:
duration = int((data.ban_time + data.duration - time.time()) / 60) duration = int((data.ban_time + data.duration - time.time()) / 60)
if isinstance(duration, int) and duration < 0:
await data.delete()
continue
row_data.append( row_data.append(
[ [
data.id, data.id,
@ -111,7 +114,7 @@ class BanManage:
is_superuser: 是否为超级用户操作 is_superuser: 是否为超级用户操作
返回: 返回:
tuple[bool, str]: 是否unban成功, 群组/用户id或提示 tuple[bool, str | Non]: 是否unban成功, 群组/用户id或提示
""" """
user_level = 9999 user_level = 9999
if not is_superuser and user_id and session.id1: if not is_superuser and user_id and session.id1:
@ -123,15 +126,10 @@ class BanManage:
if ban_data.ban_level > user_level: if ban_data.ban_level > user_level:
return False, "unBan权限等级不足捏..." return False, "unBan权限等级不足捏..."
await ban_data.delete() await ban_data.delete()
return ( return True, ban_data.user_id or ban_data.group_id
True,
f"用户 {ban_data.user_id}"
if ban_data.user_id
else f"群组 {ban_data.group_id}",
)
elif await BanConsole.check_ban_level(user_id, group_id, user_level): elif await BanConsole.check_ban_level(user_id, group_id, user_level):
await BanConsole.unban(user_id, group_id) await BanConsole.unban(user_id, group_id)
return True, f"群组 {group_id}" return True, group_id or ""
return False, "该用户/群组不在黑名单中不足捏..." return False, "该用户/群组不在黑名单中不足捏..."
@classmethod @classmethod

View File

@ -110,7 +110,7 @@ class BanConsole(Model):
return -1 return -1
_time = time.time() - (user.ban_time + user.duration) _time = time.time() - (user.ban_time + user.duration)
if _time < 0: if _time < 0:
return int(time.time() - user.ban_time - user.duration) return int(abs(_time))
await user.delete() await user.delete()
return 0 return 0