Telegram to WhatsApp Content Converter

המרת הודעות מטלגרם לתוכן מותאם לקבוצת WhatsApp עם תזמון שליחה

Size

32.8 KB

Version

1.2.2

Created

Feb 8, 2026

Updated

about 1 month ago

1// ==UserScript==
2// @name		Telegram to WhatsApp Content Converter
3// @description		המרת הודעות מטלגרם לתוכן מותאם לקבוצת WhatsApp עם תזמון שליחה
4// @version		1.2.2
5// @match		https://*.web.telegram.org/*
6// @match		https://*.webk.telegram.org/*
7// @icon		https://web.telegram.org/a/favicon.ico
8// @grant		GM.getValue
9// @grant		GM.setValue
10// @grant		GM.deleteValue
11// @grant		GM.listValues
12// @grant		GM.setClipboard
13// @grant		GM.openInTab
14// @grant		unsafeWindow
15// ==/UserScript==
16(function() {
17    'use strict';
18
19    console.log('🚀 Telegram to WhatsApp Converter - Starting...');
20
21    // הנחיות ההמרה המלאות
22    const CONVERSION_GUIDELINES = `
23פתיחה מותאמת לקבוצה
24כל פוסט נפתח ב־"היי לכולן" – כדי לדבר ישירות אל קהל נשי, בגובה העיניים.
25
26שפה פשוטה, ברורה ומעשית
27אני כותבת בעברית, בצורה נגישה, כאילו אנחנו מדברות בוואטסאפ. בלי ז'רגון טכני מיותר.
28
29תמיד בלשון נקבה וברבים
30כל ההסברים, הצעות והטיפים מנוסחים בלשון נקבה (רבות), כדי שהקבוצה תרגיש שזה בשבילה.
31
32שמור על כל הפרטים - אל תקצר!
33אל תסכם את התוכן - תרגם אותו במלואו!
34שמור על כל הנקודות, הדוגמאות והפרטים מההודעה המקורית.
35אם יש 10 נקודות בהודעה המקורית - צריך להיות 10 נקודות בהודעה המומרת.
36אם יש הסבר ארוך - שמור אותו ארוך, רק תעשה אותו ברור יותר.
37
38הסבר מושגים מורכבים
39כשיש מושגים טכניים או מורכבים - תמיד תסבירי אותם בפשטות ובגובה העיניים.
40תני קונטקסט למה זה חשוב ואיך זה משפיע על העסק.
41השתמשי בדוגמאות מהחיים האמיתיים כדי להבהיר.
42אבל אל תמחקי את המושג המקורי - רק תוסיפי הסבר לידו.
43
44תכל'ס לעסקים
45אני מסכמת כל תוכן כך שייצא ממנו ערך פרקטי:
46- איך זה קשור לעסק שלכן
47- איך להשתמש בזה בפועל
48- דוגמה ליישום
49- או רעיון לפוסט / שירות / אוטומציה
50- אזהרות וסיכונים אם רלוונטי
51
52ויזואליות לוואטסאפ
53הטקסטים קצרים, מפורקים לפסקאות ברורות, עם אייקונים לפעמים 😊 כדי שיהיה נעים וקריא בוואטסאפ.
54השתמשי באימוג'ים רלוונטיים כדי להדגיש נקודות חשובות.
55
56לוקחת השראה מכל סגנון
57לא משנה אם הבאת כתבה, פוסט טוויטר, או סרטון – אני מתרגמת את התוכן לעברית עסקית שימושית.
58
59מבנה התוכן:
601. פתיחה מושכת עם "היי לכולן" + הקשר קצר
612. הסבר ברור של מה קורה / מה זה
623. פירוט כל הנקודות החשובות מההודעה המקורית עם הסברים
634. אזהרות או נקודות לתשומת לב אם רלוונטי
645. סיכום עסקי - מה זה אומר בשבילכן
65
66חשוב: אל תקצר! אל תסכם! תרגם את כל התוכן במלואו, רק תעשה אותו ברור יותר ומותאם לקהל נשי עסקי.
67
68אם יש בהודעה הטלגרם לינק הצטרפות לקבוצה תמחק אותו.
69תמיד תסיים את ההודעה ב״ 
70*רוצה להזמין חברות לקבוצה?*
71📩 קישור להצטרפות לקבוצה: https://chat.whatsapp.com/JMPxSSgheYNLr5gl4JugR״
72`;
73
74    // סגנונות CSS
75    const styles = `
76        .tg-to-wa-icon {
77            position: absolute;
78            top: 8px;
79            right: 8px;
80            width: 32px;
81            height: 32px;
82            background: linear-gradient(135deg, #25D366 0%, #128C7E 100%);
83            border-radius: 50%;
84            cursor: pointer;
85            display: flex;
86            align-items: center;
87            justify-content: center;
88            box-shadow: 0 2px 8px rgba(0,0,0,0.2);
89            z-index: 1000;
90            transition: all 0.2s ease;
91        }
92        
93        .tg-to-wa-icon svg {
94            width: 18px;
95            height: 18px;
96            fill: white;
97        }
98        
99        .tg-to-wa-popup {
100            position: fixed;
101            background: white;
102            border-radius: 12px;
103            box-shadow: 0 8px 32px rgba(0,0,0,0.15);
104            padding: 20px;
105            z-index: 10000;
106            max-width: 500px;
107            min-width: 400px;
108            direction: rtl;
109            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
110        }
111        
112        .tg-to-wa-popup-header {
113            display: flex;
114            justify-content: space-between;
115            align-items: center;
116            margin-bottom: 16px;
117            padding-bottom: 12px;
118            border-bottom: 2px solid #f0f0f0;
119        }
120        
121        .tg-to-wa-popup-title {
122            font-size: 18px;
123            font-weight: 600;
124            color: #128C7E;
125        }
126        
127        .tg-to-wa-close-btn {
128            background: none;
129            border: none;
130            font-size: 24px;
131            cursor: pointer;
132            color: #999;
133            padding: 0;
134            width: 30px;
135            height: 30px;
136            display: flex;
137            align-items: center;
138            justify-content: center;
139            border-radius: 50%;
140            transition: all 0.2s;
141        }
142        
143        .tg-to-wa-close-btn:hover {
144            background: #f0f0f0;
145            color: #333;
146        }
147        
148        .tg-to-wa-content {
149            background: #f8f9fa;
150            border-radius: 8px;
151            padding: 16px;
152            margin-bottom: 16px;
153            max-height: 300px;
154            overflow-y: auto;
155            font-size: 14px;
156            line-height: 1.6;
157            color: #333;
158            white-space: pre-wrap;
159            word-wrap: break-word;
160        }
161        
162        .tg-to-wa-buttons {
163            display: flex;
164            flex-direction: column;
165            gap: 10px;
166        }
167        
168        .tg-to-wa-btn {
169            padding: 12px 20px;
170            border: none;
171            border-radius: 8px;
172            font-size: 15px;
173            font-weight: 500;
174            cursor: pointer;
175            transition: all 0.2s;
176            display: flex;
177            align-items: center;
178            justify-content: center;
179            gap: 8px;
180        }
181        
182        .tg-to-wa-btn-primary {
183            background: linear-gradient(135deg, #25D366 0%, #128C7E 100%);
184            color: white;
185        }
186        
187        .tg-to-wa-btn-primary:hover {
188            transform: translateY(-2px);
189            box-shadow: 0 4px 12px rgba(37, 211, 102, 0.3);
190        }
191        
192        .tg-to-wa-btn-secondary {
193            background: white;
194            color: #128C7E;
195            border: 2px solid #128C7E;
196        }
197        
198        .tg-to-wa-btn-secondary:hover {
199            background: #f0f9f7;
200        }
201        
202        .tg-to-wa-btn:disabled {
203            opacity: 0.6;
204            cursor: not-allowed;
205        }
206        
207        .tg-to-wa-loading {
208            display: inline-block;
209            width: 16px;
210            height: 16px;
211            border: 2px solid rgba(255,255,255,0.3);
212            border-top-color: white;
213            border-radius: 50%;
214            animation: spin 0.8s linear infinite;
215        }
216        
217        @keyframes spin {
218            to { transform: rotate(360deg); }
219        }
220        
221        .tg-to-wa-schedule-section {
222            margin-top: 16px;
223            padding-top: 16px;
224            border-top: 2px solid #f0f0f0;
225        }
226        
227        .tg-to-wa-schedule-title {
228            font-size: 16px;
229            font-weight: 600;
230            color: #333;
231            margin-bottom: 12px;
232        }
233        
234        .tg-to-wa-schedule-inputs {
235            display: flex;
236            gap: 10px;
237            margin-bottom: 12px;
238        }
239        
240        .tg-to-wa-input {
241            flex: 1;
242            padding: 10px;
243            border: 2px solid #e0e0e0;
244            border-radius: 8px;
245            font-size: 14px;
246            direction: ltr;
247            text-align: center;
248        }
249        
250        .tg-to-wa-input:focus {
251            outline: none;
252            border-color: #128C7E;
253        }
254        
255        .tg-to-wa-scheduled-list {
256            margin-top: 16px;
257            max-height: 200px;
258            overflow-y: auto;
259        }
260        
261        .tg-to-wa-scheduled-item {
262            background: #fff;
263            border: 1px solid #e0e0e0;
264            border-radius: 8px;
265            padding: 12px;
266            margin-bottom: 8px;
267            display: flex;
268            justify-content: space-between;
269            align-items: center;
270        }
271        
272        .tg-to-wa-scheduled-info {
273            flex: 1;
274        }
275        
276        .tg-to-wa-scheduled-time {
277            font-weight: 600;
278            color: #128C7E;
279            margin-bottom: 4px;
280        }
281        
282        .tg-to-wa-scheduled-preview {
283            font-size: 13px;
284            color: #666;
285            white-space: nowrap;
286            overflow: hidden;
287            text-overflow: ellipsis;
288            max-width: 300px;
289        }
290        
291        .tg-to-wa-delete-btn {
292            background: #ff4444;
293            color: white;
294            border: none;
295            border-radius: 6px;
296            padding: 6px 12px;
297            cursor: pointer;
298            font-size: 13px;
299            transition: all 0.2s;
300        }
301        
302        .tg-to-wa-delete-btn:hover {
303            background: #cc0000;
304        }
305        
306        .tg-to-wa-overlay {
307            position: fixed;
308            top: 0;
309            left: 0;
310            right: 0;
311            bottom: 0;
312            background: rgba(0,0,0,0.5);
313            z-index: 9999;
314        }
315        
316        .tg-to-wa-success-msg {
317            position: fixed;
318            top: 20px;
319            right: 20px;
320            background: #25D366;
321            color: white;
322            padding: 16px 24px;
323            border-radius: 8px;
324            box-shadow: 0 4px 12px rgba(0,0,0,0.2);
325            z-index: 10001;
326            animation: slideIn 0.3s ease;
327        }
328        
329        @keyframes slideIn {
330            from {
331                transform: translateX(400px);
332                opacity: 0;
333            }
334            to {
335                transform: translateX(0);
336                opacity: 1;
337            }
338        }
339    `;
340
341    // הוספת הסגנונות לדף
342    const styleSheet = document.createElement('style');
343    styleSheet.textContent = styles;
344    document.head.appendChild(styleSheet);
345
346    // פונקציה להצגת הודעת הצלחה
347    function showSuccessMessage(message) {
348        const successMsg = document.createElement('div');
349        successMsg.className = 'tg-to-wa-success-msg';
350        successMsg.textContent = message;
351        document.body.appendChild(successMsg);
352        
353        setTimeout(() => {
354            successMsg.remove();
355        }, 3000);
356    }
357
358    // פונקציה לחילוץ טקסט מהודעה
359    function extractMessageText(messageElement) {
360        // חיפוש אלמנט הטקסט בהודעה
361        const textElement = messageElement.querySelector('.text-content, .message-text, .text, [class*="text"], [class*="content"]');
362        
363        if (textElement) {
364            return textElement.innerText || textElement.textContent || '';
365        }
366        
367        // אם לא נמצא, ננסה לקחת את כל הטקסט
368        return messageElement.innerText || messageElement.textContent || '';
369    }
370
371    // פונקציה להמרת תוכן לפי ההנחיות
372    async function convertContent(originalText, additionalInstructions = '') {
373        console.log('מתחיל המרת תוכן:', originalText.substring(0, 100));
374        
375        try {
376            // הסרת לינקים להצטרפות לקבוצות טלגרם
377            let cleanedText = originalText.replace(/https?:\/\/t\.me\/[^\s]+/g, '');
378            cleanedText = cleanedText.replace(/https?:\/\/telegram\.me\/[^\s]+/g, '');
379            
380            let prompt = `אני צריכה שתמיר את ההודעה הבאה מטלגרם לתוכן מותאם לקבוצת WhatsApp נשית עסקית.
381
382הנחיות ההמרה:
383${CONVERSION_GUIDELINES}
384
385הודעה מקורית:
386${cleanedText}`;
387
388            // הוספת חידודים נוספים אם יש
389            if (additionalInstructions && additionalInstructions.trim()) {
390                prompt += `\n\nחידודים והנחיות נוספות:\n${additionalInstructions.trim()}`;
391            }
392
393            prompt += '\n\nהמר את ההודעה לפי ההנחיות. תן לי רק את התוכן המומר, בלי הסברים נוספים.';
394
395            console.log('שולח בקשה ל-AI...');
396            const convertedText = await RM.aiCall(prompt);
397            console.log('התקבל תוכן מומר:', convertedText.substring(0, 100));
398            
399            // וידוא שהסיום הנכון קיים
400            const ending = '\n\n*רוצה להזמין חברות לקבוצה?*\n📩 קישור להצטרפות לקבוצה: https://chat.whatsapp.com/JMPxSSgheYNLr5gl4JugR';
401            
402            if (!convertedText.includes('https://chat.whatsapp.com/JMPxSSgheYNLr5gl4JugR')) {
403                return convertedText + ending;
404            }
405            
406            return convertedText;
407        } catch (error) {
408            console.error('שגיאה בהמרת תוכן:', error);
409            throw error;
410        }
411    }
412
413    // פונקציה להעתקה ללוח
414    async function copyToClipboard(text) {
415        try {
416            await GM.setClipboard(text);
417            return true;
418        } catch (error) {
419            console.error('שגיאה בהעתקה:', error);
420            return false;
421        }
422    }
423
424    // פונקציה לשמירת הודעה לרשימה
425    async function saveToList(text) {
426        try {
427            const savedMessages = await GM.getValue('savedMessages', []);
428            savedMessages.push({
429                text: text,
430                timestamp: Date.now(),
431                date: new Date().toLocaleString('he-IL')
432            });
433            await GM.setValue('savedMessages', savedMessages);
434            console.log('הודעה נשמרה לרשימה');
435            return true;
436        } catch (error) {
437            console.error('שגיאה בשמירה:', error);
438            return false;
439        }
440    }
441
442    // פונקציה לתזמון הודעה
443    async function scheduleMessage(text, date, time) {
444        try {
445            const scheduledMessages = await GM.getValue('scheduledMessages', []);
446            const scheduledDateTime = new Date(`${date}T${time}`);
447            
448            scheduledMessages.push({
449                text: text,
450                scheduledDate: date,
451                scheduledTime: time,
452                scheduledDateTime: scheduledDateTime.getTime(),
453                createdAt: Date.now(),
454                status: 'pending'
455            });
456            
457            await GM.setValue('scheduledMessages', scheduledMessages);
458            console.log('הודעה תוזמנה:', date, time);
459            return true;
460        } catch (error) {
461            console.error('שגיאה בתזמון:', error);
462            return false;
463        }
464    }
465
466    // פונקציה למחיקת הודעה מתוזמנת
467    async function deleteScheduledMessage(index) {
468        try {
469            const scheduledMessages = await GM.getValue('scheduledMessages', []);
470            scheduledMessages.splice(index, 1);
471            await GM.setValue('scheduledMessages', scheduledMessages);
472            return true;
473        } catch (error) {
474            console.error('שגיאה במחיקה:', error);
475            return false;
476        }
477    }
478
479    // פונקציה לשליחת הודעה ל-WhatsApp
480    async function sendToWhatsApp(text) {
481        try {
482            const groupLink = await GM.getValue('whatsappGroupLink', '');
483            if (!groupLink || !groupLink.includes('chat.whatsapp.com')) {
484                console.error('אין קישור קבוצה שמור');
485                return false;
486            }
487
488            // קידוד הטקסט ל-URL
489            const encodedText = encodeURIComponent(text);
490            
491            // יצירת URL לשליחה ב-WhatsApp
492            const whatsappUrl = `${groupLink}?text=${encodedText}`;
493            
494            console.log('פותח WhatsApp לשליחת הודעה...');
495            
496            // פתיחת WhatsApp בטאב חדש
497            await GM.openInTab(whatsappUrl, false);
498            
499            return true;
500        } catch (error) {
501            console.error('שגיאה בשליחה ל-WhatsApp:', error);
502            return false;
503        }
504    }
505
506    // פונקציה לבדיקת הודעות מתוזמנות ושליחתן
507    async function checkScheduledMessages() {
508        try {
509            const scheduledMessages = await GM.getValue('scheduledMessages', []);
510            const now = Date.now();
511            
512            const messagesToSend = [];
513            const remainingMessages = [];
514            
515            scheduledMessages.forEach((msg, index) => {
516                if (msg.status === 'pending' && msg.scheduledDateTime <= now) {
517                    messagesToSend.push({ ...msg, index });
518                } else {
519                    remainingMessages.push(msg);
520                }
521            });
522            
523            if (messagesToSend.length > 0) {
524                console.log(`נמצאו ${messagesToSend.length} הודעות לשליחה`);
525                
526                for (const msg of messagesToSend) {
527                    console.log('שולח הודעה:', msg.text.substring(0, 50));
528                    await sendToWhatsApp(msg.text);
529                    
530                    // המתנה של 5 שניות בין הודעות
531                    await new Promise(resolve => setTimeout(resolve, 5000));
532                }
533                
534                // עדכון הרשימה - הסרת הודעות שנשלחו
535                await GM.setValue('scheduledMessages', remainingMessages);
536            }
537        } catch (error) {
538            console.error('שגיאה בבדיקת הודעות מתוזמנות:', error);
539        }
540    }
541
542    // פונקציה ליצירת חלון הפופאפ
543    async function createPopup(messageText, iconElement) {
544        // הסרת פופאפ קיים אם יש
545        const existingPopup = document.querySelector('.tg-to-wa-popup');
546        const existingOverlay = document.querySelector('.tg-to-wa-overlay');
547        if (existingPopup) existingPopup.remove();
548        if (existingOverlay) existingOverlay.remove();
549
550        // יצירת overlay
551        const overlay = document.createElement('div');
552        overlay.className = 'tg-to-wa-overlay';
553        document.body.appendChild(overlay);
554
555        // יצירת הפופאפ
556        const popup = document.createElement('div');
557        popup.className = 'tg-to-wa-popup';
558        
559        // מיקום הפופאפ במרכז המסך
560        popup.style.top = '50%';
561        popup.style.left = '50%';
562        popup.style.transform = 'translate(-50%, -50%)';
563
564        // קבלת קישור הקבוצה השמור - אם אין, שימוש בברירת מחדל
565        const savedGroupLink = await GM.getValue('whatsappGroupLink', 'https://chat.whatsapp.com/JMPxSSgheYNLr5gl4JugR');
566
567        // תוכן הפופאפ
568        popup.innerHTML = `
569            <div class="tg-to-wa-popup-header">
570                <div class="tg-to-wa-popup-title">המרה לתוכן WhatsApp</div>
571                <button class="tg-to-wa-close-btn">×</button>
572            </div>
573            <div class="tg-to-wa-content">${messageText}</div>
574            <div class="tg-to-wa-buttons">
575                <button class="tg-to-wa-btn tg-to-wa-btn-primary" data-action="convert">
576                    🔄 הפוך לתוכן
577                </button>
578                <button class="tg-to-wa-btn tg-to-wa-btn-secondary" data-action="copy">
579                    📋 העתק
580                </button>
581                <button class="tg-to-wa-btn tg-to-wa-btn-secondary" data-action="save">
582                    💾 שמור לרשימה
583                </button>
584            </div>
585            <div class="tg-to-wa-schedule-section">
586                <div class="tg-to-wa-schedule-title">חידודים והנחיות נוספות (אופציונלי)</div>
587                <textarea class="tg-to-wa-input" id="additional-instructions" 
588                          placeholder="לדוגמה: תדגישי את החלק על הסיכונים, תוסיפי דוגמה נוספת, תקצרי את החלק הטכני..."
589                          style="width: 100%; min-height: 80px; resize: vertical; padding: 12px; font-family: inherit; line-height: 1.5;"></textarea>
590            </div>
591            <div class="tg-to-wa-schedule-section">
592                <div class="tg-to-wa-schedule-title">הגדרות קבוצת WhatsApp</div>
593                <input type="text" class="tg-to-wa-input" id="whatsapp-group-link" 
594                       placeholder="https://chat.whatsapp.com/..." 
595                       value="${savedGroupLink}"
596                       style="width: 100%; margin-bottom: 12px;">
597                <button class="tg-to-wa-btn tg-to-wa-btn-secondary" data-action="save-link">
598                    💾 שמור קישור קבוצה
599                </button>
600            </div>
601            <div class="tg-to-wa-schedule-section">
602                <div class="tg-to-wa-schedule-title">תזמון שליחה אוטומטית</div>
603                <div class="tg-to-wa-schedule-inputs">
604                    <input type="date" class="tg-to-wa-input" id="schedule-date" min="${new Date().toISOString().split('T')[0]}">
605                    <input type="time" class="tg-to-wa-input" id="schedule-time">
606                </div>
607                <button class="tg-to-wa-btn tg-to-wa-btn-primary" data-action="schedule">
608                    ⏰ תזמן שליחה אוטומטית
609                </button>
610                <div class="tg-to-wa-scheduled-list" id="scheduled-list"></div>
611            </div>
612        `;
613
614        document.body.appendChild(popup);
615
616        // טעינת רשימת הודעות מתוזמנות
617        await loadScheduledMessages();
618
619        // הוספת מאזינים לכפתורים
620        const closeBtn = popup.querySelector('.tg-to-wa-close-btn');
621        const convertBtn = popup.querySelector('[data-action="convert"]');
622        const copyBtn = popup.querySelector('[data-action="copy"]');
623        const saveBtn = popup.querySelector('[data-action="save"]');
624        const saveLinkBtn = popup.querySelector('[data-action="save-link"]');
625        const scheduleBtn = popup.querySelector('[data-action="schedule"]');
626        const contentDiv = popup.querySelector('.tg-to-wa-content');
627        const groupLinkInput = document.getElementById('whatsapp-group-link');
628
629        // סגירת הפופאפ
630        const closePopup = () => {
631            popup.remove();
632            overlay.remove();
633        };
634
635        closeBtn.addEventListener('click', closePopup);
636        overlay.addEventListener('click', closePopup);
637
638        // שמירת קישור קבוצה
639        saveLinkBtn.addEventListener('click', async () => {
640            const groupLink = groupLinkInput.value.trim();
641            if (!groupLink) {
642                showSuccessMessage('נא להזין קישור קבוצה ⚠️');
643                return;
644            }
645            if (!groupLink.includes('chat.whatsapp.com')) {
646                showSuccessMessage('קישור לא תקין ❌');
647                return;
648            }
649            await GM.setValue('whatsappGroupLink', groupLink);
650            showSuccessMessage('קישור הקבוצה נשמר! ✅');
651        });
652
653        // המרת תוכן
654        convertBtn.addEventListener('click', async () => {
655            convertBtn.disabled = true;
656            convertBtn.innerHTML = '<span class="tg-to-wa-loading"></span> ממיר...';
657            
658            try {
659                const convertedText = await convertContent(messageText);
660                contentDiv.textContent = convertedText;
661                showSuccessMessage('התוכן הומר בהצלחה! ✅');
662            } catch (error) {
663                showSuccessMessage('שגיאה בהמרה ❌');
664            } finally {
665                convertBtn.disabled = false;
666                convertBtn.innerHTML = '🔄 הפוך לתוכן';
667            }
668        });
669
670        // העתקה
671        copyBtn.addEventListener('click', async () => {
672            const currentText = contentDiv.textContent;
673            const success = await copyToClipboard(currentText);
674            if (success) {
675                showSuccessMessage('הועתק ללוח! 📋');
676            } else {
677                showSuccessMessage('שגיאה בהעתקה ❌');
678            }
679        });
680
681        // שמירה לרשימה
682        saveBtn.addEventListener('click', async () => {
683            const currentText = contentDiv.textContent;
684            const success = await saveToList(currentText);
685            if (success) {
686                showSuccessMessage('נשמר לרשימה! 💾');
687            } else {
688                showSuccessMessage('שגיאה בשמירה ❌');
689            }
690        });
691
692        // תזמון
693        scheduleBtn.addEventListener('click', async () => {
694            const dateInput = document.getElementById('schedule-date');
695            const timeInput = document.getElementById('schedule-time');
696            const currentText = contentDiv.textContent;
697            const groupLink = groupLinkInput.value.trim();
698
699            if (!dateInput.value || !timeInput.value) {
700                showSuccessMessage('נא למלא תאריך ושעה ⚠️');
701                return;
702            }
703
704            if (!groupLink || !groupLink.includes('chat.whatsapp.com')) {
705                showSuccessMessage('נא לשמור קישור קבוצה תקין ⚠️');
706                return;
707            }
708
709            const success = await scheduleMessage(currentText, dateInput.value, timeInput.value);
710            if (success) {
711                showSuccessMessage('הודעה תוזמנה לשליחה אוטומטית! ⏰');
712                dateInput.value = '';
713                timeInput.value = '';
714                await loadScheduledMessages();
715            } else {
716                showSuccessMessage('שגיאה בתזמון ❌');
717            }
718        });
719    }
720
721    // פונקציה לטעינת רשימת הודעות מתוזמנות
722    async function loadScheduledMessages() {
723        const scheduledList = document.getElementById('scheduled-list');
724        if (!scheduledList) return;
725
726        const scheduledMessages = await GM.getValue('scheduledMessages', []);
727        
728        if (scheduledMessages.length === 0) {
729            scheduledList.innerHTML = '<div style="text-align: center; color: #999; padding: 20px;">אין הודעות מתוזמנות</div>';
730            return;
731        }
732
733        scheduledList.innerHTML = scheduledMessages.map((msg, index) => `
734            <div class="tg-to-wa-scheduled-item">
735                <div class="tg-to-wa-scheduled-info">
736                    <div class="tg-to-wa-scheduled-time">${msg.scheduledDate} ${msg.scheduledTime}</div>
737                    <div class="tg-to-wa-scheduled-preview">${msg.text.substring(0, 50)}...</div>
738                </div>
739                <button class="tg-to-wa-delete-btn" data-index="${index}">מחק</button>
740            </div>
741        `).join('');
742
743        // הוספת מאזינים למחיקה
744        scheduledList.querySelectorAll('.tg-to-wa-delete-btn').forEach(btn => {
745            btn.addEventListener('click', async (e) => {
746                const index = parseInt(e.target.dataset.index);
747                const success = await deleteScheduledMessage(index);
748                if (success) {
749                    showSuccessMessage('הודעה נמחקה! 🗑️');
750                    await loadScheduledMessages();
751                }
752            });
753        });
754    }
755
756    // פונקציה להוספת אייקון להודעה
757    function addIconToMessage(messageElement) {
758        // בדיקה אם כבר יש אייקון
759        if (messageElement.querySelector('.tg-to-wa-icon')) {
760            return;
761        }
762
763        // יצירת wrapper אם אין
764        if (!messageElement.classList.contains('message-wrapper')) {
765            messageElement.classList.add('message-wrapper');
766        }
767
768        // יצירת האייקון
769        const icon = document.createElement('div');
770        icon.className = 'tg-to-wa-icon';
771        icon.innerHTML = `
772            <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
773                <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/>
774            </svg>
775        `;
776
777        // הוספת מאזין לחיצה
778        icon.addEventListener('click', async (e) => {
779            e.stopPropagation();
780            const messageText = extractMessageText(messageElement);
781            await createPopup(messageText, icon);
782        });
783
784        messageElement.style.position = 'relative';
785        messageElement.appendChild(icon);
786    }
787
788    // פונקציה לסריקת הודעות
789    function scanMessages() {
790        console.log('סורק הודעות...');
791        
792        // חיפוש רק הודעות בתוך אזור השיחה הפעיל
793        const messagesContainer = document.querySelector('.MessageList, .messages-container, [class*="MessageList"]');
794        if (!messagesContainer) {
795            console.log('לא נמצא אזור הודעות');
796            return;
797        }
798        
799        // חיפוש רק הודעות ראשיות בתוך אזור השיחה
800        const messages = messagesContainer.querySelectorAll('.Message[data-message-id]');
801        
802        console.log('נמצאו', messages.length, 'הודעות');
803        
804        messages.forEach(msg => {
805            // בדיקה שזו הודעה אמיתית עם טקסט
806            const hasText = msg.textContent && msg.textContent.trim().length > 0;
807            // בדיקה שאין כבר אייקון
808            const hasIcon = msg.querySelector('.tg-to-wa-icon') !== null;
809            
810            if (hasText && !hasIcon) {
811                addIconToMessage(msg);
812            }
813        });
814    }
815
816    // פונקציה debounce
817    function debounce(func, wait) {
818        let timeout;
819        return function executedFunction(...args) {
820            const later = () => {
821                clearTimeout(timeout);
822                func(...args);
823            };
824            clearTimeout(timeout);
825            timeout = setTimeout(later, wait);
826        };
827    }
828
829    // MutationObserver לזיהוי הודעות חדשות
830    const debouncedScan = debounce(scanMessages, 500);
831    
832    const observer = new MutationObserver((mutations) => {
833        debouncedScan();
834    });
835
836    // פונקציית אתחול
837    function init() {
838        console.log('Telegram to WhatsApp Converter - מאתחל...');
839        
840        // המתנה לטעינת הדף
841        if (document.readyState === 'loading') {
842            document.addEventListener('DOMContentLoaded', init);
843            return;
844        }
845
846        // סריקה ראשונית
847        setTimeout(scanMessages, 2000);
848
849        // התחלת ניטור שינויים
850        observer.observe(document.body, {
851            childList: true,
852            subtree: true
853        });
854
855        // בדיקת הודעות מתוזמנות כל דקה
856        setInterval(checkScheduledMessages, 60000);
857        
858        // בדיקה ראשונית של הודעות מתוזמנות
859        setTimeout(checkScheduledMessages, 5000);
860
861        console.log('Telegram to WhatsApp Converter - פעיל! ✅');
862    }
863
864    // הפעלה
865    init();
866})();