mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-18 10:40:03 +08:00
feat✨: 添加hook,更新其他
This commit is contained in:
@@ -17,6 +17,14 @@ class GroupConsole(Model):
|
||||
"""最大人数"""
|
||||
member_count = fields.IntField(default=0, description="当前人数")
|
||||
"""当前人数"""
|
||||
status = fields.BooleanField(default=True, description="群状态")
|
||||
"""群状态"""
|
||||
level = fields.IntField(default=5, description="群权限")
|
||||
"""群权限"""
|
||||
is_super = fields.BooleanField(
|
||||
default=False, description="超级用户指定,可以使用全局关闭的功能"
|
||||
)
|
||||
"""超级用户指定群,可以使用全局关闭的功能"""
|
||||
group_flag = fields.IntField(default=0, description="群认证标记")
|
||||
"""群认证标记"""
|
||||
block_plugin = fields.TextField(default="", description="禁用插件")
|
||||
@@ -31,6 +39,61 @@ class GroupConsole(Model):
|
||||
table_description = "群组信息表"
|
||||
unique_together = ("group_id", "channel_id")
|
||||
|
||||
@classmethod
|
||||
async def is_super_group(cls, group_id: str, channel_id: str | None = None) -> bool:
|
||||
"""是否超级用户指定群
|
||||
|
||||
参数:
|
||||
group_id: 群组id
|
||||
channel_id: 频道id.
|
||||
|
||||
返回:
|
||||
bool: 是否超级用户指定群
|
||||
"""
|
||||
if group := await cls.get_or_none(group_id=group_id):
|
||||
return group.is_super
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
async def is_super_block_plugin(
|
||||
cls, group_id: str, module: str, channel_id: str | None = None
|
||||
) -> bool:
|
||||
"""查看群组是否超级用户禁用功能
|
||||
|
||||
参数:
|
||||
group_id: 群组id
|
||||
module: 模块名称
|
||||
channel_id: 频道id
|
||||
|
||||
返回:
|
||||
bool: 是否禁用被动
|
||||
"""
|
||||
return await cls.exists(
|
||||
group_id=group_id,
|
||||
channel_id=channel_id,
|
||||
block_plugin__contains=f"super:{module},",
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def is_block_plugin(
|
||||
cls, group_id: str, module: str, channel_id: str | None = None
|
||||
) -> bool:
|
||||
"""查看群组是否禁用功能
|
||||
|
||||
参数:
|
||||
group_id: 群组id
|
||||
module: 模块名称
|
||||
channel_id: 频道id
|
||||
|
||||
返回:
|
||||
bool: 是否禁用被动
|
||||
"""
|
||||
return await cls.exists(
|
||||
group_id=group_id,
|
||||
channel_id=channel_id,
|
||||
block_plugin__contains=f"{module},",
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def is_block_task(
|
||||
cls, group_id: str, task: str, channel_id: str | None = None
|
||||
|
||||
@@ -26,7 +26,7 @@ class PluginLimit(Model):
|
||||
limit_type = fields.CharEnumField(PluginLimitType, description="限制类型")
|
||||
"""限制类型"""
|
||||
watch_type = fields.CharEnumField(LimitWatchType, description="监听类型")
|
||||
"""限制类型"""
|
||||
"""监听类型"""
|
||||
status = fields.BooleanField(default=True, description="限制的开关状态")
|
||||
"""限制的开关状态"""
|
||||
check_type = fields.CharEnumField(
|
||||
|
||||
@@ -4,6 +4,7 @@ from tortoise import fields
|
||||
|
||||
from zhenxun.services.db_context import Model
|
||||
from zhenxun.utils.enum import GoldHandle
|
||||
from zhenxun.utils.exception import InsufficientGold
|
||||
|
||||
from .user_gold_log import UserGoldLog
|
||||
|
||||
@@ -32,7 +33,29 @@ class UserConsole(Model):
|
||||
table_description = "用户数据表"
|
||||
|
||||
@classmethod
|
||||
async def get_new_uid(cls):
|
||||
async def get_user(cls, user_id: str, platform: str | None = None) -> "UserConsole":
|
||||
"""获取用户
|
||||
|
||||
参数:
|
||||
user_id: 用户id
|
||||
platform: 平台.
|
||||
|
||||
返回:
|
||||
UserConsole: UserConsole
|
||||
"""
|
||||
user, _ = await UserConsole.get_or_create(
|
||||
user_id=user_id,
|
||||
defaults={"platform": platform, "uid": await cls.get_new_uid()},
|
||||
)
|
||||
return user
|
||||
|
||||
@classmethod
|
||||
async def get_new_uid(cls) -> int:
|
||||
"""获取最新uid
|
||||
|
||||
返回:
|
||||
int: 最新uid
|
||||
"""
|
||||
if user := await cls.annotate().order_by("uid").first():
|
||||
return user.uid + 1
|
||||
return 1
|
||||
@@ -58,6 +81,38 @@ class UserConsole(Model):
|
||||
user_id=user_id, gold=gold, handle=GoldHandle.GET, source=source
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def reduce_gold(
|
||||
cls,
|
||||
user_id: str,
|
||||
gold: int,
|
||||
handle: GoldHandle,
|
||||
plugin_module: str,
|
||||
platform: str | None = None,
|
||||
):
|
||||
"""消耗金币
|
||||
|
||||
参数:
|
||||
user_id: 用户id
|
||||
gold: 金币
|
||||
handle: 金币处理
|
||||
plugin_name: 插件模块
|
||||
platform: 平台.
|
||||
|
||||
异常:
|
||||
InsufficientGold: 金币不足
|
||||
"""
|
||||
user, _ = await cls.get_or_create(
|
||||
user_id=user_id, defaults={"platform": platform, "uid": cls.get_new_uid()}
|
||||
)
|
||||
if user.gold < gold:
|
||||
raise InsufficientGold()
|
||||
user.gold -= gold
|
||||
await user.save(update_fields=["gold"])
|
||||
await UserGoldLog.create(
|
||||
user_id=user_id, gold=gold, handle=handle, source=plugin_module
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def add_props(
|
||||
cls, user_id: str, goods_uuid: str, num: int = 1, platform: str | None = None
|
||||
|
||||
Reference in New Issue
Block a user