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

suno/سونو

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

توليد اغاني بالذكاء الصناعي

// كود توليد اغاني suno 
// https://whatsapp.com/channel/0029Vb7Nq294Y9le1aAcTE0D
// تابعو القناة هننشر اكواد تانية "izana,uncel shawaza" 
import axios from 'axios';
import { generateWAMessageFromContent, prepareWAMessageMedia } from "@whiskeysockets/baileys";

const IMAGE_URL = "https://files.catbox.moe/4cyr44.jpg";
const SONO_API = 'https://engez.a7a.online/api/v1/ai/ai/sono'; // ✅ تم تصحيح المسار

const genres = ["pop","rock","sad","rap","trap","lofi","arabic","chill","romantic","dance"];
const voices = [
  { label: "ذكر", value: 1 },
  { label: "أنثى", value: 2 },
  { label: "محايد", value: 0 }
];

async function callSonoAPI(params) {
  try {
    const response = await axios.get(SONO_API, {
      params: {
        prompt: params.prompt,
        musicStyle: params.musicStyle,
        genderType: params.genderType
      },
      timeout: 120000
    });

    if (response.data.success && response.data.response.success) {
      return response.data.response.results;
    } else {
      throw new Error(response.data.error || 'فشل في توليد الأغنية');
    }
  } catch (error) {
    console.error('Sono API error:', error.message);
    if (error.response) {
      console.error('Response status:', error.response.status);
      console.error('Response data:', error.response.data);
    }
    throw new Error(`فشل الاتصال بـ API السونو: ${error.message}`);
  }
}

let handler = async (m, { conn, text, usedPrefix, command }) => {

  if (command === "سونو") {
    if (!text) return m.reply(`💬 اكتب وصف الأغنية...\nمثال:\n${usedPrefix}سونو أغنية حزينة عن الفراق`);

    const media = await prepareWAMessageMedia({ image: { url: IMAGE_URL } }, { upload: conn.waUploadToServer });

    const rows = genres.map(g => ({
      title: g,
      id: `${usedPrefix}سونو-صوت ${encodeURIComponent(text)}|${g}`
    }));

    const msg = generateWAMessageFromContent(m.chat, {
      viewOnceMessage: {
        message: {
          interactiveMessage: {
            header: { hasMediaAttachment: true, imageMessage: media.imageMessage },
            body: { text: `🎵 *الوصف:*\n"${text}"\n\nاختر نوع الموسيقى:` },
            footer: { text: "🎵 سونو - AI MUSIC" },
            nativeFlowMessage: {
              buttons: [{
                name: "single_select",
                buttonParamsJson: JSON.stringify({
                  title: "أنواع الموسيقى",
                  sections: [{ title: "Genre List", rows }]
                })
              }]
            }
          }
        }
      }
    }, { userJid: conn.user.jid, quoted: m });

    return await conn.relayMessage(m.chat, msg.message, { messageId: msg.key.id });
  }

  if (command === "سونو-صوت") {
    const [encodedDesc, genre] = text.split("|");
    const desc = decodeURIComponent(encodedDesc);

    const media = await prepareWAMessageMedia({ image: { url: IMAGE_URL } }, { upload: conn.waUploadToServer });

    const rows = voices.map(v => ({
      title: v.label,
      id: `${usedPrefix}سونو-توليد ${encodedDesc}|${genre}|${v.value}`
    }));

    const msg = generateWAMessageFromContent(m.chat, {
      viewOnceMessage: {
        message: {
          interactiveMessage: {
            header: { hasMediaAttachment: true, imageMessage: media.imageMessage },
            body: { text: `🎵 *الوصف:*\n${desc}\n📌 النوع: ${genre}\n\nاختر نوع الصوت:` },
            footer: { text: "🎵 سونو - AI MUSIC" },
            nativeFlowMessage: {
              buttons: [{
                name: "single_select",
                buttonParamsJson: JSON.stringify({
                  title: "نوع الصوت",
                  sections: [{ title: "Voices", rows }]
                })
              }]
            }
          }
        }
      }
    }, { userJid: conn.user.jid, quoted: m });

    return await conn.relayMessage(m.chat, msg.message, { messageId: msg.key.id });
  }

  if (command === "سونو-توليد") {
    const [encodedDesc, genre, genderType] = text.split("|");
    const desc = decodeURIComponent(encodedDesc);

    await m.reply("⏳ جاري توليد الأغنية... الرجاء الانتظار.");

    try {
      const results = await callSonoAPI({
        prompt: desc,
        musicStyle: genre,
        genderType: parseInt(genderType)
      });

      if (!results || !results.length) return m.reply("❌ لم يتم إنشاء أغنية.");

      for (const song of results) {
        if (song.cover_image)
          await conn.sendMessage(m.chat, { image: { url: song.cover_image }, caption: "🎨 *غلاف الأغنية*" }, { quoted: m });

        await conn.sendMessage(m.chat, {
          audio: { url: song.music_file },
          mimetype: "audio/mpeg",
          fileName: "song.mp3"
        }, { quoted: m });

        if (song.lyrics)
          await conn.sendMessage(m.chat, { text: `📝 *الكلمات:*\n\n${song.lyrics}` }, { quoted: m });
      }

    } catch (e) {
      console.error(e);
      m.reply("❌ حدث خطأ أثناء التوليد: " + e.message);
    }
  }
};

handler.command = ["سونو", "سونو-صوت", "سونو-توليد"];
handler.tags = ["music"];
handler.help = ["سونو <وصف>"];
handler.description = "توليد أغاني بالذكاء الاصطناعي";

export default handler;

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

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