From 36516aa69a0c9404554b7f83a5a2b83a9acf15ba Mon Sep 17 00:00:00 2001 From: liuwei Date: Fri, 11 Apr 2025 09:03:26 +0800 Subject: [PATCH] =?UTF-8?q?feature=EF=BC=9A1.=E5=8A=A0=E5=85=A5=E4=BA=86?= =?UTF-8?q?=E6=8E=92=E8=A1=8C=E6=A6=9C=E5=8A=A0=E5=88=86=E6=9C=BA=E5=88=B6?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/wechat/message_to_db.py | 44 ++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/utils/wechat/message_to_db.py b/utils/wechat/message_to_db.py index 120fe32..87de4d6 100644 --- a/utils/wechat/message_to_db.py +++ b/utils/wechat/message_to_db.py @@ -7,6 +7,8 @@ from wcferry import WxMsg, Wcf from db.connection import DBConnectionManager from db.message_storage import MessageStorageDB +# 导入积分系统 +from db.points_db import PointsDBOperator, PointSource # 配置日志 logging.basicConfig( level=logging.INFO, @@ -21,6 +23,8 @@ class MessageStorage: # 获取数据库连接管理器的单例 self.db_manager = DBConnectionManager.get_instance() self.message_db = MessageStorageDB(self.db_manager) + + self.points_db = PointsDBOperator(self.db_manager) # 初始化本地缓存字典,使用 group_id 作为键 self.local_membercounts = {} self.local_members = {} @@ -239,7 +243,7 @@ class MessageStorage: logging.error(f"写入发言统计出错: {e}") def generate_and_send_ranking(self, groupId, allContacts: dict): - """生成并发送群聊发言排名""" + """生成并发送群聊发言排名,并根据排名发放积分奖励""" try: yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d') @@ -252,26 +256,44 @@ class MessageStorage: # 格式化输出字符串,添加emoji和美化格式 ranking_str = f"🏆 {yesterday} 发言排行榜 🏆\n" - - # 为不同名次添加不同的奖杯和样式 + + # 为不同名次添加不同的奖杯和样式,并发放积分 for rank, result in enumerate(results, start=1): username = result['wx_id'] speech_count = result['speech_count'] display_name = allContacts.get(username, username) - - # 根据排名添加不同的emoji + + # 根据排名发放不同数量的积分 + reward_points = 0 if rank == 1: - ranking_str += f"🥇🐲 {rank}.{display_name}: {speech_count}次 🔥\n" + reward_points = 50 + ranking_str += f"🥇🐲 {rank}.{display_name}: {speech_count}次 🔥 +{reward_points}积分\n" elif rank == 2: - ranking_str += f"🥈 {rank}.{display_name}: {speech_count}次 ✨\n" + reward_points = 30 + ranking_str += f"🥈 {rank}.{display_name}: {speech_count}次 ✨ +{reward_points}积分\n" elif rank == 3: - ranking_str += f"🥉 {rank}.{display_name}: {speech_count}次 👏\n" + reward_points = 20 + ranking_str += f"🥉 {rank}.{display_name}: {speech_count}次 👏 +{reward_points}积分\n" elif rank <= 10: - ranking_str += f"🌟 {rank}.{display_name}: {speech_count}次\n" + reward_points = 10 + ranking_str += f"🌟 {rank}.{display_name}: {speech_count}次 +{reward_points}积分\n" else: - ranking_str += f"👍 {rank}.{display_name}: {speech_count}次\n" + reward_points = 5 + ranking_str += f"👍 {rank}.{display_name}: {speech_count}次 +{reward_points}积分\n" + + # 发放积分奖励 + if reward_points > 0: + success, _ = self.points_db.add_points( + username, + groupId, + reward_points, + PointSource.OTHER, + f"{yesterday}发言排行第{rank}名奖励" + ) + if not success: + logging.error(f"发放积分失败: {username}, {groupId}, {reward_points}") - logging.info(f"成功生成 {yesterday} 的群聊 {groupId} 发言排名") + logging.info(f"成功生成 {yesterday} 的群聊 {groupId} 发言排名并发放积分") return ranking_str except Exception as e: