تخطَّ إلى المحتوى
ARAB CODEمجتمع المطورين العرب

كود تحويل فيديو تيك توك ل صوت كان البوت الي مسجل ريك

javascriptv1MITنُشر ١٩ أغسطس ٢٠٢٦· ♥ 0 · ⬇ 1 · 💬 0

تحويل صوت فيديو الي ريك متسجل

//كود تحويل الفيديو توكتوك الي صوت كان البوت الي مسجلو 🐦
//تقدر تستخدمو زي كانك بعت ريك ليك مدوانت زاخدو من التيكتوك و كدا يعني
//BLACK




import axios from "axios"
import fs from "fs"
import path from "path"
import ffmpeg from "fluent-ffmpeg"

/* ================= المعالج ================= */

let handler = async (m, { conn, args, usedPrefix, command }) => {
  if (!args[0]) {
    return m.reply(
      `❌ الاستخدام:\n${usedPrefix + command} <رابط_تيك_توك>\n\nمثال:\n${usedPrefix + command} https://vm.tiktok.com/xxxxxx/`
    )
  }

  const url = args[0]

  if (!url.includes('tiktok.com')) {
    return m.reply('❌ ده مش رابط TikTok صحيح')
  }

  // مسارات مؤقتة لمعالجة الملف بداخل السيرفر
  const tmpInput = path.join(`./tmp_${Date.now()}.mp3`);
  const tmpOutput = path.join(`./tmp_${Date.now()}.opus`);

  try {
    await m.reply(`*⏳ جَــأࢪي م࣬ـــ؏ٚـأݪـجَۿ أݪــࢪأبٚطَ وتنزيل المقطع الصوتي...*`)

    // جلب بيانات مقطع التيك توك عبر API الخاص بـ TikWM
    const params = new URLSearchParams()
    params.append("url", url)
    params.append("hd", "1")

    const { data } = await axios.post(
      "https://tikwm.com/api/",
      params,
      {
        headers: {
          "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
          "User-Agent": "Mozilla/5.0",
          "Cookie": "current_language=en"
        }
      }
    )

    if (!data || !data.data || !data.data.music) {
      throw new Error('فشل جلب الملف الصوتي من TikTok')
    }

    const res = {
      title: data.data.title || 'TikTok Audio',
      duration: data.data.duration ? `${data.data.duration}s` : 'غير معروف',
      download: data.data.music
    }

    // تحميل ملف الـ MP3 الأصلي وحفظه مؤقتاً
    const audioResponse = await axios.get(res.download, { responseType: 'arraybuffer' })
    fs.writeFileSync(tmpInput, Buffer.from(audioResponse.data, 'binary'))

    // إظهار حالة "جاري تسجيل صوتي..." في الشات
    await conn.sendPresenceUpdate('recording', m.chat);

    // تحويل الملف الصوتي لترميز Opus الخاص بالريكوردات
    await new Promise((resolve, reject) => {
      ffmpeg(tmpInput)
        .toFormat('opus')
        .audioChannels(1) // أحادي ليتطابق مع ريكورد الواتساب
        .audioFrequency(48000)
        .on('end', () => resolve())
        .on('error', (err) => reject(err))
        .save(tmpOutput);
    });

    // قراءة الملف المحول
    const opusBuffer = fs.readFileSync(tmpOutput);

    // 🎯 إرسال الريكورد كأنه متسجل من البوت حالاً في الشات (بدون أي توجيه أو قنوات)
    await conn.sendMessage(
      m.chat,
      {
        audio: opusBuffer,
        mimetype: 'audio/ogg; codecs=opus',
        ptt: true // لتبان كـ ريكورد أزرق متسجل
      },
      { quoted: m }
    )

    // رسالة إتمام العملية بنجاح
    let successText = `✔ *تـم الـتـحـمـيـل ✨ بـنـجـاح!* \n\n` +
                      `📌 *العنوان:* ${res.title}\n` +
                      `⏱ *المدة:* ${res.duration}`;

    await m.reply(successText);

  } catch (e) {
    console.error(e)
    await m.reply(`❌ *حدث خطأ أثناء معالجة وتحويل الصوت:*\n${e.message || e}`)
  } finally {
    // تنظيف السيرفر وحذف الملفات المؤقتة
    if (fs.existsSync(tmpInput)) fs.unlinkSync(tmpInput);
    if (fs.existsSync(tmpOutput)) fs.unlinkSync(tmpOutput);
  }
}

handler.help = ['ريكو']
handler.command = ['ريكو', 'ttmp3', 'ttaudio']
handler.tags = ['download']

export default handler

التعليقات (0)

سجّل الدخول للتعليق.