mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
✨ 更新封禁功能,增加封禁时长参数和描述,优化插件信息返回结构
This commit is contained in:
parent
defe99e66c
commit
ec16457555
@ -87,13 +87,17 @@ __plugin_meta__ = PluginMetadata(
|
|||||||
smart_tools=[
|
smart_tools=[
|
||||||
AICallableTag(
|
AICallableTag(
|
||||||
name="call_ban",
|
name="call_ban",
|
||||||
description="某人多次(至少三次)辱骂你,调用此方法进行封禁",
|
description="如果你讨厌某个人(好感度过低并让你感到困扰,或者多次辱骂你),调用此方法进行封禁,调用该方法后要告知用户被封禁和原因",
|
||||||
parameters=AICallableParam(
|
parameters=AICallableParam(
|
||||||
type="object",
|
type="object",
|
||||||
properties={
|
properties={
|
||||||
"user_id": AICallableProperties(
|
"user_id": AICallableProperties(
|
||||||
type="string", description="用户的id"
|
type="string", description="用户的id"
|
||||||
),
|
),
|
||||||
|
"duration": AICallableProperties(
|
||||||
|
type="integer",
|
||||||
|
description="封禁时长(选择的值只能是1-360),单位为分钟,如果频繁触发,按情况增加",
|
||||||
|
),
|
||||||
},
|
},
|
||||||
required=["user_id"],
|
required=["user_id"],
|
||||||
),
|
),
|
||||||
|
|||||||
@ -9,14 +9,14 @@ from zhenxun.services.log import logger
|
|||||||
from zhenxun.utils.image_utils import BuildImage, ImageTemplate
|
from zhenxun.utils.image_utils import BuildImage, ImageTemplate
|
||||||
|
|
||||||
|
|
||||||
async def call_ban(user_id: str):
|
async def call_ban(user_id: str, duration: int = 1):
|
||||||
"""调用ban
|
"""调用ban
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
user_id: 用户id
|
user_id: 用户id
|
||||||
"""
|
"""
|
||||||
await BanConsole.ban(user_id, None, 9, 60 * 12)
|
await BanConsole.ban(user_id, None, 9, duration * 60)
|
||||||
logger.info("辱骂次数过多,已将用户加入黑名单...", "ban", session=user_id)
|
logger.info("被讨厌了,已将用户加入黑名单...", "ban", session=user_id)
|
||||||
|
|
||||||
|
|
||||||
class BanManage:
|
class BanManage:
|
||||||
|
|||||||
@ -20,6 +20,12 @@ class Item(BaseModel):
|
|||||||
"""插件名称"""
|
"""插件名称"""
|
||||||
commands: list[str]
|
commands: list[str]
|
||||||
"""插件命令"""
|
"""插件命令"""
|
||||||
|
id: str
|
||||||
|
"""插件id"""
|
||||||
|
status: bool
|
||||||
|
"""插件状态"""
|
||||||
|
has_superuser_help: bool
|
||||||
|
"""插件是否拥有超级用户帮助"""
|
||||||
|
|
||||||
|
|
||||||
def __handle_item(
|
def __handle_item(
|
||||||
@ -39,23 +45,36 @@ def __handle_item(
|
|||||||
返回:
|
返回:
|
||||||
Item: Item
|
Item: Item
|
||||||
"""
|
"""
|
||||||
|
status = True
|
||||||
|
has_superuser_help = False
|
||||||
|
nb_plugin = nonebot.get_plugin_by_module_name(plugin.module_path)
|
||||||
|
if nb_plugin and nb_plugin.metadata and nb_plugin.metadata.extra:
|
||||||
|
extra_data = PluginExtraData(**nb_plugin.metadata.extra)
|
||||||
|
if extra_data.superuser_help:
|
||||||
|
has_superuser_help = True
|
||||||
if not plugin.status:
|
if not plugin.status:
|
||||||
if plugin.block_type == BlockType.ALL:
|
if plugin.block_type == BlockType.ALL:
|
||||||
plugin.name = f"{plugin.name}(不可用)"
|
status = False
|
||||||
elif group and plugin.block_type == BlockType.GROUP:
|
elif group and plugin.block_type == BlockType.GROUP:
|
||||||
plugin.name = f"{plugin.name}(不可用)"
|
status = False
|
||||||
elif not group and plugin.block_type == BlockType.PRIVATE:
|
elif not group and plugin.block_type == BlockType.PRIVATE:
|
||||||
plugin.name = f"{plugin.name}(不可用)"
|
status = False
|
||||||
elif group and f"{plugin.module}," in group.block_plugin:
|
elif group and f"{plugin.module}," in group.block_plugin:
|
||||||
plugin.name = f"{plugin.name}(不可用)"
|
status = False
|
||||||
elif bot and f"{plugin.module}," in bot.block_plugins:
|
elif bot and f"{plugin.module}," in bot.block_plugins:
|
||||||
plugin.name = f"{plugin.name}(不可用)"
|
status = False
|
||||||
commands = []
|
commands = []
|
||||||
nb_plugin = nonebot.get_plugin_by_module_name(plugin.module_path)
|
nb_plugin = nonebot.get_plugin_by_module_name(plugin.module_path)
|
||||||
if is_detail and nb_plugin and nb_plugin.metadata and nb_plugin.metadata.extra:
|
if is_detail and nb_plugin and nb_plugin.metadata and nb_plugin.metadata.extra:
|
||||||
extra_data = PluginExtraData(**nb_plugin.metadata.extra)
|
extra_data = PluginExtraData(**nb_plugin.metadata.extra)
|
||||||
commands = [cmd.command for cmd in extra_data.commands]
|
commands = [cmd.command for cmd in extra_data.commands]
|
||||||
return Item(plugin_name=f"{plugin.id}-{plugin.name}", commands=commands)
|
return Item(
|
||||||
|
plugin_name=plugin.name,
|
||||||
|
commands=commands,
|
||||||
|
id=str(plugin.id),
|
||||||
|
status=status,
|
||||||
|
has_superuser_help=has_superuser_help,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def build_plugin_data(classify: dict[str, list[Item]]) -> list[dict[str, str]]:
|
def build_plugin_data(classify: dict[str, list[Item]]) -> list[dict[str, str]]:
|
||||||
@ -160,6 +179,7 @@ async def build_zhenxun_image(
|
|||||||
width = int(637 * 1.5) if is_detail else 637
|
width = int(637 * 1.5) if is_detail else 637
|
||||||
title_font = int(53 * 1.5) if is_detail else 53
|
title_font = int(53 * 1.5) if is_detail else 53
|
||||||
tip_font = int(19 * 1.5) if is_detail else 19
|
tip_font = int(19 * 1.5) if is_detail else 19
|
||||||
|
plugin_count = sum(len(plugin["items"]) for plugin in plugin_list)
|
||||||
return await template_to_pic(
|
return await template_to_pic(
|
||||||
template_path=str((TEMPLATE_PATH / "ss_menu").absolute()),
|
template_path=str((TEMPLATE_PATH / "ss_menu").absolute()),
|
||||||
template_name="main.html",
|
template_name="main.html",
|
||||||
@ -170,6 +190,7 @@ async def build_zhenxun_image(
|
|||||||
"width": width,
|
"width": width,
|
||||||
"font_size": (title_font, tip_font),
|
"font_size": (title_font, tip_font),
|
||||||
"is_detail": is_detail,
|
"is_detail": is_detail,
|
||||||
|
"plugin_count": plugin_count,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
pages={
|
pages={
|
||||||
|
|||||||
@ -72,7 +72,9 @@ async def is_ban(user_id: str | None, group_id: str | None) -> int:
|
|||||||
if user_id and group_id:
|
if user_id and group_id:
|
||||||
tasks.append(ban_dao.safe_get_or_none(user_id=user_id, group_id=group_id))
|
tasks.append(ban_dao.safe_get_or_none(user_id=user_id, group_id=group_id))
|
||||||
if user_id:
|
if user_id:
|
||||||
tasks.append(ban_dao.safe_get_or_none(user_id=user_id, group_id=""))
|
tasks.append(
|
||||||
|
ban_dao.safe_get_or_none(user_id=user_id, group_id__isnull=True)
|
||||||
|
)
|
||||||
|
|
||||||
# 等待所有查询完成,添加超时控制
|
# 等待所有查询完成,添加超时控制
|
||||||
if tasks:
|
if tasks:
|
||||||
|
|||||||
@ -65,7 +65,7 @@ class RegisterConfig(BaseModel):
|
|||||||
"""配置注解"""
|
"""配置注解"""
|
||||||
default_value: Any | None = None
|
default_value: Any | None = None
|
||||||
"""默认值"""
|
"""默认值"""
|
||||||
type: object = str
|
type: object = None
|
||||||
"""参数类型"""
|
"""参数类型"""
|
||||||
arg_parser: Callable | None = None
|
arg_parser: Callable | None = None
|
||||||
"""参数解析"""
|
"""参数解析"""
|
||||||
@ -155,8 +155,6 @@ class AICallableProperties(BaseModel):
|
|||||||
"""参数类型"""
|
"""参数类型"""
|
||||||
description: str
|
description: str
|
||||||
"""参数描述"""
|
"""参数描述"""
|
||||||
enums: list[str] | None = None
|
|
||||||
"""参数枚举"""
|
|
||||||
|
|
||||||
|
|
||||||
class AICallableParam(BaseModel):
|
class AICallableParam(BaseModel):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user