🎨 优化我的道具方法

This commit is contained in:
HibiKier 2025-03-03 10:15:53 +08:00
parent d8e437dbb7
commit 3b7f82c7a6
4 changed files with 81 additions and 49 deletions

View File

@ -22,8 +22,11 @@ BASE_PATH.mkdir(parents=True, exist_ok=True)
driver = nonebot.get_driver() driver = nonebot.get_driver()
old_file = DATA_PATH / "custom_welcome_msg" / "custom_welcome_msg.json" def __migrate():
if old_file.exists(): """首次数据迁移"""
old_file = DATA_PATH / "custom_welcome_msg" / "custom_welcome_msg.json"
if not old_file.exists():
return
try: try:
old_data: dict[str, str] = json.load(old_file.open(encoding="utf8")) old_data: dict[str, str] = json.load(old_file.open(encoding="utf8"))
for group_id, message in old_data.items(): for group_id, message in old_data.items():
@ -53,6 +56,7 @@ def migrate(path: Path):
参数: 参数:
path: 路径 path: 路径
""" """
__migrate()
text_file = path / "text.json" text_file = path / "text.json"
if not text_file.exists(): if not text_file.exists():
return return

View File

@ -54,27 +54,29 @@ _path = IMAGE_PATH / "_base" / "laugh"
@_matcher.handle() @_matcher.handle()
async def _(matcher: Matcher, message: UniMsg, session: EventSession): async def _(matcher: Matcher, message: UniMsg, session: EventSession):
text = message.extract_plain_text().strip() text = message.extract_plain_text().strip()
if plugin := await PluginInfo.get_or_none( plugin = await PluginInfo.get_or_none(
name=text, name=text,
load_status=True, load_status=True,
plugin_type=PluginType.NORMAL, plugin_type=PluginType.NORMAL,
block_type__isnull=True, block_type__isnull=True,
status=True, status=True,
): )
image = None
if _path.exists(): if not plugin:
if files := os.listdir(_path): return
image = _path / random.choice(files)
message_list = [] image = None
if image: if _path.exists():
message_list.append(image) if files := os.listdir(_path):
message_list.append( image = _path / random.choice(files)
"桀桀桀,预判到会有 '笨蛋' 把功能名称当命令用,特地前来嘲笑!" message_list = []
f"但还是好心来帮帮你啦!\n请at我发送 '帮助{plugin.name}' 或者" if image:
f" '帮助{plugin.id}' 来获取该功能帮助!" message_list.append(image)
) message_list.append(
logger.info( "桀桀桀,预判到会有 '笨蛋' 把功能名称当命令用,特地前来嘲笑!"
"检测到功能名称当命令使用,已发送帮助信息", "功能帮助", session=session f"但还是好心来帮帮你啦!\n请at我发送 '帮助{plugin.name}' 或者"
) f" '帮助{plugin.id}' 来获取该功能帮助!"
await MessageUtils.build_message(message_list).send(reply_to=True) )
matcher.stop_propagation() logger.info("检测到功能名称当命令使用,已发送帮助信息", "功能帮助", session=session)
await MessageUtils.build_message(message_list).send(reply_to=True)
matcher.stop_propagation()

View File

@ -478,36 +478,42 @@ class ShopManage:
user = await UserConsole.get_user(user_id, platform) user = await UserConsole.get_user(user_id, platform)
if not user.props: if not user.props:
return None return None
is_change = False
for uuid in list(user.props.keys()):
if user.props[uuid] <= 0:
is_change = True
del user.props[uuid]
if is_change:
await user.save(update_fields=["props"])
result = await GoodsInfo.filter(uuid__in=user.props.keys()).all()
data_list = []
uuid2goods = {item.uuid: item for item in result}
column_name = ["-", "使用ID", "名称", "数量", "简介"]
for i, p in enumerate(user.props):
if prop := uuid2goods.get(p):
icon = ""
if prop.icon:
icon_path = ICON_PATH / prop.icon
if icon_path.exists():
icon = (icon_path, 33, 33)
data_list.append(
[
icon,
i,
prop.goods_name,
user.props[p],
prop.goods_description,
]
)
user.props = {uuid: count for uuid, count in user.props.items() if count > 0}
goods_list = await GoodsInfo.filter(uuid__in=user.props.keys()).all()
goods_by_uuid = {item.uuid: item for item in goods_list}
table_rows = []
for i, prop_uuid in enumerate(user.props):
prop = goods_by_uuid.get(prop_uuid)
if not prop:
continue
icon = ""
if prop.icon:
icon_path = ICON_PATH / prop.icon
icon = (icon_path, 33, 33) if icon_path.exists() else ""
table_rows.append(
[
icon,
i,
prop.goods_name,
user.props[prop_uuid],
prop.goods_description,
]
)
if not table_rows:
return None
column_name = ["-", "使用ID", "名称", "数量", "简介"]
return await ImageTemplate.table_page( return await ImageTemplate.table_page(
f"{name}的道具仓库", "", column_name, data_list f"{name}的道具仓库",
"通过 使用道具[ID/名称] 令道具生效",
column_name,
table_rows,
) )
@classmethod @classmethod

View File

@ -5,6 +5,8 @@ from nonebot_plugin_session import EventSession
from nonebot_plugin_uninfo import Uninfo from nonebot_plugin_uninfo import Uninfo
from zhenxun.configs.config import Config from zhenxun.configs.config import Config
from zhenxun.models.ban_console import BanConsole
from zhenxun.models.group_console import GroupConsole
from zhenxun.models.level_user import LevelUser from zhenxun.models.level_user import LevelUser
from zhenxun.utils.platform import PlatformUtils from zhenxun.utils.platform import PlatformUtils
@ -89,3 +91,21 @@ def notice_rule(event_type: type | list[type]) -> Rule:
return False return False
return Rule(_rule) return Rule(_rule)
def is_allowed_call() -> Rule:
"""是否允许调用插件"""
async def _rule(session: Uninfo) -> bool:
group_id = session.group.id if session.group else None
if await BanConsole.is_ban(session.user.id, group_id):
return False
if group_id:
if await BanConsole.is_ban(None, group_id):
return False
if g := await GroupConsole.get_group(group_id):
if g.level < 0:
return False
return True
return Rule(_rule)