bugfix:修复命令前缀判断问题、修复超级用户无法豁免问题 (#2141)

* bugfix:修复命令前缀判断问题、修复超级用户无法豁免问题

* bugfix:修复格式问题
This commit is contained in:
Copaan
2026-06-16 17:14:03 +08:00
committed by GitHub
parent 8afc8f8673
commit a2c0cfdf5d
18 changed files with 224 additions and 51 deletions
+1 -1
View File
@@ -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"""
+13 -5
View File
@@ -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
)
+8
View File
@@ -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"),
]