更新统一接口BaseGame.db.get_user_display_name获取用户名称

This commit is contained in:
2025-10-31 11:07:41 +08:00
parent 6f05ca98f1
commit 19cde88acf
4 changed files with 34 additions and 13 deletions

View File

@@ -220,6 +220,23 @@ class Database:
logger.error(f"更新用户名失败: user_id={user_id}, username={username}, error={e}", exc_info=True)
return False
def get_user_display_name(self, user_id: int) -> str:
"""获取用户显示名称
如果用户已注册username不为None返回用户名否则返回"用户{user_id}"
Args:
user_id: 用户ID
Returns:
用户显示名称(用户名或"用户{user_id}"
"""
user_dict = self.get_or_create_user(user_id)
username = user_dict.get('username')
if username:
return username
else:
return f"用户{user_id}"
# ===== 游戏状态相关操作 =====
def get_game_state(self, chat_id: int, user_id: int, game_type: str) -> Optional[Dict]:

View File

@@ -82,12 +82,10 @@ class GiftGame(BaseGame):
receiver_id = user['user_id']
# 获取接收者名称用于显示
receiver_user = self.db.get_or_create_user(receiver_id)
receiver_name = receiver_user.get('username', f"用户{receiver_id}")
receiver_name = self.db.get_user_display_name(receiver_id)
# 获取发送者名称用于显示
sender_user = self.db.get_or_create_user(sender_id)
sender_name = sender_user.get('username', f"用户{sender_id}")
sender_name = self.db.get_user_display_name(sender_id)
# 验证参数
if points <= 0:
@@ -184,7 +182,7 @@ class GiftGame(BaseGame):
for record in records:
timestamp = datetime.fromtimestamp(record['created_at']).strftime('%m-%d %H:%M')
receiver_name = record.get('receiver_name', f"用户{record['receiver_id']}")
receiver_name = self.db.get_user_display_name(record['receiver_id'])
points = record['points']
message = record.get('message', '')
@@ -214,7 +212,7 @@ class GiftGame(BaseGame):
for record in records:
timestamp = datetime.fromtimestamp(record['created_at']).strftime('%m-%d %H:%M')
sender_name = record.get('sender_name', f"用户{record['sender_id']}")
sender_name = self.db.get_user_display_name(record['sender_id'])
points = record['points']
message = record.get('message', '')

View File

@@ -379,10 +379,12 @@ class IdiomGame(BaseGame):
text += f"**当前链长**{state_data['chain_length']}\n\n"
user_count = state_data['participants'][str(user_id)]
text += f"@用户{user_id} 成功次数:{user_count}\n\n"
user_display_name = self.db.get_user_display_name(user_id)
text += f"@{user_display_name} 成功次数:{user_count}\n\n"
if mentioned_user_id:
text += f"已指定 @用户{mentioned_user_id} 接龙\n\n"
mentioned_display_name = self.db.get_user_display_name(mentioned_user_id)
text += f"已指定 @{mentioned_display_name} 接龙\n\n"
else:
text += "任何人都可以接龙\n\n"
@@ -416,7 +418,8 @@ class IdiomGame(BaseGame):
state_data['next_user_id'] = next_user_id
self.db.save_game_state(chat_id, 0, 'idiom', state_data)
return f"✅ 已指定 @用户{next_user_id} 接龙"
next_user_display_name = self.db.get_user_display_name(next_user_id)
return f"✅ 已指定 @{next_user_display_name} 接龙"
def _reject_idiom(self, chat_id: int, user_id: int, idiom: str) -> str:
"""裁判拒绝词语
@@ -509,7 +512,8 @@ class IdiomGame(BaseGame):
# 下一位
if state_data.get('next_user_id'):
text += f"**下一位**@用户{state_data['next_user_id']}\n\n"
next_user_display_name = self.db.get_user_display_name(state_data['next_user_id'])
text += f"**下一位**@{next_user_display_name}\n\n"
else:
text += f"**下一位**:任何人都可以接龙\n\n"
@@ -522,7 +526,8 @@ class IdiomGame(BaseGame):
reverse=True
)
for idx, (uid, count) in enumerate(sorted_participants[:5], 1):
text += f"{idx}. @用户{uid} - {count}\n"
user_display_name = self.db.get_user_display_name(int(uid))
text += f"{idx}. @{user_display_name} - {count}\n"
text += "\n"
# 最近成语
@@ -588,7 +593,8 @@ class IdiomGame(BaseGame):
reverse=True
)
for idx, (uid, count) in enumerate(sorted_participants, 1):
text += f"{idx}. @用户{uid} - {count}\n"
user_display_name = self.db.get_user_display_name(int(uid))
text += f"{idx}. @{user_display_name} - {count}\n"
# 更新统计
try:
for _ in range(count):

View File

@@ -126,7 +126,7 @@ class PointsGame(BaseGame):
for i, user in enumerate(leaderboard):
rank = i + 1
medal = medals[i] if i < len(medals) else "🏅"
username = user.get('username', f"用户{user['user_id']}")
username = self.db.get_user_display_name(user['user_id'])
points = user.get('points', 0)
text += f"{medal} **第 {rank} 名** {username}\n"