diff --git a/plugins/xiuxian/main.py b/plugins/xiuxian/main.py index 762d73c..e40ef24 100644 --- a/plugins/xiuxian/main.py +++ b/plugins/xiuxian/main.py @@ -913,18 +913,24 @@ class XiuxianPlugin(MessagePluginInterface): return True, "聚灵成功" async def _cmd_leaderboard(self, bot: WechatAPIClient, sender: str, roomid: str) -> Tuple[bool, str]: - top = self.redis_db.leaderboard_top(10) - lines = ["🏆 修为排行榜 Top10"] - rank = 1 + top = self.redis_db.leaderboard_top(50) + items = [] for uid, score in top: player = self._get_player_with_cache(uid, roomid or "") - cp = int(player.get("cultivation_points", int(score))) if player else int(score) - nick = (player.get("dao_name") if player else None) or uid - mark = "你" if uid == sender else "" - lines.append(f"{rank}. {nick} - 修为 {cp} {mark}") - rank += 1 - client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), - "\n".join(lines), sender) + if not player: + continue + cp = int(player.get("cultivation_points", int(score))) + realm = player.get("realm", "炼气1层") + rscore = self._realm_score(realm) + root = player.get("spirit_root", "凡灵根") + nick = player.get("dao_name") + items.append((uid, nick or uid, root, realm, cp, rscore)) + # 排序:先按境界分值降序,再按修为降序 + items.sort(key=lambda x: (x[5], x[4]), reverse=True) + lines = ["🏆 修仙榜 Top10"] + for i, (_, nick, root, realm, cp, _) in enumerate(items[:10], start=1): + lines.append(f"{i}. {nick}[{root}]-{realm}[{cp}]") + await self._send_text_with_status(bot, sender, roomid, "\n".join(lines), 10) self._rate_set(sender, roomid or "", "排行榜") return True, "排行榜"