出门历练限流
This commit is contained in:
@@ -501,11 +501,19 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 5)
|
||||
return False, "Redis未初始化"
|
||||
|
||||
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 == "出门历练":
|
||||
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 cmd == "注册修仙":
|
||||
return await self._cmd_register(bot, sender, roomid, content)
|
||||
@@ -563,6 +571,10 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
seconds = self.seconds_rl.get(cmd, 3)
|
||||
self.redis_db.set_rate_limit(user_id, group_id, cmd, seconds)
|
||||
|
||||
def _rate_set_global(self, user_id: str, cmd: str):
|
||||
seconds = self.seconds_rl.get(cmd, 3)
|
||||
self.redis_db.set_rate_limit(user_id, "__global__", cmd, seconds)
|
||||
|
||||
def _check_status_update(self, player: Dict[str, Any]) -> Dict[str, Any]:
|
||||
"""状态机自动流转:过期的 Unstable_Qi/Injured 恢复为 Idle。"""
|
||||
now = datetime.now(timezone.utc)
|
||||
@@ -1150,13 +1162,13 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
player["status"] = "Injured"
|
||||
player["status_until"] = (datetime.now(timezone.utc) + timedelta(minutes=30)).isoformat()
|
||||
self._save_player(player)
|
||||
self._rate_set(sender, roomid or "", "出门历练")
|
||||
self._rate_set_global(sender, "出门历练")
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "❌ 历练失败,灵气反噬,受伤30分钟", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 10)
|
||||
return False, "历练失败"
|
||||
else:
|
||||
self._rate_set(sender, roomid or "", "出门历练")
|
||||
self._rate_set_global(sender, "出门历练")
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "⚠️ 历练无所得", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 10)
|
||||
@@ -1174,7 +1186,7 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
except Exception:
|
||||
pass
|
||||
self._save_player(player)
|
||||
self._rate_set(sender, roomid or "", "出门历练")
|
||||
self._rate_set_global(sender, "出门历练")
|
||||
mats_text = ", ".join([f"{k}×{v}" for k, v in mats_gain.items()]) if mats_gain else "无"
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, f"✅ 历练成功,获得灵石{stones_gain},材料:{mats_text}", sender)
|
||||
if self.revoke:
|
||||
|
||||
Reference in New Issue
Block a user