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
+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
)