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

ستوري للقروب

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

الحلو انه مب لازم تكون ادمن ، شرط يكون الشات مفتوح

// commands/ستوري.js
import { prepareWAMessageMedia, generateWAMessageFromContent, proto } from '@whiskeysockets/baileys';

// 🎨 16 لون
const COLORS = [
    0xFFF44336, 0xFFE91E63, 0xFF9C27B0, 0xFF673AB7, 0xFF3F51B5,
    0xFF2196F3, 0xFF03A9F4, 0xFF00BCD4, 0xFF009688, 0xFF4CAF50,
    0xFF8BC34A, 0xFFCDDC39, 0xFFFFEB3B, 0xFFFFC107, 0xFFFF9800, 0xFFFF5722
];

export default {
    name: 'ستوري',
    aliases: ['story', 'منشور'],
    category: 'group',
    description: '📢 إنشاء منشور مخصص مع ألوان وخيارات',

    async execute(sock, m, args, { cfg }) {
        const chatJid = m.key.remoteJid;
        const sender = m.key.participant || m.participant || m.key.remoteJid;
        const comando = 'ستوري';

        // ✅ التحقق من النخبة والمطور
        const isOwner = cfg.ownerNumber === sender;
        const isElite = (cfg.eliteNumbers || []).includes(sender);

        if (!isOwner && !isElite) {
            return sock.sendMessage(chatJid, {
                text: cfg.msgs.elite(comando)
            }, { quoted: m });
        }

        // ✅ التحقق من وجود رد
        const quoted = m.message?.extendedTextMessage?.contextInfo?.quotedMessage;
        let mime = '';
        let isImage = false;
        let isVideo = false;
        let isAudio = false;
        let isVoice = false;

        if (quoted) {
            if (quoted.imageMessage) {
                isImage = true;
                mime = 'image';
            } else if (quoted.videoMessage) {
                isVideo = true;
                mime = 'video';
            } else if (quoted.audioMessage) {
                isAudio = true;
                mime = 'audio';
                if (quoted.audioMessage.ptt) isVoice = true;
            }
        }

        // ✅ القيم الافتراضية (للكل)
        let audienceType = 0; // ✅ 0 = عام (للجميع)
        let listEmoji = '';
        let listName = '';
        let postText = '';
        let colorIndex = -1;
        let remainingText = args.join(' ').trim();

        // ────────── تحليل الأمر ──────────
        if (remainingText) {
            let parts = remainingText.split(' ');

            // ✅ استخراج اللون من البداية (رقم 0-15)
            if (parts.length > 0) {
                let potentialColor = parseInt(parts[0]);
                if (!isNaN(potentialColor) && potentialColor >= 0 && potentialColor <= 15) {
                    colorIndex = potentialColor;
                    remainingText = parts.slice(1).join(' ');
                } else {
                    remainingText = parts.join(' ');
                }
            }

            postText = remainingText;
        }

        // اللون النهائي (عشوائي إذا لم يحدد)
        const finalColor = (colorIndex >= 0 && colorIndex < COLORS.length)
            ? COLORS[colorIndex]
            : COLORS[Math.floor(Math.random() * COLORS.length)];

        // ────────── مساعدة ──────────
        if (!postText && !isImage && !isVideo && !isAudio) {
            return sock.sendMessage(chatJid, {
                text: `📢 *نظام الاستوري المخصص*

🎨 *الألوان (0-15):*
0-أحمر | 1-وردي | 2-بنفسجي | 3-نيلي
4-أزرق | 5-أزرق فاتح | 6-سماوي | 7-فيروزي
8-أخضر | 9-أخضر فاتح | 10-ليموني | 11-ذهبي
12-أصفر | 13-كهرماني | 14-برتقالي | 15-أحمر برتقالي

✏️ *أمثلة:*
• .ستوري 5 مرحبا
• [رد على صورة] .ستوري 3`

            }, { quoted: m });
        }

        try {
            // ────────── حالة وسائط (صورة/فيديو/صوت) ──────────
            if (isImage || isVideo || isAudio) {
                const { downloadContentFromMessage } = await import('@whiskeysockets/baileys');
                
                let mediaType = isImage ? 'image' : isVideo ? 'video' : 'audio';
                let mediaMessage = isImage ? quoted.imageMessage : isVideo ? quoted.videoMessage : quoted.audioMessage;
                
                const stream = await downloadContentFromMessage(mediaMessage, mediaType);
                let buffer = Buffer.from([]);
                for await (const chunk of stream) {
                    buffer = Buffer.concat([buffer, chunk]);
                }

                let mediaOptions = { [mediaType]: buffer };
                if (isVoice) {
                    mediaOptions = { audio: buffer, mimetype: 'audio/ogg; codecs=opus', ptt: false };
                }

                let prepared = await prepareWAMessageMedia(mediaOptions, { upload: sock.waUploadToServer });
                let messageKey = isImage ? 'imageMessage' : isVideo ? 'videoMessage' : 'audioMessage';

                const contentMsg = {
                    [messageKey]: {
                        ...prepared[messageKey],
                        caption: postText || '',
                        contextInfo: {
                            isGroupStatus: true,
                            pairedMediaType: 'NOT_PAIRED_MEDIA',
                            statusAudienceMetadata: {
                                audienceType: audienceType,
                                ...(listEmoji && { listEmoji }),
                                ...(listName && { listName })
                            }
                        }
                    }
                };

                const webMsg = proto.Message.fromObject(contentMsg);
                const waMsg = generateWAMessageFromContent(chatJid, webMsg, { userJid: sock.user.id, quoted: m });
                await sock.relayMessage(chatJid, waMsg.message, { messageId: waMsg.key.id });
                await sock.sendMessage(chatJid, { react: { text: '✅', key: m.key } });
                return;
            }

            // ────────── حالة نصية ──────────
            const groupMetadata = await sock.groupMetadata(chatJid);
            const statusJidList = groupMetadata.participants.map(p => p.id);

            await sock.relayMessage(chatJid, {
                statusJidList,
                messageContextInfo: {
                    messageSecret: Buffer.from(Array(32).fill(0).map(() => Math.floor(Math.random() * 256)))
                },
                groupStatusMessageV2: {
                    message: {
                        extendedTextMessage: {
                            text: `${postText}`,
                            thumbnailUrl: 'https://file.garden/aauvg01sjleV_ic1/c2a3bfd6e9fd1db2f5358f8feec9261f.jpg',
                            textArgb: 4294967040,
                            backgroundArgb: finalColor,
                            font: 5,
                            previewType: 0,
                            contextInfo: {
                                statusAttributions: [{ type: 10 }],
                                featureEligibilities: { canBeReshared: true, canReceiveMultiReact: true },
                                statusSourceType: 4,
                                statusAudienceMetadata: {
                                    audienceType: audienceType
                                }
                            },
                            inviteLinkGroupTypeV2: 0
                        }
                    }
                }
            }, {});

            await sock.sendMessage(chatJid, { react: { text: '✅', key: m.key } });

        } catch (error) {
            console.error('❌ ستوري Error:', error);
            await sock.sendMessage(chatJid, { react: { text: '❌', key: m.key } });
            await sock.sendMessage(chatJid, {
                text: `❌ حدث خطأ: ${error.message}`
            }, { quoted: m });
        }
    }
};

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

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