修改赠送功能

This commit is contained in:
liuwei
2025-11-27 16:54:18 +08:00
parent 86ddc9ffd9
commit 254081a286

View File

@@ -561,7 +561,7 @@ class XiuxianPlugin(MessagePluginInterface):
ok, msg = await self._cmd_give_stone(bot, sender, roomid, content)
return ok, msg
if cmd == "赠送":
ok, msg = await self._cmd_give_item(bot, sender, roomid, content)
ok, msg = await self._cmd_give_item(bot, sender, roomid, content, message)
return ok, msg
if cmd == "创建门派":
ok, msg = await self._cmd_clan_create(bot, sender, roomid, content)
@@ -1786,24 +1786,49 @@ class XiuxianPlugin(MessagePluginInterface):
return True, "赠与成功"
async def _cmd_give_item(self, bot: WechatAPIClient, sender: str, roomid: str, content: str) -> Tuple[bool, str]:
async def _cmd_give_item(self, bot: WechatAPIClient, sender: str, roomid: str, content: str, message: Dict[str, Any]) -> Tuple[bool, str]:
parts = content.strip().split()
if len(parts) < 3:
# 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, "道友施法有误,指令格式不对"
target = parts[0].lstrip("@")
item_name = parts[1]
try:
qty = int(parts[2])
except Exception:
# 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)
if len(parts) < 1:
return False, "道友施法有误,指令格式不对"
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+', '', 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))
tokens = [t for t in parts if not t.startswith('@')]
if len(tokens) < 2:
return False, "道友施法有误,指令格式不对"
item_name = tokens[0]
try:
qty = int(tokens[1])
except Exception:
return False, "道友施法有误,指令格式不对"
except Exception:
pass
if not target_wxid:
if len(parts) < 3:
return False, "道友施法有误,指令格式不对"
target_wxid = parts[0].lstrip('@')
item_name = parts[1]
try:
qty = int(parts[2])
except Exception:
return False, "道友施法有误,指令格式不对"
giver = self._get_player(sender, roomid or "")
receiver = self._get_player(target, roomid or "")
receiver = self._get_player(target_wxid, roomid or "")
if not giver or not receiver:
# client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "双方需已注册", sender)
# if self.revoke:
@@ -1820,16 +1845,16 @@ class XiuxianPlugin(MessagePluginInterface):
giver["inventory"] = inv_g
receiver["inventory"] = inv_r
if self.xdb:
ok = self.xdb.transfer_item(sender, target, item_name, qty)
ok = self.xdb.transfer_item(sender, target_wxid, item_name, qty)
if not ok:
await self._send_text_with_status(bot, sender, roomid, "物品转移不成", 90)
return False, "转移失败"
self.redis_db.invalidate_player(sender, giver.get("group_id", ""))
self.redis_db.invalidate_player(target, receiver.get("group_id", ""))
self.redis_db.invalidate_player(target_wxid, receiver.get("group_id", ""))
self._save_player(giver)
self._save_player(receiver)
self._rate_set(sender, roomid or "", "赠送")
await self._send_text_with_status(bot, sender, roomid, f"✅ 已向 {target} 赠送 {item_name} × {qty}", 90)
await self._send_text_with_status(bot, sender, roomid, f"✅ 已向 {receiver.get("dao_name", "")} 赠送 {item_name} × {qty}", 90)
return True, "赠送成功"
async def _cmd_clan_create(self, bot: WechatAPIClient, sender: str, roomid: str, content: str) -> Tuple[bool, str]: