diff --git a/zhenxun/builtin_plugins/hooks/_auth_checker.py b/zhenxun/builtin_plugins/hooks/_auth_checker.py index 661bff03..738a7076 100644 --- a/zhenxun/builtin_plugins/hooks/_auth_checker.py +++ b/zhenxun/builtin_plugins/hooks/_auth_checker.py @@ -24,6 +24,7 @@ from zhenxun.utils.enum import ( PluginLimitType, PluginType, ) +from zhenxun.utils.exception import InsufficientGold from zhenxun.utils.utils import CountLimiter, FreqLimiter, UserBlockLimiter @@ -233,13 +234,18 @@ class AuthChecker: ) if cost_gold and user_id: """花费金币""" - await UserConsole.reduce_gold( - user_id, - cost_gold, - GoldHandle.PLUGIN, - matcher.plugin.name if matcher.plugin else "", - session.platform, - ) + try: + await UserConsole.reduce_gold( + user_id, + cost_gold, + GoldHandle.PLUGIN, + matcher.plugin.name if matcher.plugin else "", + session.platform, + ) + except InsufficientGold: + if u := await UserConsole.get_user(user_id): + u.gold = 0 + await u.save(update_fields=["gold"]) logger.debug(f"调用功能花费金币: {cost_gold}", "HOOK", session=session) if is_ignore: raise IgnoredException("权限检测 ignore") diff --git a/zhenxun/plugins/gold_redbag/__init__.py b/zhenxun/plugins/gold_redbag/__init__.py index 6cc29f22..a24a5fb5 100644 --- a/zhenxun/plugins/gold_redbag/__init__.py +++ b/zhenxun/plugins/gold_redbag/__init__.py @@ -36,7 +36,7 @@ __plugin_meta__ = PluginMetadata( * 不同群组同一个节日红包用户只能开一次 - 示例: + 示例: 塞红包 1000 塞红包 1000 10 """.strip(), diff --git a/zhenxun/plugins/russian/data_source.py b/zhenxun/plugins/russian/data_source.py index d7d0c333..e7b5aed2 100644 --- a/zhenxun/plugins/russian/data_source.py +++ b/zhenxun/plugins/russian/data_source.py @@ -12,6 +12,7 @@ from zhenxun.configs.config import NICKNAME, Config from zhenxun.models.group_member_info import GroupInfoUser from zhenxun.models.user_console import UserConsole from zhenxun.utils.enum import GoldHandle +from zhenxun.utils.exception import InsufficientGold from zhenxun.utils.image_utils import BuildImage, BuildMat, MatType, text2image from zhenxun.utils.platform import PlatformUtils @@ -183,7 +184,9 @@ class RussianManage: self.__build_job(bot, group_id, True) return MessageFactory(message_list) - def accept(self, group_id: str, user_id: str, uname: str) -> Text | MessageFactory: + async def accept( + self, group_id: str, user_id: str, uname: str + ) -> Text | MessageFactory: """接受对决 参数: @@ -201,6 +204,9 @@ class RussianManage: return Text("当前决斗已被其他玩家接受!请等待下局对决!") if russian.player1[0] == user_id: return Text("你发起的对决,你接受什么啊!气!") + user = await UserConsole.get_user(user_id) + if user.gold < russian.money: + return Text("你没有足够的钱来接受这场挑战...") russian.player2 = (user_id, uname) russian.next_user = russian.player1[0] return MessageFactory( @@ -368,9 +374,18 @@ class RussianManage: await UserConsole.add_gold( win_user[0], russian.money - fee, "russian", platform ) - await UserConsole.reduce_gold( - lose_user[0], russian.money, GoldHandle.PLUGIN, "russian", platform - ) + try: + await UserConsole.reduce_gold( + lose_user[0], + russian.money, + GoldHandle.PLUGIN, + "russian", + platform, + ) + except InsufficientGold: + if u := await UserConsole.get_user(lose_user[0]): + u.gold = 0 + await u.save(update_fields=["gold"]) result = [Text("这场决斗是 "), Mention(win_user[0]), Text(" 胜利了!")] image = await text2image( f"结算:\n"