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

tts-elevenlab

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

نص لصوت 165 صوت

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

const API_BASE = 'https://engez.a7a.online/api/v1'

// قائمة الأصوات الكاملة (1-165)
const VOICES = [
    { id: 1, name: 'Majed', name_ar: 'ماجد', gender: 'male' },
    { id: 2, name: 'Ghalia', name_ar: 'غالية', gender: 'female' },
    { id: 3, name: 'Aisha', name_ar: 'عائشة', gender: 'female' },
    { id: 4, name: 'Khalifa', name_ar: 'خليفة', gender: 'male' },
    { id: 5, name: 'fahad', name_ar: 'فهد', gender: 'male' },
    { id: 6, name: 'Hassan', name_ar: 'حسن', gender: 'male' },
    { id: 7, name: 'Rakan', name_ar: 'راكان', gender: 'male' },
    { id: 8, name: 'Hessa', name_ar: 'حصة', gender: 'female' },
    { id: 9, name: 'lama', name_ar: 'لمى', gender: 'female' },
    { id: 10, name: 'James', name_ar: 'جيمس', gender: 'male' },
    { id: 11, name: 'Mansour', name_ar: 'منصور', gender: 'male' },
    { id: 12, name: 'Jake', name_ar: 'جيك', gender: 'male' },
    { id: 13, name: 'Asma', name_ar: 'أسماء', gender: 'female' },
    { id: 14, name: 'Abdulaziz', name_ar: 'عبدالعزيز', gender: 'male' },
    { id: 15, name: 'Mattar', name_ar: 'مطر', gender: 'male' },
    { id: 16, name: 'Jad', name_ar: 'جاد', gender: 'male' },
    { id: 17, name: 'Tariq', name_ar: 'طارق', gender: 'male' },
    { id: 18, name: 'Hanan', name_ar: 'حنان', gender: 'female' },
    { id: 19, name: 'Moataz', name_ar: 'معتز', gender: 'male' },
    { id: 20, name: 'Alaa', name_ar: 'علاء', gender: 'male' },
    { id: 21, name: 'Turki', name_ar: 'تركي', gender: 'male' },
    { id: 22, name: 'Hamdan', name_ar: 'حمدان', gender: 'male' },
    { id: 23, name: 'Imad', name_ar: 'عماد', gender: 'male' },
    { id: 24, name: 'Fatima', name_ar: 'فاطمة', gender: 'female' },
    { id: 25, name: 'Mishari', name_ar: 'مشاري', gender: 'male' },
    { id: 26, name: 'Ruba', name_ar: 'ربى', gender: 'female' },
    { id: 27, name: 'Latifa', name_ar: 'لطيفة', gender: 'female' },
    { id: 28, name: 'Maha', name_ar: 'مها', gender: 'female' },
    { id: 29, name: 'Majid', name_ar: 'ماجد', gender: 'male' },
    { id: 30, name: 'Huda', name_ar: 'هدى', gender: 'female' },
    { id: 31, name: 'Turki', name_ar: 'تركي', gender: 'male' },
    { id: 32, name: 'Faisal', name_ar: 'فيصل', gender: 'male' },
    { id: 33, name: 'May', name_ar: 'مي', gender: 'female' },
    { id: 34, name: 'Salim', name_ar: 'سالم', gender: 'male' },
    { id: 35, name: 'Bushra', name_ar: 'بشرى', gender: 'female' },
    { id: 36, name: 'Alya', name_ar: 'عالية', gender: 'female' },
    { id: 37, name: 'Sultan', name_ar: 'سلطان', gender: 'male' },
    { id: 38, name: 'Dhahi', name_ar: 'ضاحي', gender: 'male' },
    { id: 39, name: 'Zahra', name_ar: 'زهراء', gender: 'female' },
    { id: 40, name: 'Mayssa', name_ar: 'ميساء', gender: 'female' },
    { id: 41, name: 'Faisal', name_ar: 'فيصل', gender: 'male' },
    { id: 42, name: 'Fares', name_ar: 'فارس', gender: 'male' },
    { id: 43, name: 'Ghanim', name_ar: 'غانم', gender: 'male' },
    { id: 44, name: 'Saher', name_ar: 'ساهر', gender: 'male' },
    { id: 45, name: 'Arwa', name_ar: 'أروى', gender: 'female' },
    { id: 46, name: 'Hala', name_ar: 'هالة', gender: 'female' },
    { id: 47, name: 'Ahmad', name_ar: 'أحمد', gender: 'male' },
    { id: 48, name: 'Aisha', name_ar: 'عائشة', gender: 'female' },
    { id: 49, name: 'Yousef', name_ar: 'يوسف', gender: 'male' },
    { id: 50, name: 'Aldana', name_ar: 'ألدانا', gender: 'female' },
    { id: 51, name: 'Dana', name_ar: 'دانا', gender: 'female' },
    { id: 52, name: 'Noura', name_ar: 'نورة', gender: 'female' },
    { id: 53, name: 'Lina', name_ar: 'لينا', gender: 'female' },
    { id: 54, name: 'Mishal', name_ar: 'مشعل', gender: 'male' },
    { id: 55, name: 'Latifa', name_ar: 'لطيفة', gender: 'female' },
    { id: 56, name: 'Rawdha', name_ar: 'روضة', gender: 'female' },
    { id: 57, name: 'Samir', name_ar: 'سمير', gender: 'male' },
    { id: 58, name: 'Salim', name_ar: 'سالم', gender: 'male' },
    { id: 59, name: 'Tamim', name_ar: 'تميم', gender: 'female' },
    { id: 60, name: 'Reem', name_ar: 'ريم', gender: 'female' },
    { id: 61, name: 'Nayef', name_ar: 'نايف', gender: 'male' },
    { id: 62, name: 'Bayan', name_ar: 'بيان', gender: 'female' },
    { id: 63, name: 'Nasser', name_ar: 'ناصر', gender: 'male' },
    { id: 64, name: 'Adel', name_ar: 'عادل', gender: 'male' },
    { id: 65, name: 'Fadi', name_ar: 'فادي', gender: 'male' },
    { id: 66, name: 'Bader', name_ar: 'بدر', gender: 'male' },
    { id: 67, name: 'Liam', name_ar: 'ليام', gender: 'male' },
    { id: 68, name: 'omar', name_ar: 'عمر', gender: 'male' },
    { id: 69, name: 'khalid', name_ar: 'خالد', gender: 'male' },
    { id: 70, name: 'fatima', name_ar: 'فاطمة', gender: 'female' },
    { id: 71, name: 'Sheikha', name_ar: 'شيخة', gender: 'female' },
    { id: 72, name: 'Talal', name_ar: 'طلال', gender: 'male' },
    { id: 73, name: 'Abdulla', name_ar: 'عبدالله', gender: 'male' },
    { id: 74, name: 'Suhail', name_ar: 'سهيل', gender: 'male' },
    { id: 75, name: 'Ahmed', name_ar: 'أحمد', gender: 'male' },
    { id: 76, name: 'Amna', name_ar: 'آمنة', gender: 'female' },
    { id: 77, name: 'Dalal', name_ar: 'دلال', gender: 'female' },
    { id: 78, name: 'Badr', name_ar: 'بدر', gender: 'male' },
    { id: 79, name: 'Bakheta', name_ar: 'بختة', gender: 'female' },
    { id: 80, name: 'Rema', name_ar: 'ريما', gender: 'female' },
    { id: 81, name: 'Dhabia', name_ar: 'ظبية', gender: 'female' },
    { id: 82, name: 'Salma', name_ar: 'سلمى', gender: 'female' },
    { id: 83, name: 'Mubarak', name_ar: 'مبارك', gender: 'male' },
    { id: 84, name: 'Nawal', name_ar: 'نوال', gender: 'female' },
    { id: 85, name: 'Wadeema', name_ar: 'وديمة', gender: 'female' },
    { id: 86, name: 'Wafa', name_ar: 'وفاء', gender: 'female' },
    { id: 87, name: 'Yousef', name_ar: 'يوسف', gender: 'male' },
    { id: 88, name: 'Rashid', name_ar: 'راشد', gender: 'male' },
    { id: 89, name: 'Manal', name_ar: 'منال', gender: 'female' },
    { id: 90, name: 'Nasser', name_ar: 'ناصر', gender: 'male' },
    { id: 91, name: 'Khalid', name_ar: 'خالد', gender: 'male' },
    { id: 92, name: 'Juma', name_ar: 'جمعة', gender: 'male' },
    { id: 93, name: 'Jassim', name_ar: 'جاسم', gender: 'male' },
    { id: 94, name: 'Buthaina', name_ar: 'بثينة', gender: 'female' },
    { id: 95, name: 'Nawaf', name_ar: 'نواف', gender: 'male' },
    { id: 96, name: 'Hazim', name_ar: 'حازم', gender: 'male' },
    { id: 97, name: 'Sara', name_ar: 'سارة', gender: 'female' },
    { id: 98, name: 'Waleed', name_ar: 'وليد', gender: 'male' },
    { id: 99, name: 'Rayyan', name_ar: 'ريان', gender: 'male' },
    { id: 100, name: 'Afra', name_ar: 'عفراء', gender: 'female' },
    { id: 101, name: 'Mansour', name_ar: 'منصور', gender: 'male' },
    { id: 102, name: 'Ali', name_ar: 'علي', gender: 'male' },
    { id: 103, name: 'Maitha', name_ar: 'ميثاء', gender: 'female' },
    { id: 104, name: 'Butti', name_ar: 'بطي', gender: 'male' },
    { id: 105, name: 'Zakiya', name_ar: 'ذكية', gender: 'female' },
    { id: 106, name: 'Shamma', name_ar: 'شمّا', gender: 'female' },
    { id: 107, name: 'Salama', name_ar: 'سلامة', gender: 'female' },
    { id: 108, name: 'Zayed', name_ar: 'زايد', gender: 'male' },
    { id: 109, name: 'Thuraya', name_ar: 'ثريا', gender: 'female' },
    { id: 110, name: 'Najla', name_ar: 'نجلاء', gender: 'female' },
    { id: 111, name: 'Fahad', name_ar: 'فهد', gender: 'male' },
    { id: 112, name: 'Ghada', name_ar: 'غادة', gender: 'female' },
    { id: 113, name: 'Layla', name_ar: 'ليلى', gender: 'female' },
    { id: 114, name: 'Reem', name_ar: 'ريم', gender: 'female' },
    { id: 115, name: 'Haitham', name_ar: 'هيثم', gender: 'male' },
    { id: 116, name: 'Hamad', name_ar: 'حمد', gender: 'male' },
    { id: 117, name: 'Adel', name_ar: 'عادل', gender: 'male' },
    { id: 118, name: 'Falah', name_ar: 'فلاح', gender: 'male' },
    { id: 119, name: 'Mohammed', name_ar: 'محمد', gender: 'male' },
    { id: 120, name: 'Saif', name_ar: 'سيف', gender: 'male' },
    { id: 121, name: 'Salem', name_ar: 'سالم', gender: 'male' },
    { id: 122, name: 'Abdulrahman', name_ar: 'عبدالرحمن', gender: 'male' },
    { id: 123, name: 'Hend', name_ar: 'هند', gender: 'female' },
    { id: 124, name: 'Humaid', name_ar: 'حميد', gender: 'male' },
    { id: 125, name: 'Hussain', name_ar: 'حسين', gender: 'male' },
    { id: 126, name: 'Jameela', name_ar: 'جميلة', gender: 'female' },
    { id: 127, name: 'Khadija', name_ar: 'خديجة', gender: 'female' },
    { id: 128, name: 'Mana', name_ar: 'مانا', gender: 'male' },
    { id: 129, name: 'Mariam', name_ar: 'مريم', gender: 'female' },
    { id: 130, name: 'Meera', name_ar: 'ميرا', gender: 'female' },
    { id: 131, name: 'Mohsen', name_ar: 'محسن', gender: 'male' },
    { id: 132, name: 'Moza', name_ar: 'موزة', gender: 'female' },
    { id: 133, name: 'Muna', name_ar: 'منى', gender: 'female' },
    { id: 134, name: 'Nada', name_ar: 'ندى', gender: 'female' },
    { id: 135, name: 'Nayef', name_ar: 'نايف', gender: 'male' },
    { id: 136, name: 'Noor', name_ar: 'نور', gender: 'female' },
    { id: 137, name: 'Nujoom', name_ar: 'نجوم', gender: 'female' },
    { id: 138, name: 'Obaid', name_ar: 'عبيد', gender: 'male' },
    { id: 139, name: 'Sultan', name_ar: 'سلطان', gender: 'male' },
    { id: 140, name: 'Omar', name_ar: 'عمر', gender: 'male' },
    { id: 141, name: 'Saeed', name_ar: 'سعيد', gender: 'male' },
    { id: 142, name: 'Shaima', name_ar: 'شيماء', gender: 'female' },
    { id: 143, name: 'Hamdan', name_ar: 'حمدان', gender: 'male' },
    { id: 144, name: 'Naina', name_ar: 'نينى', gender: 'female' },
    { id: 145, name: 'Maya', name_ar: 'مايا', gender: 'female' },
    { id: 146, name: 'Abdullah', name_ar: 'عبدالله', gender: 'male' },
    { id: 147, name: 'Mark', name_ar: 'مارك', gender: 'male' },
    { id: 148, name: 'Kevin', name_ar: 'كيفن', gender: 'male' },
    { id: 149, name: 'Mark', name_ar: 'مارك', gender: 'male' },
    { id: 150, name: 'aisha', name_ar: 'عائشة', gender: 'female' },
    { id: 151, name: 'hammad', name_ar: 'حمّاد', gender: 'male' },
    { id: 152, name: 'Eric', name_ar: 'اريك', gender: 'male' },
    { id: 153, name: 'Priya', name_ar: 'بريا', gender: 'female' },
    { id: 154, name: 'Rahul', name_ar: 'راهول', gender: 'male' },
    { id: 155, name: 'Sarah', name_ar: 'سارة', gender: 'female' },
    { id: 156, name: 'Dana', name_ar: 'دانا', gender: 'female' },
    { id: 157, name: 'Dana', name_ar: 'دانا', gender: 'female' },
    { id: 158, name: 'Alex', name_ar: 'أليكس', gender: 'male' },
    { id: 159, name: 'David', name_ar: 'ديفيد', gender: 'male' },
    { id: 160, name: 'saif', name_ar: 'سيف', gender: 'male' },
    { id: 161, name: 'Amira', name_ar: 'أميرة', gender: 'female' },
    { id: 162, name: 'hassan', name_ar: 'حسن', gender: 'male' },
    { id: 163, name: 'noura', name_ar: 'نورة', gender: 'female' },
    { id: 164, name: 'yousef', name_ar: 'يوسف', gender: 'male' },
    { id: 165, name: 'Arabic Poet', name_ar: 'الشاعر العربي', gender: 'male' }
]

// دالة توليد الصوت
async function generateVoice(text, voiceId) {
    try {
        const params = new URLSearchParams()
        params.append('text', text)
        params.append('voice', voiceId)

        const response = await axios.get(`${API_BASE}/tools/elevenlab?${params.toString()}`, {
            timeout: 60000
        })

        if (!response.data?.success) {
            throw new Error(response.data?.error || 'فشل توليد الصوت')
        }

        return response.data.response
    } catch (error) {
        throw new Error(error.message || 'فشل الاتصال')
    }
}

// دالة إرسال قائمة الأصوات
async function sendVoiceList(conn, chat, quoted, usedPrefix) {
    const sections = [{
        title: '🇸🇦 أصوات عربية (ذكر)',
        rows: VOICES.filter(v => v.gender === 'male' && v.name_ar).slice(0, 30).map(v => ({
            title: v.name_ar,
            description: `🎙️ ${v.name} | ID: ${v.id}`,
            id: `${usedPrefix}تحدث ${v.id}`
        }))
    }, {
        title: '🇸🇦 أصوات عربية (أنثى)',
        rows: VOICES.filter(v => v.gender === 'female' && v.name_ar).slice(0, 30).map(v => ({
            title: v.name_ar,
            description: `🎙️ ${v.name} | ID: ${v.id}`,
            id: `${usedPrefix}تحدث ${v.id}`
        }))
    }, {
        title: '🌍 أصوات أخرى',
        rows: VOICES.filter(v => !v.name_ar || v.gender === 'male').slice(60, 90).map(v => ({
            title: v.name || v.name_ar || 'غير معروف',
            description: `🎙️ ${v.gender === 'male' ? 'ذكر' : 'أنثى'} | ID: ${v.id}`,
            id: `${usedPrefix}تحدث ${v.id}`
        }))
    }]

    const msg = generateWAMessageFromContent(chat, {
        viewOnceMessage: {
            message: {
                interactiveMessage: {
                    body: { text: '🗣️ *اختر الصوت المناسب*\n\nاختر صوتاً لتوليد النص الصوتي:' },
                    footer: { text: '🎙️ ElevenLabs TTS' },
                    nativeFlowMessage: {
                        buttons: [{
                            name: 'single_select',
                            buttonParamsJson: JSON.stringify({
                                title: '🎙️ اختر صوت',
                                sections
                            })
                        }]
                    }
                }
            }
        }
    }, { userJid: conn.user.jid, quoted })

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

const handler = async (m, { conn, text, usedPrefix, command }) => {
    // أمر عرض القائمة
    if (command === 'تحدث' && !text) {
        await sendVoiceList(conn, m.chat, m, usedPrefix)
        return
    }

    // أمر مساعد
    if (command === 'صوت-مساعدة') {
        return m.reply(
            '🗣️ *ElevenLabs TTS - الأوامر*\n\n' +
            '📌 *الاستخدام:*\n' +
            `• ${usedPrefix}تحدث - عرض قائمة الأصوات\n` +
            `• ${usedPrefix}تحدث 15 السلام عليكم - توليد صوت بالصوت رقم 15\n` +
            `• ${usedPrefix}ماجد مرحبا - توليد صوت باسم ماجد\n\n` +
            '📌 *مثال:*\n' +
            `${usedPrefix}تحدث 15 السلام عليكم\n` +
            `${usedPrefix}ماجد كيف حالك؟`
        )
    }

    // التحقق من وجود نص
    if (!text) {
        return m.reply(
            '❌ *يرجى إدخال النص*\n\n' +
            '📌 *الاستخدام:*\n' +
            `• ${usedPrefix}تحدث <رقم الصوت> <النص>\n` +
            `• ${usedPrefix}ماجد <النص>\n\n` +
            '📌 *مثال:*\n' +
            `${usedPrefix}تحدث 15 السلام عليكم\n` +
            `${usedPrefix}ماجد كيف حالك؟`
        )
    }

    await m.react('⏳')

    try {
        let voiceId = null
        let textToSpeak = text

        // محاولة استخراج رقم الصوت من بداية النص
        const match = text.match(/^(\d+)\s+(.+)/)
        if (match) {
            voiceId = match[1]
            textToSpeak = match[2]
        } else {
            // محاولة البحث عن الصوت بالاسم
            const voice = VOICES.find(v => v.name_ar === command || v.name.toLowerCase() === command.toLowerCase())
            if (voice) {
                voiceId = voice.id
            } else {
                // إذا لم يتم العثور على الصوت، استخدم الصوت الافتراضي (1)
                voiceId = 1
            }
        }

        // التحقق من صحة رقم الصوت
        if (!VOICES.some(v => v.id === parseInt(voiceId))) {
            throw new Error(`الصوت رقم ${voiceId} غير موجود`)
        }

        const result = await generateVoice(textToSpeak, voiceId)

        if (result?.url) {
            const voiceName = VOICES.find(v => v.id === parseInt(voiceId))?.name_ar || voiceId
            await conn.sendMessage(m.chat, {
                audio: { url: result.url },
                mimetype: 'audio/mpeg',
                fileName: `voice_${voiceName}_${Date.now()}.mp3`,
                caption: `🎙️ *تم توليد الصوت*\n🗣️ الصوت: ${voiceName}\n📝 النص: ${textToSpeak}`
            }, { quoted: m })

            await m.react('✅')
        } else {
            throw new Error('لم يتم العثور على رابط الصوت')
        }

    } catch (error) {
        await m.react('❌')
        return m.reply(`❌ *خطأ:* ${error.message}`)
    }
}

handler.command = ['تحدث', 'صوت-مساعدة']
handler.help = ['تحدث <رقم/اسم> <نص>', 'صوت-مساعدة']
handler.tags = ['tts', 'ai']

export default handler

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

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