mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-07 12:50:03 +08:00
bugfix:修复命令前缀判断问题、修复超级用户无法豁免问题 (#2141)
* bugfix:修复命令前缀判断问题、修复超级用户无法豁免问题 * bugfix:修复格式问题
This commit is contained in:
@@ -15,7 +15,7 @@ class Statistics(Model):
|
||||
"""群聊id"""
|
||||
plugin_name = fields.CharField(255)
|
||||
"""插件名称"""
|
||||
create_time = fields.DatetimeField(auto_now=True)
|
||||
create_time = fields.DatetimeField(auto_now_add=True)
|
||||
"""添加日期"""
|
||||
bot_id = fields.CharField(255, null=True)
|
||||
"""Bot Id"""
|
||||
|
||||
@@ -151,9 +151,11 @@ class UserConsole(Model):
|
||||
source: 来源
|
||||
platform: 平台.
|
||||
"""
|
||||
user = await cls._get_user_for_write(user_id=user_id, platform=platform)
|
||||
user.gold += gold
|
||||
await user.save(update_fields=["gold"])
|
||||
await cls._get_user_for_write(user_id=user_id, platform=platform)
|
||||
# 原子自增,避免并发 read-modify-write 丢币(A2);filter().update()
|
||||
# 不触发基类 save() 的缓存失效,需手动失效。
|
||||
await cls.filter(user_id=user_id).update(gold=F("gold") + gold)
|
||||
await cls.invalidate_user_cache(user_id)
|
||||
await append_user_gold_log(
|
||||
user_id=user_id, gold=gold, handle=GoldHandle.GET, source=source
|
||||
)
|
||||
@@ -182,8 +184,14 @@ class UserConsole(Model):
|
||||
user = await cls._get_user_for_write(user_id=user_id, platform=platform)
|
||||
if user.gold < gold:
|
||||
raise InsufficientGold()
|
||||
user.gold -= gold
|
||||
await user.save(update_fields=["gold"])
|
||||
# 原子扣减 + gold__gte 守卫,防并发超扣(A2);未命中说明余额已被
|
||||
# 其他协程扣走,按金币不足处理。
|
||||
updated = await cls.filter(user_id=user_id, gold__gte=gold).update(
|
||||
gold=F("gold") - gold
|
||||
)
|
||||
if not updated:
|
||||
raise InsufficientGold()
|
||||
await cls.invalidate_user_cache(user_id)
|
||||
await append_user_gold_log(
|
||||
user_id=user_id, gold=gold, handle=handle, source=plugin_module
|
||||
)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from typing import ClassVar
|
||||
|
||||
from tortoise import fields
|
||||
|
||||
from zhenxun.services.db_context import Model
|
||||
@@ -21,3 +23,9 @@ class UserGoldLog(Model):
|
||||
class Meta: # pyright: ignore [reportIncompatibleVariableOverride]
|
||||
table = "user_gold_log"
|
||||
table_description = "用户金币记录表"
|
||||
# 高频写表补索引(H4):按 user_id / (user_id, create_time) 查询流水,
|
||||
# SchemaGuard 启动时自动建,不改变查询语义。
|
||||
indexes: ClassVar = [
|
||||
("user_id",),
|
||||
("user_id", "create_time"),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user