新增用户使用道具,花费金币及用途记录表以及更细致的金币使用依赖注入

This commit is contained in:
HibiKier 2022-10-15 21:21:23 +08:00
parent 4f3f8de734
commit cb0938721c
7 changed files with 42 additions and 15 deletions

View File

@ -292,6 +292,8 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能
* 我的道具改为图片形式
* 商品添加图标与是否为被动道具(被动道具无法被主动使用)
* 商品添加使用前方法和使用后方法类似hook使用方法具体查看文档或签到商品文件中注册的例子
* 新增用户使用道具,花费金币(包括插件)及用途记录
* 更细致的金币使用依赖注入
* 色图插件p站反向代理失效 [@pull/1139](https://github.com/HibiKier/zhenxun_bot/pull/1139)
### 2022/10/9

View File

@ -3,6 +3,7 @@ from nonebot.message import run_preprocessor, run_postprocessor, IgnoredExceptio
from models.friend_user import FriendUser
from models.group_member_info import GroupInfoUser
from models.bag_user import BagUser
from models.user_shop_gold_log import UserShopGoldLog
from utils.manager import (
plugins2settings_manager,
admin_manager,
@ -59,6 +60,7 @@ async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State):
if await BagUser.get_gold(event.user_id, event.group_id) < cost_gold:
await send_msg(f"金币不足..该功能需要{cost_gold}金币..", bot, event)
raise IgnoredException(f"{module} 金币限制...")
await UserShopGoldLog.add_shop_log(event.user_id, event.group_id, 2, matcher.plugin_name, cost_gold, 1)
# 当插件不阻塞超级用户时,超级用户提前扣除金币
if (
str(event.user_id) in bot.config.superusers

View File

@ -1,6 +1,6 @@
from nonebot import on_command
from models.shop_log import ShopLog
from models.user_shop_gold_log import UserShopGoldLog
from services.log import logger
from nonebot.adapters.onebot.v11 import GroupMessageEvent, Message
from nonebot.params import CommandArg
@ -93,7 +93,7 @@ async def _(event: GroupMessageEvent, arg: Message = CommandArg()):
f"USER {event.user_id} GROUP {event.group_id} "
f"花费 {goods.goods_price*num} 金币购买 {goods.goods_name} ×{num} 成功!"
)
await ShopLog.add_shop_log(
await UserShopGoldLog.add_shop_log(
event.user_id,
event.group_id,
0,

View File

@ -1,6 +1,6 @@
from nonebot import on_command
from models.shop_log import ShopLog
from models.user_shop_gold_log import UserShopGoldLog
from services.log import logger
from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, Message
from nonebot.params import CommandArg
@ -78,7 +78,7 @@ async def _(bot: Bot, event: GroupMessageEvent, arg: Message = CommandArg()):
logger.info(
f"USER {event.user_id} GROUP {event.group_id} 使用道具 {name} {num} 次成功"
)
await ShopLog.add_shop_log(event.user_id, event.group_id, 1, name, num)
await UserShopGoldLog.add_shop_log(event.user_id, event.group_id, 1, name, num)
else:
await use_props.send(f"使用道具 {name} {num} 次失败!", at_sender=True)
logger.info(

View File

@ -3,13 +3,13 @@ from datetime import datetime
from services.db_context import db
class ShopLog(db.Model):
__tablename__ = "shop_log"
class UserShopGoldLog(db.Model):
__tablename__ = "user_shop_gold_log"
id = db.Column(db.Integer(), primary_key=True)
user_qq = db.Column(db.BigInteger(), nullable=False)
group_id = db.Column(db.BigInteger(), nullable=False)
type = db.Column(db.Integer(), nullable=False) # 0: 购买1: 使用
goods_name = db.Column(db.String(), default=100)
type = db.Column(db.Integer(), nullable=False) # 0: 购买1: 使用2: 插件
name = db.Column(db.String())
spend_gold = db.Column(db.Integer(), nullable=False)
num = db.Column(db.Integer(), nullable=False)
create_time = db.Column(db.DateTime(timezone=True), nullable=False)
@ -20,7 +20,7 @@ class ShopLog(db.Model):
user_qq: int,
group_id: int,
type_: int,
goods_name: str,
name: str,
num: int,
spend_gold: int = 0,
):
@ -31,7 +31,7 @@ class ShopLog(db.Model):
:param user_qq: qq号
:param group_id: 所在群号
:param type_: 类型
:param goods_name: 商品名称
:param name: 商品名称
:param num: 数量
:param spend_gold: 花费金币
"""
@ -39,14 +39,14 @@ class ShopLog(db.Model):
user_qq=user_qq,
group_id=group_id,
type=type_,
goods_name=goods_name,
name=name,
num=num,
spend_gold=spend_gold,
create_time=datetime.now(),
)
@classmethod
async def get_user_log(cls, user_qq: int, group_id: int) -> "ShopLog":
async def get_user_log(cls, user_qq: int, group_id: int) -> "UserShopGoldLog":
"""
说明:
获取用户日志

View File

@ -2,9 +2,6 @@ from typing import Callable, Union, Tuple, Optional
from nonebot.adapters.onebot.v11 import MessageSegment, Message
from nonebot.plugin import require
require("use")
require("shop_handle")
class ShopRegister(dict):
def __init__(self, *args, **kwargs):
@ -94,6 +91,8 @@ class ShopRegister(dict):
return lambda func: add_register_item(func)
async def load_register(self):
require("use")
require("shop_handle")
from basic_plugins.shop.use.data_source import register_use, func_manager
from basic_plugins.shop.shop_handle.data_source import register_goods
# 统一进行注册

View File

@ -0,0 +1,24 @@
from nonebot.adapters.onebot.v11 import GroupMessageEvent
from nonebot.internal.matcher import Matcher
from nonebot.internal.params import Depends
from models.user_shop_gold_log import UserShopGoldLog
from models.bag_user import BagUser
from utils.message_builder import at
def cost_gold(gold: int):
"""
说明:
插件方法调用使用金币
参数:
:param gold: 金币数量
"""
async def dependency(matcher: Matcher, event: GroupMessageEvent):
if (await BagUser.get_gold(event.user_id, event.group_id)) < gold:
await matcher.finish(at(event.user_id) + f"金币不足..该功能需要{gold}金币..")
await BagUser.spend_gold(event.user_id, event.group_id, gold)
await UserShopGoldLog.add_shop_log(event.user_id, event.group_id, 2, matcher.plugin_name, gold, 1)
return Depends(dependency)