出门历练限流
This commit is contained in:
@@ -52,7 +52,7 @@ gift_seconds = 10
|
||||
points_to_stone_seconds = 10
|
||||
|
||||
# 副本与炼丹冷却
|
||||
expedition_seconds = 1800
|
||||
expedition_seconds = 86400
|
||||
alchemy_seconds = 600
|
||||
|
||||
# 修为结算参数:基础速率(每小时),灵根乘数(名称:倍率)
|
||||
|
||||
@@ -138,27 +138,9 @@ class XiuxianRedisDB:
|
||||
date_str = now.strftime("%Y-%m-%d")
|
||||
date_key = f"xiuxian:rate_limit:group:{group_id}:user:{user_id}:cmd:{cmd}:date:{date_str}"
|
||||
|
||||
# 如果基于日期的键存在,说明今天已限流
|
||||
if r.exists(date_key) == 1:
|
||||
key_no_date = f"xiuxian:rate_limit:group:{group_id}:user:{user_id}:cmd:{cmd}"
|
||||
if r.exists(date_key) == 1 or r.exists(key_no_date) == 1:
|
||||
return True
|
||||
|
||||
# 兼容旧格式:检查是否有旧的限流键(不带group_id和日期)
|
||||
old_key_no_group = f"xiuxian:rate_limit:user:{user_id}:cmd:{cmd}"
|
||||
old_key_with_date = f"xiuxian:rate_limit:user:{user_id}:cmd:{cmd}:date:{date_str}"
|
||||
|
||||
# 检查旧格式(不带group_id,带日期)
|
||||
if r.exists(old_key_with_date) == 1:
|
||||
return True
|
||||
|
||||
# 检查旧格式(不带group_id,不带日期)
|
||||
if r.exists(old_key_no_group) == 1:
|
||||
# 如果旧键存在,检查是否过期(TTL > 0表示未过期)
|
||||
ttl = r.ttl(old_key_no_group)
|
||||
if ttl > 0:
|
||||
return True
|
||||
# 如果已过期,删除旧键
|
||||
r.delete(old_key_no_group)
|
||||
|
||||
return False
|
||||
except Exception as e:
|
||||
logger.error(f"检查限流失败: {e}")
|
||||
@@ -502,18 +484,12 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
return False, "Redis未初始化"
|
||||
|
||||
# 限流:默认按用户+群维度;历练按用户全局维度
|
||||
if cmd == "出门历练":
|
||||
if self.redis_db.check_rate_limited(sender, "__global__", cmd):
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), "⚠️ 历练冷却中,请稍候再试", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 5)
|
||||
return False, "限流"
|
||||
else:
|
||||
if self.redis_db.check_rate_limited(sender, roomid or "", cmd):
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), "⚠️ 操作过于频繁,请稍候再试", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 5)
|
||||
return False, "限流"
|
||||
|
||||
if self.redis_db.check_rate_limited(sender, roomid or "", cmd):
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), "⚠️ 操作过于频繁,请稍候再试", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 5)
|
||||
return False, "限流"
|
||||
|
||||
if cmd == "注册修仙":
|
||||
return await self._cmd_register(bot, sender, roomid, content)
|
||||
@@ -1121,6 +1097,12 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
player = self._get_player(sender, roomid or "")
|
||||
if not player:
|
||||
return False, "未注册"
|
||||
if self.redis_db.check_rate_limited(sender, "__global__", cmd):
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), "⚠️ 历练冷却中,请稍候再试", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 5)
|
||||
return False, "限流"
|
||||
|
||||
player = self._check_status_update(player)
|
||||
st = player.get("status", "Idle")
|
||||
if st in ("Cultivating", "Injured", "Expedition"):
|
||||
|
||||
Reference in New Issue
Block a user