签到功能加入了总天数记录。
This commit is contained in:
@@ -161,3 +161,62 @@ class SignInDB(BaseDBOperator):
|
||||
last_sign_date, previous_streak, datetime.now(),
|
||||
wx_id, group_id)
|
||||
return self.execute_update(sql, params)
|
||||
|
||||
def create_sign_history(self, wx_id: str, group_id: str, sign_date: datetime,
|
||||
sign_time: datetime, is_makeup: bool, points_earned: int,
|
||||
streak_count: int) -> bool:
|
||||
"""创建签到历史记录"""
|
||||
sql = """
|
||||
INSERT INTO t_sign_history
|
||||
(wx_id, group_id, sign_date, sign_time, is_makeup, points_earned, streak_count)
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s)
|
||||
"""
|
||||
params = (wx_id, group_id, sign_date.date(), sign_time,
|
||||
1 if is_makeup else 0, points_earned, streak_count)
|
||||
return self.execute_update(sql, params)
|
||||
|
||||
def get_user_sign_history(self, wx_id: str, group_id: str,
|
||||
start_date: datetime = None,
|
||||
end_date: datetime = None,
|
||||
limit: int = 30) -> List[Dict]:
|
||||
"""获取用户签到历史记录"""
|
||||
sql = """
|
||||
SELECT id, wx_id, group_id, sign_date, sign_time,
|
||||
is_makeup, points_earned, streak_count, create_time
|
||||
FROM t_sign_history
|
||||
WHERE wx_id = %s AND group_id = %s
|
||||
"""
|
||||
params = [wx_id, group_id]
|
||||
|
||||
if start_date:
|
||||
sql += " AND sign_date >= %s"
|
||||
params.append(start_date.date())
|
||||
if end_date:
|
||||
sql += " AND sign_date <= %s"
|
||||
params.append(end_date.date())
|
||||
|
||||
sql += " ORDER BY sign_date DESC, sign_time DESC LIMIT %s"
|
||||
params.append(limit)
|
||||
|
||||
return self.execute_query(sql, tuple(params))
|
||||
|
||||
def get_user_sign_count(self, wx_id: str, group_id: str,
|
||||
start_date: datetime = None,
|
||||
end_date: datetime = None) -> int:
|
||||
"""获取用户签到总次数"""
|
||||
sql = """
|
||||
SELECT COUNT(*) as count
|
||||
FROM t_sign_history
|
||||
WHERE wx_id = %s AND group_id = %s
|
||||
"""
|
||||
params = [wx_id, group_id]
|
||||
|
||||
if start_date:
|
||||
sql += " AND sign_date >= %s"
|
||||
params.append(start_date.date())
|
||||
if end_date:
|
||||
sql += " AND sign_date <= %s"
|
||||
params.append(end_date.date())
|
||||
|
||||
result = self.execute_query(sql, tuple(params), fetch_one=True)
|
||||
return result['count'] if result else 0
|
||||
|
||||
@@ -74,4 +74,24 @@ class SignInRedisDB:
|
||||
redis_client.delete(key)
|
||||
return True
|
||||
except Exception:
|
||||
return False
|
||||
return False
|
||||
|
||||
def get_user_total_sign_count_key(self, wx_id: str, group_id: str) -> str:
|
||||
"""获取用户总签到次数的Redis键"""
|
||||
return f"{self.prefix}sign:total:{wx_id}:{group_id}"
|
||||
|
||||
def increment_user_sign_count(self, wx_id: str, group_id: str) -> int:
|
||||
"""增加用户签到总次数"""
|
||||
key = self.get_user_total_sign_count_key(wx_id, group_id)
|
||||
return self.redis.incr(key)
|
||||
|
||||
def get_user_total_sign_count(self, wx_id: str, group_id: str) -> int:
|
||||
"""获取用户签到总次数"""
|
||||
key = self.get_user_total_sign_count_key(wx_id, group_id)
|
||||
count = self.redis.get(key)
|
||||
return int(count) if count else 0
|
||||
|
||||
def set_user_total_sign_count(self, wx_id: str, group_id: str, count: int) -> bool:
|
||||
"""设置用户签到总次数"""
|
||||
key = self.get_user_total_sign_count_key(wx_id, group_id)
|
||||
return self.redis.set(key, count)
|
||||
@@ -317,7 +317,16 @@ class MessageSignPlugin(MessagePluginInterface):
|
||||
None # 首次签到,没有上次签到时间
|
||||
)
|
||||
|
||||
# 在输出信息中添加每日词汇
|
||||
# 记录签到历史
|
||||
self.sign_in_db.create_sign_history(
|
||||
sender, roomid, current_time, current_time,
|
||||
False, points_to_add, streak
|
||||
)
|
||||
|
||||
# 更新Redis中的签到总次数
|
||||
total_sign_count = self.sign_in_redis.increment_user_sign_count(sender, roomid)
|
||||
|
||||
# 在输出信息中添加每日词汇和签到总次数
|
||||
output = f"签到成功,加[{points_to_add}]积分,第[{today_signin_rank}]个!"
|
||||
|
||||
if streak_broken and old_streak > 0: # 只有在真的断签且之前有签到记录时才显示
|
||||
@@ -325,6 +334,9 @@ class MessageSignPlugin(MessagePluginInterface):
|
||||
elif streak > 1:
|
||||
output += f"连签 {streak} 天!"
|
||||
|
||||
# 添加总签到次数信息
|
||||
output += f"\n总签到次数:{total_sign_count}次"
|
||||
|
||||
# 从内存中获取随机词汇
|
||||
daily_vocab = self.get_random_vocabulary()
|
||||
output += f"\n今日词汇:{daily_vocab}"
|
||||
|
||||
Reference in New Issue
Block a user