feature:1.加入了排行榜加分机制。
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user