修改劫掠逻辑
This commit is contained in:
@@ -555,7 +555,7 @@ class XiuxianPlugin(MessagePluginInterface):
|
|||||||
ok, msg = await self._cmd_force_breakthrough(bot, sender, roomid)
|
ok, msg = await self._cmd_force_breakthrough(bot, sender, roomid)
|
||||||
return ok, msg
|
return ok, msg
|
||||||
if cmd == "劫掠":
|
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
|
return ok, msg
|
||||||
if cmd == "赠与":
|
if cmd == "赠与":
|
||||||
ok, msg = await self._cmd_give_stone(bot, sender, roomid, content)
|
ok, msg = await self._cmd_give_stone(bot, sender, roomid, content)
|
||||||
@@ -1658,20 +1658,31 @@ class XiuxianPlugin(MessagePluginInterface):
|
|||||||
|
|
||||||
return False, "强行突破失败"
|
return False, "强行突破失败"
|
||||||
|
|
||||||
async def _cmd_rob(self, bot: WechatAPIClient, sender: str, roomid: str, content: str) -> Tuple[bool, str]:
|
async def _cmd_rob(self, bot: WechatAPIClient, sender: str, roomid: str, content: str, message: Dict[str, Any]) -> Tuple[bool, str]:
|
||||||
target = content.strip().lstrip("@")
|
msg = message.get("full_wx_msg")
|
||||||
if not target:
|
xml = getattr(msg, "msg_source", None) if msg else None
|
||||||
# client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "命令格式:劫掠 目标wxid", sender)
|
target_wxid = None
|
||||||
# if self.revoke:
|
if roomid and xml:
|
||||||
# self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 5)
|
try:
|
||||||
return False, "命令格式错误"
|
import xml.etree.ElementTree as ET
|
||||||
if target == sender:
|
import re
|
||||||
# client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "不可劫掠自己", sender)
|
root = ET.fromstring(xml)
|
||||||
# if self.revoke:
|
at_el = root.find('.//atuserlist')
|
||||||
# self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 5)
|
text = (at_el.text if at_el is not None else '').strip()
|
||||||
return False, "非法目标"
|
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 "")
|
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:
|
if not attacker or not defender:
|
||||||
# client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "双方需已注册", sender)
|
# client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "双方需已注册", sender)
|
||||||
# if self.revoke:
|
# if self.revoke:
|
||||||
|
|||||||
Reference in New Issue
Block a user