UNPKG

koishi-plugin-royale

Version:
114 lines (107 loc) 4.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.playerinfo = playerinfo; const axios_1 = __importDefault(require("axios")); const response_1 = require("../../utils/response"); const API_URL = "https://api.clashroyale.com/v1/players/%23"; async function playerinfo(tag, apiKey) { if (!tag || tag.trim() === "") { return (0, response_1.formatResponse)((0, response_1.failure)("参数不足", "请输入玩家tag")); } if (!apiKey || apiKey.trim() === "") { return (0, response_1.formatResponse)((0, response_1.failure)("配置错误", "未设置API密钥,请在插件配置中设置 Clash Royale API密钥 (可从 https://developer.clashroyale.com 申请)")); } try { tag = tag.trim(); if (tag.startsWith("#")) { tag = tag.substring(1); } const response = await axios_1.default.get(`${API_URL}${tag}`, { headers: { Authorization: `Bearer ${apiKey}`, Accept: "application/json", }, }); const player = response.data; // 格式化并返回玩家信息 const playerData = formatPlayerInfo(player); return (0, response_1.formatResponse)((0, response_1.success)(`玩家 #${tag} 的信息`, playerData)); } catch (error) { console.error("获取玩家信息失败:", error); if (axios_1.default.isAxiosError(error) && error.response) { // API错误处理 if (error.response.status === 404) { return (0, response_1.formatResponse)((0, response_1.failure)("查询失败", `找不到玩家,请检查tag是否正确: #${tag}`)); } else if (error.response.status === 403) { return (0, response_1.formatResponse)((0, response_1.failure)("查询失败", "访问API失败,请检查API密钥是否正确或是否已授权")); } else { return (0, response_1.formatResponse)((0, response_1.failure)("查询失败", `错误码: ${error.response.status}, 请稍后再试`)); } } return (0, response_1.formatResponse)((0, response_1.failure)("查询失败", "查询玩家信息时发生未知错误,请稍后再试")); } } /** * 计算胜率百分比 * @param wins 胜利场次 * @param losses 失败场次 * @returns 胜率百分比字符串 */ function calculateWinRate(wins, losses) { const totalGames = wins + losses; if (totalGames === 0) return "无记录"; const winRate = (wins / totalGames) * 100; return `${winRate.toFixed(2)}%`; } /** * 计算三冠率百分比 * @param threeCrownWins 三冠胜利场次 * @param wins 胜利总场次 * @returns 三冠率百分比字符串 */ function calculateThreeCrownRate(threeCrownWins, wins) { if (wins === 0) return "0.00%"; const threeCrownRate = (threeCrownWins / wins) * 100; return `${threeCrownRate.toFixed(2)}%`; } function formatPlayerInfo(player) { // 计算badges总数 const badgesCount = player.badges?.length || 0; return ` 【玩家信息】 名称: ${player.name} 标签: ${player.tag} 奖杯: ${player.trophies} 最高奖杯: ${player.bestTrophies} 等级: ${player.expLevel} 竞技场: ${player.arena?.name || "未知"} ${player.clan ? `部落: ${player.clan.name} (${player.clan.tag})` : "未加入部落"} ${player.role ? `部落角色: ${player.role}` : ""} 【战绩统计】 胜利场次: ${player.wins || 0} 失败场次: ${player.losses || 0} 三冠胜利: ${player.threeCrownWins || 0} 胜率: ${calculateWinRate(player.wins || 0, player.losses || 0)} 三冠率: ${calculateThreeCrownRate(player.threeCrownWins || 0, player.wins || 0)} 【挑战赛】 挑战赛获得卡牌: ${player.challengeCardsWon || 0} 挑战赛最高胜场: ${player.challengeMaxWins || 0} 【锦标赛】 锦标赛获得卡牌: ${player.tournamentCardsWon || 0} 锦标赛对战次数: ${player.tournamentBattleCount || 0} 【部落互动】 捐献次数: ${player.donations || 0} 接收捐献: ${player.donationsReceived || 0} 总捐献数: ${player.totalDonations || 0} 【成就徽章】 徽章总数: ${badgesCount} `.trim(); }