diff --git a/plugins/xiuxian/config.toml b/plugins/xiuxian/config.toml index 18b77d1..759e44e 100644 --- a/plugins/xiuxian/config.toml +++ b/plugins/xiuxian/config.toml @@ -52,7 +52,7 @@ gift_seconds = 10 points_to_stone_seconds = 10 # 副本与炼丹冷却 -expedition_seconds = 1800 +expedition_seconds = 86400 alchemy_seconds = 600 # 修为结算参数:基础速率(每小时),灵根乘数(名称:倍率) diff --git a/plugins/xiuxian/main.py b/plugins/xiuxian/main.py index 757bade..8982fc7 100644 --- a/plugins/xiuxian/main.py +++ b/plugins/xiuxian/main.py @@ -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"):