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

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使用方法具体查看文档或签到商品文件中注册的例子 * 商品添加使用前方法和使用后方法类似hook使用方法具体查看文档或签到商品文件中注册的例子
* 新增用户使用道具,花费金币(包括插件)及用途记录
* 更细致的金币使用依赖注入
* 色图插件p站反向代理失效 [@pull/1139](https://github.com/HibiKier/zhenxun_bot/pull/1139) * 色图插件p站反向代理失效 [@pull/1139](https://github.com/HibiKier/zhenxun_bot/pull/1139)
### 2022/10/9 ### 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.friend_user import FriendUser
from models.group_member_info import GroupInfoUser from models.group_member_info import GroupInfoUser
from models.bag_user import BagUser from models.bag_user import BagUser
from models.user_shop_gold_log import UserShopGoldLog
from utils.manager import ( from utils.manager import (
plugins2settings_manager, plugins2settings_manager,
admin_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: if await BagUser.get_gold(event.user_id, event.group_id) < cost_gold:
await send_msg(f"金币不足..该功能需要{cost_gold}金币..", bot, event) await send_msg(f"金币不足..该功能需要{cost_gold}金币..", bot, event)
raise IgnoredException(f"{module} 金币限制...") raise IgnoredException(f"{module} 金币限制...")
await UserShopGoldLog.add_shop_log(event.user_id, event.group_id, 2, matcher.plugin_name, cost_gold, 1)
# 当插件不阻塞超级用户时,超级用户提前扣除金币 # 当插件不阻塞超级用户时,超级用户提前扣除金币
if ( if (
str(event.user_id) in bot.config.superusers str(event.user_id) in bot.config.superusers

View File

@ -1,6 +1,6 @@
from nonebot import on_command 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 services.log import logger
from nonebot.adapters.onebot.v11 import GroupMessageEvent, Message from nonebot.adapters.onebot.v11 import GroupMessageEvent, Message
from nonebot.params import CommandArg 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"USER {event.user_id} GROUP {event.group_id} "
f"花费 {goods.goods_price*num} 金币购买 {goods.goods_name} ×{num} 成功!" f"花费 {goods.goods_price*num} 金币购买 {goods.goods_name} ×{num} 成功!"
) )
await ShopLog.add_shop_log( await UserShopGoldLog.add_shop_log(
event.user_id, event.user_id,
event.group_id, event.group_id,
0, 0,

View File

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

View File

@ -3,13 +3,13 @@ from datetime import datetime
from services.db_context import db from services.db_context import db
class ShopLog(db.Model): class UserShopGoldLog(db.Model):
__tablename__ = "shop_log" __tablename__ = "user_shop_gold_log"
id = db.Column(db.Integer(), primary_key=True) id = db.Column(db.Integer(), primary_key=True)
user_qq = db.Column(db.BigInteger(), nullable=False) user_qq = db.Column(db.BigInteger(), nullable=False)
group_id = db.Column(db.BigInteger(), nullable=False) group_id = db.Column(db.BigInteger(), nullable=False)
type = db.Column(db.Integer(), nullable=False) # 0: 购买1: 使用 type = db.Column(db.Integer(), nullable=False) # 0: 购买1: 使用2: 插件
goods_name = db.Column(db.String(), default=100) name = db.Column(db.String())
spend_gold = db.Column(db.Integer(), nullable=False) spend_gold = db.Column(db.Integer(), nullable=False)
num = db.Column(db.Integer(), nullable=False) num = db.Column(db.Integer(), nullable=False)
create_time = db.Column(db.DateTime(timezone=True), nullable=False) create_time = db.Column(db.DateTime(timezone=True), nullable=False)
@ -20,7 +20,7 @@ class ShopLog(db.Model):
user_qq: int, user_qq: int,
group_id: int, group_id: int,
type_: int, type_: int,
goods_name: str, name: str,
num: int, num: int,
spend_gold: int = 0, spend_gold: int = 0,
): ):
@ -31,7 +31,7 @@ class ShopLog(db.Model):
:param user_qq: qq号 :param user_qq: qq号
:param group_id: 所在群号 :param group_id: 所在群号
:param type_: 类型 :param type_: 类型
:param goods_name: 商品名称 :param name: 商品名称
:param num: 数量 :param num: 数量
:param spend_gold: 花费金币 :param spend_gold: 花费金币
""" """
@ -39,14 +39,14 @@ class ShopLog(db.Model):
user_qq=user_qq, user_qq=user_qq,
group_id=group_id, group_id=group_id,
type=type_, type=type_,
goods_name=goods_name, name=name,
num=num, num=num,
spend_gold=spend_gold, spend_gold=spend_gold,
create_time=datetime.now(), create_time=datetime.now(),
) )
@classmethod @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.adapters.onebot.v11 import MessageSegment, Message
from nonebot.plugin import require from nonebot.plugin import require
require("use")
require("shop_handle")
class ShopRegister(dict): class ShopRegister(dict):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -94,6 +91,8 @@ class ShopRegister(dict):
return lambda func: add_register_item(func) return lambda func: add_register_item(func)
async def load_register(self): 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.use.data_source import register_use, func_manager
from basic_plugins.shop.shop_handle.data_source import register_goods 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)