feature:1.加入了排行榜加分机制。

This commit is contained in:
liuwei
2025-04-11 09:03:26 +08:00
parent 69fb2f89f3
commit 36516aa69a

View File

@@ -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: