← back to browse
goat command

lyricsvideo

Get a lyrics video from TikTok

0
views
0
likes
0
installs

Aliases: lyricsvid, lvid

raw source
const axios = require("axios");
const fs = require("fs-extra");
const path = require("path");

module.exports = {
  config: {
    name: "lyricsvideo",
    aliases: ["lyricsvid", "lvid"],
    version: "1.0",
    author: "xalman",
    countDown: 5,
    role: 0,
    shortDescription: { en: "Get a lyrics video from TikTok" },
    longDescription: { en: "Search for a song and get a lyrics video from TikTok" },
    category: "ANIME & MEDIA",
    guide: { en: "{pn} <query> \nExample: /lyricsvideo Happy Nation" }
  },

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

    if (!query) {
      return message.reply("❌ Please provide a song name.\nExample: /lyricsvideo Happy Nation");
    }

    api.setMessageReaction("🎵", messageID, () => {}, true);

    const cacheDir = path.join(__dirname, "cache");
    if (!fs.existsSync(cacheDir)) fs.mkdirSync(cacheDir, { recursive: true });

    try {
      const searchUrl = `https://xalman-apis.vercel.app/api/tik?q=${encodeURIComponent(query + " lyrics video")}`;
      const searchRes = await axios.get(searchUrl, { timeout: 15000 });

      if (!searchRes.data.results || searchRes.data.results.length === 0) {
        throw new Error("No results found");
      }

      const results = searchRes.data.results;

      let selectedVideo = null;
      for (const video of results) {
        const title = (video.title || "").toLowerCase();
        if (title.includes("লিরিক্স") || title.includes("lyricsvideo") || title.includes("lyrics") || title.includes("#lyrics")) {
          selectedVideo = video;
          break;
        }
      }

      if (!selectedVideo) {
        selectedVideo = results[Math.floor(Math.random() * results.length)];
      }

      const videoUrl = selectedVideo.video_url;

      const filePath = path.join(cacheDir, `${Date.now()}.mp4`);
      const videoRes = await axios({
        url: videoUrl,
        method: "GET",
        responseType: "arraybuffer",
        headers: { "User-Agent": "Mozilla/5.0" },
        timeout: 60000
      });

      fs.writeFileSync(filePath, Buffer.from(videoRes.data));

      api.setMessageReaction("✅", messageID, () => {}, true);

      const msg = `✦ 𝗟𝗬𝗥𝗜𝗖𝗦 𝗩𝗜𝗗𝗘𝗢 ✦\n━━━━━━━━━━━━━━━━━━\n♫ 𝗘𝗻𝗷𝗼𝘆 𝘆𝗼𝘂𝗿 𝘀𝗼𝗻𝗴 ♫`;

      return api.sendMessage({
        body: msg,
        attachment: fs.createReadStream(filePath)
      }, threadID, () => {
        if (fs.existsSync(filePath)) fs.unlinkSync(filePath);
      }, messageID);

    } catch (err) {
      console.error("Lyrics video error:", err);
      api.setMessageReaction("❌", messageID, () => {}, true);
      return message.reply(`❌ Failed to get video: ${err.message || "Unknown error"}`);
    }
  }
};

View raw file