// code from goatstore // api: https://store.agi.bd const axios = require("axios"); module.exports = { config: { name: "ffinfo", version: "2.1", author: "rX", countDown: 5, role: 0, shortDescription: "Free Fire player full info", longDescription: "Get full Free Fire player info by UID", category: "game", guide: { en: "{pn} \nExample: {pn} 12345678" } }, onStart: async function ({ api, event, args, message }) { const uid = args[0]; if (!uid) { return message.reply("❌ Please provide a UID.\nExample: ffinfo 12345678"); } if (!/^\d+$/.test(uid)) { return message.reply("❌ Invalid UID. UID must contain numbers only."); } message.reaction("⏳", event.messageID); try { const { data: resp } = await axios.get(`https://rx.agi.bd/game/ffinfo?uid=${uid}`); // Real payload lives inside "result", not the top level const data = resp && resp.result; if (!resp || !resp.status || !data || (!data.name && !data.uid)) { message.reaction("❌", event.messageID); return message.reply("❌ No info found for this UID. Please check and try again."); } // Some fields (pet name, ranks) are only inside raw_data (stringified JSON) let raw = {}; try { raw = data.raw_data ? JSON.parse(data.raw_data) : {}; } catch (e) { raw = {}; } const petName = raw?.PetInfo?.name; const brMaxRank = data.br_max_rank ?? raw?.AccountProfileInfo?.BrMaxRank; const csMaxRank = data.cs_max_rank ?? raw?.AccountProfileInfo?.CsMaxRank; const fmt = (num) => { if (num === undefined || num === null || num === "") return "N/A"; const n = Number(num); return isNaN(n) ? String(num) : n.toLocaleString("en-US"); }; const na = (v) => (v === undefined || v === null || v === "" ? "N/A" : v); const lastLogin = data.last_login ? new Date(data.last_login).toLocaleString("en-US") : "N/A"; const msg = `🏆 𝗙𝗥𝗘𝗘 𝗙𝗜𝗥𝗘 𝗣𝗟𝗔𝗬𝗘𝗥 𝗜𝗡𝗙𝗢 🏆 ━━━━━━━━━━━━━━━━━━━━ 👤 𝗡𝗮𝗺𝗲 : ${na(data.name)} 🆔 𝗨𝗜𝗗 : ${na(data.uid)} 🌍 𝗥𝗲𝗴𝗶𝗼𝗻 : ${na(data.region)} 📈 𝗟𝗲𝘃𝗲𝗹 : ${na(data.level)} ✨ 𝗘𝗫𝗣 : ${fmt(data.exp)} ❤️ 𝗟𝗶𝗸𝗲𝘀 : ${fmt(data.likes)} 👑 𝗣𝗿𝗶𝗺𝗲 𝗟𝗲𝘃𝗲𝗹 : ${na(data.prime_level)} 🕒 𝗟𝗮𝘀𝘁 𝗟𝗼𝗴𝗶𝗻 : ${lastLogin} ━━━━━━━━━━━━━━━━━━━━ 🎯 𝗥𝗔𝗡𝗞 𝗜𝗡𝗙𝗢 🔫 𝗕𝗥 𝗠𝗮𝘅 𝗥𝗮𝗻𝗸 : ${na(brMaxRank)} 🔫 𝗕𝗥 𝗥𝗮𝗻𝗸 𝗣𝗼𝗶𝗻𝘁 : ${fmt(data.br_rank_point)} 🎮 𝗖𝗦 𝗠𝗮𝘅 𝗥𝗮𝗻𝗸 : ${na(csMaxRank)} 🎮 𝗖𝗦 𝗥𝗮𝗻𝗸 𝗣𝗼𝗶𝗻𝘁 : ${fmt(data.cs_rank_point)} 💳 𝗖𝗿𝗲𝗱𝗶𝘁 𝗦𝗰𝗼𝗿𝗲 : ${na(data.credit_score)} ━━━━━━━━━━━━━━━━━━━━ 🐾 𝗣𝗘𝗧 𝗜𝗡𝗙𝗢 🐶 𝗡𝗮𝗺𝗲 : ${na(petName)} 📊 𝗟𝗲𝘃𝗲𝗹 : ${na(data.pet_level)} ✨ 𝗘𝗫𝗣 : ${fmt(data.pet_exp)} ━━━━━━━━━━━━━━━━━━━━ 🏰 𝗚𝗨𝗜𝗟𝗗 𝗜𝗡𝗙𝗢 📛 𝗡𝗮𝗺𝗲 : ${na(data.guild_name)} 🆔 𝗜𝗗 : ${na(data.guild_id)} 📈 𝗟𝗲𝘃𝗲𝗹 : ${na(data.guild_level)} 👥 𝗠𝗲𝗺𝗯𝗲𝗿𝘀 : ${na(data.guild_member)}/${na(data.guild_capacity)} 👑 𝗟𝗲𝗮𝗱𝗲𝗿 : ${na(data.guild_leader_name)} 🆔 𝗟𝗲𝗮𝗱𝗲𝗿 𝗨𝗜𝗗 : ${na(data.guild_leader_uid)} 📈 𝗟𝗲𝗮𝗱𝗲𝗿 𝗟𝗲𝘃𝗲𝗹 : ${na(data.guild_leader_level)} ❤️ 𝗟𝗲𝗮𝗱𝗲𝗿 𝗟𝗶𝗸𝗲𝘀 : ${fmt(data.guild_leader_likes)} ━━━━━━━━━━━━━━━━━━━━ 🎒 𝗘𝗤𝗨𝗜𝗣𝗣𝗘𝗗 𝗜𝗧𝗘𝗠𝗦 🖼️ 𝗔𝘃𝗮𝘁𝗮𝗿 𝗜𝗗 : ${na(data.equipped_avatar_id)} 🎌 𝗕𝗮𝗻𝗻𝗲𝗿 𝗜𝗗 : ${na(data.equipped_banner_id)} 🎫 𝗕𝗣 𝗜𝗗 : ${na(data.equipped_bp_id)} 🎖️ 𝗕𝗣 𝗕𝗮𝗱𝗴𝗲𝘀 : ${na(data.equipped_bp_badges)} 🔫 𝗪𝗲𝗮𝗽𝗼𝗻𝘀 : ${na(data.equipped_weapon)} 👕 𝗢𝘂𝘁𝗳𝗶𝘁 : ${na(data.equipped_outfit)} ━━━━━━━━━━━━━━━━━━━━ 📦 𝗢𝗧𝗛𝗘𝗥 🔖 𝗧𝗶𝘁𝗹𝗲 : ${na(data.title)} 📝 𝗦𝗶𝗴𝗻𝗮𝘁𝘂𝗿𝗲 : ${na(data.signature)} 🗣️ 𝗟𝗮𝗻𝗴𝘂𝗮𝗴𝗲 : ${na(data.language)} 🎮 𝗠𝗼𝗱𝗲 𝗣𝗿𝗲𝗳𝗲𝗿 : ${na(data.mode_prefer)} 📅 𝗔𝗰𝗰𝗼𝘂𝗻𝘁 𝗧𝘆𝗽𝗲 : ${na(data.account_type)} 🔢 𝗦𝗲𝗮𝘀𝗼𝗻 𝗜𝗗 : ${na(data.season_id)} 🛠️ 𝗥𝗲𝗹𝗲𝗮𝘀𝗲 𝗩𝗲𝗿𝘀𝗶𝗼𝗻 : ${na(data.release_version)}`; message.reaction("✅", event.messageID); return message.reply(msg); } catch (error) { console.log("ffinfo error:", error.message); message.reaction("❌", event.messageID); return message.reply("❌ Failed to fetch player info. Server might be down or UID is wrong."); } } };