feature:1.加入了排行榜加分机制。
This commit is contained in:
@@ -7,6 +7,8 @@ from wcferry import WxMsg, Wcf
|
|||||||
|
|
||||||
from db.connection import DBConnectionManager
|
from db.connection import DBConnectionManager
|
||||||
from db.message_storage import MessageStorageDB
|
from db.message_storage import MessageStorageDB
|
||||||
|
# 导入积分系统
|
||||||
|
from db.points_db import PointsDBOperator, PointSource
|
||||||
# 配置日志
|
# 配置日志
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
level=logging.INFO,
|
level=logging.INFO,
|
||||||
@@ -21,6 +23,8 @@ class MessageStorage:
|
|||||||
# 获取数据库连接管理器的单例
|
# 获取数据库连接管理器的单例
|
||||||
self.db_manager = DBConnectionManager.get_instance()
|
self.db_manager = DBConnectionManager.get_instance()
|
||||||
self.message_db = MessageStorageDB(self.db_manager)
|
self.message_db = MessageStorageDB(self.db_manager)
|
||||||
|
|
||||||
|
self.points_db = PointsDBOperator(self.db_manager)
|
||||||
# 初始化本地缓存字典,使用 group_id 作为键
|
# 初始化本地缓存字典,使用 group_id 作为键
|
||||||
self.local_membercounts = {}
|
self.local_membercounts = {}
|
||||||
self.local_members = {}
|
self.local_members = {}
|
||||||
@@ -239,7 +243,7 @@ class MessageStorage:
|
|||||||
logging.error(f"写入发言统计出错: {e}")
|
logging.error(f"写入发言统计出错: {e}")
|
||||||
|
|
||||||
def generate_and_send_ranking(self, groupId, allContacts: dict):
|
def generate_and_send_ranking(self, groupId, allContacts: dict):
|
||||||
"""生成并发送群聊发言排名"""
|
"""生成并发送群聊发言排名,并根据排名发放积分奖励"""
|
||||||
try:
|
try:
|
||||||
yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
|
yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
|
||||||
|
|
||||||
@@ -253,25 +257,43 @@ class MessageStorage:
|
|||||||
# 格式化输出字符串,添加emoji和美化格式
|
# 格式化输出字符串,添加emoji和美化格式
|
||||||
ranking_str = f"🏆 {yesterday} 发言排行榜 🏆\n"
|
ranking_str = f"🏆 {yesterday} 发言排行榜 🏆\n"
|
||||||
|
|
||||||
# 为不同名次添加不同的奖杯和样式
|
# 为不同名次添加不同的奖杯和样式,并发放积分
|
||||||
for rank, result in enumerate(results, start=1):
|
for rank, result in enumerate(results, start=1):
|
||||||
username = result['wx_id']
|
username = result['wx_id']
|
||||||
speech_count = result['speech_count']
|
speech_count = result['speech_count']
|
||||||
display_name = allContacts.get(username, username)
|
display_name = allContacts.get(username, username)
|
||||||
|
|
||||||
# 根据排名添加不同的emoji
|
# 根据排名发放不同数量的积分
|
||||||
|
reward_points = 0
|
||||||
if rank == 1:
|
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:
|
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:
|
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:
|
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:
|
else:
|
||||||
ranking_str += f"👍 {rank}.{display_name}: {speech_count}次\n"
|
reward_points = 5
|
||||||
|
ranking_str += f"👍 {rank}.{display_name}: {speech_count}次 +{reward_points}积分\n"
|
||||||
|
|
||||||
logging.info(f"成功生成 {yesterday} 的群聊 {groupId} 发言排名")
|
# 发放积分奖励
|
||||||
|
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} 发言排名并发放积分")
|
||||||
return ranking_str
|
return ranking_str
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user