zhenxun_bot/zhenxun/builtin_plugins/admin/ban/_data_source.py

121 lines
3.4 KiB
Python
Raw Normal View History

2024-02-25 03:18:34 +08:00
import time
from nonebot_plugin_session import EventSession
from zhenxun.models.ban_console import BanConsole
from zhenxun.models.level_user import LevelUser
from zhenxun.utils.image_utils import ImageTemplate
class BanManage:
@classmethod
async def build_ban_image(cls, user_id: str | None, group_id: str | None):
data_list = None
if not user_id and not group_id:
data_list = await BanConsole.all()
elif user_id:
if group_id:
data_list = await BanConsole.filter(
user_id=user_id, group_id=group_id
).all()
else:
data_list = await BanConsole.filter(
user_id=user_id, group_id__isnull=True
).all()
else:
if group_id:
data_list = await BanConsole.filter(
user_id__isnull=True, group_id=group_id
).all()
if not data_list:
return None
column_name = [
"ID",
"用户ID",
"群组ID",
"BAN LEVEL",
"剩余时长(分钟)",
"操作员ID",
]
row_data = []
for data in data_list:
duration = int((data.ban_time + data.duration - time.time()) / 60)
if duration < 0:
duration = 0
row_data.append(
[
data.id,
data.user_id,
data.group_id,
data.ban_level,
duration,
data.operator,
]
)
return await ImageTemplate.table_page(
"Ban / UnBan 列表", "在黑屋中狠狠调教!", column_name, row_data
)
@classmethod
async def is_ban(cls, user_id: str, group_id: str | None):
"""判断用户是否被ban
参数:
user_id: 用户id
返回:
bool: 是否被ban
"""
return await BanConsole.is_ban(user_id, group_id)
@classmethod
async def unban(
cls,
user_id: str | None,
group_id: str | None,
session: EventSession,
is_superuser: bool = False,
) -> bool:
"""ban掉目标用户
参数:
user_id: 用户id
group_id: 群组id
session: Session
is_superuser: 是否为超级用户操作
返回:
bool: 是否unban成功
"""
user_level = 9999
if not is_superuser and user_id and session.id1:
user_level = await LevelUser.get_user_level(session.id1, group_id)
if await BanConsole.check_ban_level(user_id, group_id, user_level):
await BanConsole.unban(user_id, group_id)
return True
return False
@classmethod
async def ban(
cls,
user_id: str | None,
group_id: str | None,
duration: int,
session: EventSession,
is_superuser: bool,
):
"""ban掉目标用户
参数:
user_id: 用户id
group_id: 群组id
duration: 时长
session: Session
is_superuser: 是否为超级用户操作
"""
level = 9999
if not is_superuser and user_id and session.id1:
level = await LevelUser.get_user_level(session.id1, group_id)
await BanConsole.ban(user_id, group_id, level, duration, session.id1)