From df51dc268ec8a3154350e80320e7ecb8856e4910 Mon Sep 17 00:00:00 2001 From: liuwei Date: Wed, 9 Apr 2025 13:06:50 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=AF=E5=88=86=E8=BD=AC=E8=B4=A6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E4=BD=BF=E7=94=A8=E7=94=A8=E6=88=B7=E7=A7=AF?= =?UTF-8?q?=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/point_trade/main.py | 87 ++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 50 deletions(-) diff --git a/plugins/point_trade/main.py b/plugins/point_trade/main.py index 137c903..372b63d 100644 --- a/plugins/point_trade/main.py +++ b/plugins/point_trade/main.py @@ -7,6 +7,7 @@ import xml.etree.ElementTree as ET from wcferry import Wcf from db.connection import DBConnectionManager +from db.points_db import PointsDBOperator, PointSource from plugin_common.message_plugin_interface import MessagePluginInterface from plugin_common.plugin_interface import PluginStatus from utils.decorator.plugin_decorators import plugin_stats_decorator @@ -57,6 +58,9 @@ class PointTradePlugin(MessagePluginInterface): self.message_util = context.get("message_util") self.gbm = context.get("gbm") self.db_manager = DBConnectionManager.get_instance() + + # 初始化积分数据库操作类 + self.points_db = PointsDBOperator(self.db_manager) self.db_pool = self.db_manager.mysql_pool @@ -136,63 +140,46 @@ class PointTradePlugin(MessagePluginInterface): group_id = roomid try: - # 查询发信人的记录 - sender_result = self._get_user_record(trader_wxid, group_id) - if not sender_result: - wcf.send_text(f"❌打赏失败!\n没有找到你的记录,无法进行打赏!", - (roomid if roomid else sender), sender) - return True, "发送者记录不存在" - - sender_user_id = sender_result['id'] - sender_wx_id = sender_result['wx_id'] - sender_wx_nick_name = sender_result['wx_nick_name'] - sender_current_points = int(sender_result['points']) - - # 检查发信人积分是否足够 - if sender_current_points < reward_points: - wcf.send_text( - f"❌打赏失败!\n你的积分不足以进行打赏!当前积分:{sender_current_points},你需要 {reward_points} 积分。", - (roomid if roomid else sender), sender) - return True, "积分不足" - - # 查询被打赏人的记录 - recipient_result = self._get_user_record_by_nick(target_wxid, group_id) - if not recipient_result: - wcf.send_text( - f"❌打赏失败!\n接收人[{target_wxid}]无法收取积分", - (roomid if roomid else sender), sender) - return True, "接收者记录不存在" - - recipient_user_id = recipient_result['id'] - recipient_wx_id = recipient_result['wx_id'] - recipient_wx_nick_name = recipient_result['wx_nick_name'] - recipient_current_points = int(recipient_result['points']) - - # 使用 SQL 增量更新积分 - self._update_user_points(sender_user_id, -reward_points, group_id) # 减少发送者积分 - self._update_user_points(recipient_user_id, reward_points, group_id) # 增加接收者积分 - - # 获取更新后的积分值用于显示 - updated_sender = self._get_user_record(trader_wxid, group_id) - updated_recipient = self._get_user_record_by_nick(target_wxid, group_id) - new_sender_points = int(updated_sender['points']) if updated_sender else sender_current_points - new_recipient_points = int(updated_recipient['points']) if updated_recipient else recipient_current_points - + # 使用新的积分系统进行转账 + success, result = self.points_db.transfer_points( + trader_wxid, target_wxid, group_id, + reward_points, f"积分转账命令执行" + ) + + if not success: + error_msg = result.get("error", "未知错误") + if "积分不足" in error_msg: + current_points = result.get("current_points", 0) + wcf.send_text( + f"❌转账失败!\n你的积分不足以进行转账!当前积分:{current_points},你需要 {reward_points} 积分。", + (roomid if roomid else sender), sender) + else: + wcf.send_text( + f"❌转账失败!\n{error_msg}", + (roomid if roomid else sender), sender) + return True, f"转账失败: {error_msg}" + + # 获取转账后的积分信息 + from_user = result.get("from_user", {}) + to_user = result.get("to_user", {}) + + # 获取用户昵称 + from_user_info = self._get_user_record(trader_wxid, group_id) + to_user_info = self._get_user_record(target_wxid, group_id) + + from_user_name = from_user_info.get('wx_nick_name', trader_wxid) if from_user_info else trader_wxid + to_user_name = to_user_info.get('wx_nick_name', target_wxid) if to_user_info else target_wxid + output = ( f"✅积分转账成功!\n" - f"👤{sender_wx_nick_name} 转给 👤{recipient_wx_nick_name} {reward_points} 积分\n" - f"👤{sender_wx_nick_name} 当前积分: {new_sender_points}\n" - f"👤{recipient_wx_nick_name} 当前积分: {new_recipient_points}" + f"👤{from_user_name} 转给 👤{to_user_name} {reward_points} 积分\n" + f"👤{from_user_name} 当前积分: {from_user.get('total_points', 0)}\n" + f"👤{to_user_name} 当前积分: {to_user.get('total_points', 0)}" ) wcf.send_text(output, (roomid if roomid else sender), sender) return True, "转账成功" - except mysql.connector.Error as e: - self.LOG.error(f"积分交易出错: {e}") - wcf.send_text(f"❌积分交易失败!请稍后重试。错误: {str(e)}", - (roomid if roomid else sender), sender) - return True, f"数据库错误: {str(e)}" except Exception as e: self.LOG.error(f"积分交易出错: {e}") wcf.send_text(f"❌积分交易失败!请稍后重试。错误: {str(e)}",