From 230e3fb331b8e04283aea24cbf89ad88929942d8 Mon Sep 17 00:00:00 2001 From: liuwei Date: Thu, 27 Nov 2025 17:45:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8A=AB=E6=8E=A0=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/xiuxian/main.py | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/plugins/xiuxian/main.py b/plugins/xiuxian/main.py index abe364b..3f905cc 100644 --- a/plugins/xiuxian/main.py +++ b/plugins/xiuxian/main.py @@ -555,7 +555,7 @@ class XiuxianPlugin(MessagePluginInterface): ok, msg = await self._cmd_force_breakthrough(bot, sender, roomid) return ok, msg if cmd == "劫掠": - ok, msg = await self._cmd_rob(bot, sender, roomid, content) + ok, msg = await self._cmd_rob(bot, sender, roomid, content, message) return ok, msg if cmd == "赠与": ok, msg = await self._cmd_give_stone(bot, sender, roomid, content) @@ -1658,20 +1658,31 @@ class XiuxianPlugin(MessagePluginInterface): return False, "强行突破失败" - async def _cmd_rob(self, bot: WechatAPIClient, sender: str, roomid: str, content: str) -> Tuple[bool, str]: - target = content.strip().lstrip("@") - if not target: - # client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "命令格式:劫掠 目标wxid", 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 target == 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, 5) - return False, "非法目标" + async def _cmd_rob(self, bot: WechatAPIClient, sender: str, roomid: str, content: str, message: Dict[str, Any]) -> Tuple[bool, str]: + msg = message.get("full_wx_msg") + xml = getattr(msg, "msg_source", None) if msg else None + target_wxid = None + if roomid and xml: + try: + import xml.etree.ElementTree as ET + import re + root = ET.fromstring(xml) + at_el = root.find('.//atuserlist') + text = (at_el.text if at_el is not None else '').strip() + text = text.strip(',') + text = re.sub(r'[\s\u3000]+', '', text) + at_set = set(text.split(',')) + at_set.discard('') + if len(at_set) != 1: + await self._send_text_with_status(bot, sender, roomid, "请@一个明确的目标进行劫掠", 90) + return False, "目标无效" + target_wxid = next(iter(at_set)) + except Exception: + pass + if target_wxid == sender: + return False, "不可劫掠自己" attacker = self._get_player(sender, roomid or "") - defender = self._get_player(target, roomid or "") + defender = self._get_player(target_wxid, roomid or "") if not attacker or not defender: # client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "双方需已注册", sender) # if self.revoke: