zhenxun_bot/zhenxun/plugins/black_word/data_source.py
2024-03-18 16:10:44 +08:00

104 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from datetime import datetime
from nonebot.adapters import Bot
from zhenxun.models.friend_user import FriendUser
from zhenxun.models.group_member_info import GroupInfoUser
from zhenxun.utils.image_utils import BuildImage, ImageTemplate
from .model import BlackWord
from .utils import Config, _get_punish
async def show_black_text_image(
user_id: str | None,
group_id: str | None,
date: datetime | None,
data_type: str = "=",
) -> BuildImage:
"""展示记录名单
参数:
bot: bot
user: 用户id
group_id: 群组id
date: 日期
data_type: 日期搜索类型
返回:
BuildImage: 数据图片
"""
data_list = await BlackWord.get_black_data(user_id, group_id, date, data_type)
column_name = [
"ID",
"昵称",
"UID",
"GID",
"文本",
"检测内容",
"检测等级",
"惩罚",
"平台",
"记录日期",
]
column_list = []
uid_list = [u for u in data_list]
uid2name = {
u.user_id: u.user_name for u in await FriendUser.filter(user_id__in=uid_list)
}
for i, data in enumerate(data_list):
uname = uid2name.get(data.user_id)
if not uname:
if u := await GroupInfoUser.get_or_none(
user_id=data.user_id, group_id=data.group_id
):
uname = u.user_name
if len(data.plant_text) > 30:
data.plant_text = data.plant_text[:30] + "..."
column_list.append(
[
i,
uname or data.user_id,
data.user_id,
data.group_id,
data.plant_text,
data.black_word,
data.punish_level,
data.punish,
data.platform,
data.create_time,
]
)
A = await ImageTemplate.table_page(
"记录名单", "一个都不放过!", column_name, column_list
)
return A
async def set_user_punish(
bot: Bot, user_id: str, group_id: str | None, id_: int, punish_level: int
) -> str:
"""设置惩罚
参数:
user_id: 用户id
group_id: 群组id或频道id
id_: 记录下标
punish_level: 惩罚等级
返回:
str: 结果
"""
result = await _get_punish(bot, punish_level, user_id, group_id)
punish = {
1: "永久ban",
2: "删除好友",
3: f"ban {result}",
4: f"ban {result} 分钟",
5: "口头警告",
}
if await BlackWord.set_user_punish(user_id, punish[punish_level], id_=id_):
return f"已对 USER {user_id} 进行 {punish[punish_level]} 处罚。"
else:
return "操作失败可能未找到用户id或敏感词"