diff --git a/zhenxun/builtin_plugins/shop/__init__.py b/zhenxun/builtin_plugins/shop/__init__.py index 5c48c3f2..104ae88e 100644 --- a/zhenxun/builtin_plugins/shop/__init__.py +++ b/zhenxun/builtin_plugins/shop/__init__.py @@ -14,7 +14,6 @@ from nonebot_plugin_alconna import ( on_alconna, store_true, ) -from nonebot_plugin_session import EventSession from nonebot_plugin_uninfo import Uninfo from zhenxun.configs.utils import BaseBlock, PluginExtraData @@ -23,6 +22,7 @@ from zhenxun.utils.depends import UserName from zhenxun.utils.enum import BlockType, PluginType from zhenxun.utils.exception import GoodsNotFound from zhenxun.utils.message import MessageUtils +from zhenxun.utils.platform import PlatformUtils from ._data_source import ShopManage, gold_rank @@ -107,35 +107,29 @@ _matcher.shortcut( @_matcher.assign("$main") -async def _(session: EventSession, arparma: Arparma): +async def _(session: Uninfo, arparma: Arparma): image = await ShopManage.build_shop_image() logger.info("查看商店", arparma.header_result, session=session) await MessageUtils.build_message(image).send() @_matcher.assign("my-cost") -async def _(session: EventSession, arparma: Arparma): - if session.id1: - logger.info("查看金币", arparma.header_result, session=session) - gold = await ShopManage.my_cost(session.id1, session.platform) - await MessageUtils.build_message(f"你的当前余额: {gold}").send(reply_to=True) - else: - await MessageUtils.build_message("用户id为空...").send(reply_to=True) +async def _(session: Uninfo, arparma: Arparma): + logger.info("查看金币", arparma.header_result, session=session) + gold = await ShopManage.my_cost( + session.user.id, PlatformUtils.get_platform(session) + ) + await MessageUtils.build_message(f"你的当前余额: {gold}").send(reply_to=True) @_matcher.assign("my-props") -async def _(session: EventSession, arparma: Arparma, nickname: str = UserName()): - if session.id1: - logger.info("查看道具", arparma.header_result, session=session) - if image := await ShopManage.my_props( - session.id1, - nickname, - session.platform, - ): - await MessageUtils.build_message(image.pic2bytes()).finish(reply_to=True) - return await MessageUtils.build_message("你的道具为空捏...").send(reply_to=True) - else: - await MessageUtils.build_message("用户id为空...").send(reply_to=True) +async def _(session: Uninfo, arparma: Arparma, nickname: str = UserName()): + logger.info("查看道具", arparma.header_result, session=session) + if image := await ShopManage.my_props( + session.user.id, nickname, PlatformUtils.get_platform(session) + ): + await MessageUtils.build_message(image.pic2bytes()).finish(reply_to=True) + return await MessageUtils.build_message("你的道具为空捏...").send(reply_to=True) @_matcher.assign("buy") @@ -163,7 +157,7 @@ async def _( bot: Bot, event: Event, message: UniMsg, - session: EventSession, + session: Uninfo, arparma: Arparma, name: Match[str], num: Query[int] = AlconnaQuery("num", 1), @@ -177,7 +171,9 @@ async def _( bot, event, session, message, name.result, num.result, "" ) logger.info( - f"使用道具 {name}, 数量: {num}", arparma.header_result, session=session + f"使用道具 {name.result}, 数量: {num.result}", + arparma.header_result, + session=session, ) if isinstance(result, str): await MessageUtils.build_message(result).send(reply_to=True) diff --git a/zhenxun/builtin_plugins/shop/_data_source.py b/zhenxun/builtin_plugins/shop/_data_source.py index 58657f86..ec8c3d97 100644 --- a/zhenxun/builtin_plugins/shop/_data_source.py +++ b/zhenxun/builtin_plugins/shop/_data_source.py @@ -7,7 +7,6 @@ from typing import Any, Literal from nonebot.adapters import Bot, Event from nonebot_plugin_alconna import UniMessage, UniMsg -from nonebot_plugin_session import EventSession from nonebot_plugin_uninfo import Uninfo from pydantic import BaseModel, create_model @@ -52,8 +51,8 @@ class Goods(BaseModel): """单次使用最大次数""" model: Any = None """model""" - session: EventSession | None = None - """EventSession""" + session: Uninfo | None = None + """Uninfo""" class ShopParam(BaseModel): @@ -75,8 +74,8 @@ class ShopParam(BaseModel): """是否发送使用成功信息""" max_num_limit: int = 1 """单次使用最大次数""" - session: EventSession | None = None - """EventSession""" + session: Uninfo | None = None + """Uninfo""" message: UniMsg """UniMessage""" @@ -143,7 +142,7 @@ class ShopManage: cls, bot: Bot, event: Event, - session: EventSession, + session: Uninfo, message: UniMsg, goods: Goods, num: int, @@ -158,14 +157,19 @@ class ShopManage: num: 数量 text: 其他信息 """ + group_id = None + if session.group: + group_id = ( + session.group.parent.id if session.group.parent else session.group.id + ) _kwargs = goods.params model = goods.model( **{ "goods_name": goods.name, "bot": bot, "event": event, - "user_id": session.id1, - "group_id": session.id3 or session.id2, + "user_id": session.user.id, + "group_id": group_id, "num": num, "text": text, "session": session, @@ -176,8 +180,8 @@ class ShopManage: **_kwargs, "_bot": bot, "event": event, - "user_id": session.id1, - "group_id": session.id3 or session.id2, + "user_id": session.user.id, + "group_id": group_id, "num": num, "text": text, "goods_name": goods.name, @@ -189,7 +193,7 @@ class ShopManage: cls, args: MappingProxyType, param: ShopParam, - session: EventSession, + session: Uninfo, **kwargs, ) -> list[Any]: """解析参数 @@ -253,7 +257,7 @@ class ShopManage: cls, goods: Goods, param: ShopParam, - session: EventSession, + session: Uninfo, **kwargs, ) -> str | UniMessage | None: """运行道具函数 @@ -285,7 +289,7 @@ class ShopManage: cls, bot: Bot, event: Event, - session: EventSession, + session: Uninfo, message: UniMsg, goods_name: str, num: int, @@ -307,7 +311,7 @@ class ShopManage: """ if goods_name.isdigit(): try: - user = await UserConsole.get_user(user_id=session.id1) # type: ignore + user = await UserConsole.get_user(user_id=session.user.id) uuid = list(user.props.keys())[int(goods_name)] goods_info = await GoodsInfo.get_or_none(uuid=uuid) except IndexError: @@ -328,7 +332,9 @@ class ShopManage: return f"{goods_info.goods_name} 单次使用最大数量为{param.max_num_limit}..." await cls.run_before_after(goods, param, "before", **kwargs) result = await cls.__run(goods, param, session, **kwargs) - await UserConsole.use_props(session.id1, goods_info.uuid, num, session.platform) # type: ignore + await UserConsole.use_props( + session.user.id, goods_info.uuid, num, PlatformUtils.get_platform(session) + ) await cls.run_before_after(goods, param, "after", **kwargs) if not result and param.send_success_msg: result = f"使用道具 {goods.name} {num} 次成功!" diff --git a/zhenxun/builtin_plugins/sign_in/goods_register.py b/zhenxun/builtin_plugins/sign_in/goods_register.py index a280d9a7..f7a65359 100644 --- a/zhenxun/builtin_plugins/sign_in/goods_register.py +++ b/zhenxun/builtin_plugins/sign_in/goods_register.py @@ -2,11 +2,12 @@ from decimal import Decimal import nonebot from nonebot.drivers import Driver -from nonebot_plugin_session import EventSession +from nonebot_plugin_uninfo import Uninfo from zhenxun.models.sign_user import SignUser from zhenxun.models.user_console import UserConsole from zhenxun.utils.decorator.shop import shop_register +from zhenxun.utils.platform import PlatformUtils driver: Driver = nonebot.get_driver() @@ -38,15 +39,15 @@ driver: Driver = nonebot.get_driver() "好感度双倍加持卡Ⅲ_prob": 0.3, }, # type: ignore ) -async def _(session: EventSession, user_id: int, prob: float): - if session.id1: - user_console = await UserConsole.get_user(session.id1, session.platform) - user, _ = await SignUser.get_or_create( - user_id=user_id, - defaults={"platform": session.platform, "user_console": user_console}, - ) - user.add_probability = Decimal(prob) - await user.save(update_fields=["add_probability"]) +async def _(session: Uninfo, user_id: int, prob: float): + platform = PlatformUtils.get_platform(session) + user_console = await UserConsole.get_user(session.user.id, platform) + user, _ = await SignUser.get_or_create( + user_id=user_id, + defaults={"platform": platform, "user_console": user_console}, + ) + user.add_probability = Decimal(prob) + await user.save(update_fields=["add_probability"]) @shop_register(