← back to browse
goat command

tikinfo

Get TikTok user info by username

0
views
0
likes
0
installs
raw source
const axios = require("axios");

// ====== FAST BASE API (with cache) ======
let cachedBaseApi = null;
async function getBaseApiUrl() {
  if (cachedBaseApi) return cachedBaseApi;
  try {
    const res = await axios.get(
      "https://raw.githubusercontent.com/itzaryan008/ERROR/refs/heads/main/raw/api.json"
    );
    cachedBaseApi = res.data.apis;
    return cachedBaseApi;
  } catch (err) {
    console.log("tikinfo | getBaseApiUrl error:", err.message);
    return null;
  }
}

// เฆธเฆ‚เฆ–เงเฆฏเฆพ เฆธเงเฆจเงเฆฆเฆฐ เฆ•เฆฐเง‡ เฆฆเง‡เฆ–เฆพเฆจเง‹เฆฐ เฆœเฆจเงเฆฏ
function formatNum(n) {
  if (n === undefined || n === null) return "0";
  const num = Number(n);
  if (Number.isNaN(num)) return String(n);
  return num.toLocaleString("en-US");
}

module.exports = {
  config: {
    name: "tikinfo",
    version: "1.1.0",
    role: 0,
    author: "๐“†ฉ๐‘…๐‘œ๐’ท๐’พ๐“ƒ๐“†ช ๐’œ๐“๐’พ",
    description: "Get TikTok user info by username",
    category: "tiktok tools",
    usages: "[username]\nExample: tinfo khaby.lame",
    countDown: 5,
    dependencies: {},
  },

  onStart: async function ({ api, event, args }) {
    const { threadID, messageID } = event;
    const username = args.join(" ").trim();

    // ====== Argument check ======
    if (!username) {
      return api.sendMessage(
        "โš ๏ธ Please provide a TikTok username.\n\n๐Ÿ“Œ Usage:\n" +
          "tinfo username\n" +
          "Ex: tinfo khaby.lame",
        threadID,
        messageID
      );
    }

    // ====== Get base API URL ======
    const base = await getBaseApiUrl();
    if (!base) {
      return api.sendMessage(
        "โŒ Failed to fetch API base URL.\nPlease try again later.",
        threadID,
        messageID
      );
    }

    try {
      // ====== Call API ======
      const res = await axios.get(`${base}/tikstalk`, {
        params: { username },
      });

      const data = res.data || {};

      // เฆ•เฆฟเฆ›เง API เฆคเง‡ data.data เฆญเฆฟเฆคเฆฐเง‡ เฆฅเฆพเฆ•เง‡ โ€“ เฆธเง‡เฆซเฆŸเฆฟ
      const info = data.data || data;

      if (!info.username && !info.uniqueId) {
        return api.sendMessage(
          "โŒ Can't fetch this user.\nMaybe username is invalid or account is private.",
          threadID,
          messageID
        );
      }

      // ====== Fields with fallback ======
      const avatar =
        info.avatarLarger || info.avatarUrl || info.avatarThumb || null;

      const uname = info.username || info.uniqueId || "N/A";
      const nickname = info.nickname || info.nickName || "N/A";
      const bio = info.signature || info.bio || "N/A";
      const region = info.region || info.country || "N/A";
      const verified =
        info.verified === true ? "โœ… Verified" : "โŒ Not verified";
      const privateAcc = info.privateAccount ? "๐Ÿ”’ Private" : "๐Ÿ”“ Public";

      const heart = formatNum(info.heartCount || info.heart || info.likes);
      const followers = formatNum(info.followerCount || info.followers);
      const following = formatNum(info.followingCount || info.following);
      const videos = formatNum(info.videoCount || info.videos);

      const relation = info.relation || "N/A";
      const profileUrl = `https://www.tiktok.com/@${uname}`;

      let msg =
        "๐Ÿ‘ค ๐—ง๐—ถ๐—ธ๐—ง๐—ผ๐—ธ ๐—ฃ๐—ฟ๐—ผ๐—ณ๐—ถ๐—น๐—ฒ ๐—œ๐—ป๐—ณ๐—ผ\n\n" +
        `๐Ÿ†” ๐—จ๐˜€๐—ฒ๐—ฟ๐—ป๐—ฎ๐—บ๐—ฒ: @${uname}\n` +
        `๐Ÿ“› ๐—ก๐—ถ๐—ฐ๐—ธ๐—ป๐—ฎ๐—บ๐—ฒ: ${nickname}\n` +
        `๐Ÿ“„ ๐—•๐—ถ๐—ผ: ${bio}\n` +
        `๐ŸŒ ๐—ฅ๐—ฒ๐—ด๐—ถ๐—ผ๐—ป: ${region}\n` +
        `โœ”๏ธ ๐—ฆ๐˜๐—ฎ๐˜๐˜‚๐˜€: ${verified}\n` +
        `๐Ÿ” ๐—ฃ๐—ฟ๐—ถ๐˜ƒ๐—ฎ๐—ฐ๐˜†: ${privateAcc}\n\n` +
        `โค๏ธ ๐—Ÿ๐—ถ๐—ธ๐—ฒ๐˜€: ${heart}\n` +
        `๐Ÿ‘ฅ ๐—™๐—ผ๐—น๐—น๐—ผ๐˜„๐—ฒ๐—ฟ๐˜€: ${followers}\n` +
        `๐Ÿ” ๐—™๐—ผ๐—น๐—น๐—ผ๐˜„๐—ถ๐—ป๐—ด: ${following}\n` +
        `๐ŸŽฌ ๐—ฉ๐—ถ๐—ฑ๐—ฒ๐—ผ๐˜€: ${videos}\n` +
        `๐Ÿ”— ๐—ฅ๐—ฒ๐—น๐—ฎ๐˜๐—ถ๐—ผ๐—ป: ${relation}\n\n` +
        `๐ŸŒ ๐—ฃ๐—ฟ๐—ผ๐—ณ๐—ถ๐—น๐—ฒ ๐—Ÿ๐—ถ๐—ป๐—ธ:\n${profileUrl}`;

      if (!avatar) {
        // avatar เฆจเฆพ เฆฅเฆพเฆ•เฆฒเง‡ เฆถเงเฆงเง เฆŸเง‡เฆ•เงเฆธเฆŸ
        return api.sendMessage(msg, threadID, messageID);
      }

      // ====== Avatar stream send ======
      const avatarStream = (await axios.get(avatar, { responseType: "stream" }))
        .data;

      api.sendMessage(
        { body: msg, attachment: avatarStream },
        threadID,
        messageID
      );
    } catch (err) {
      console.log("tikinfo error:", err.message);
      return api.sendMessage(
        `โŒ Error while fetching TikTok info.\nDetails: ${err.message}`,
        threadID,
        messageID
      );
    }
  },
};

View raw file