mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
121 lines
3.4 KiB
Python
121 lines
3.4 KiB
Python
|
|
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)
|