דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. כללי - עזרה הדדית
  3. להורדה | סקריפט לTampermonkey שמוסיף כפתורי ai בפורום

להורדה | סקריפט לTampermonkey שמוסיף כפתורי ai בפורום

מתוזמן נעוץ נעול הועבר כללי - עזרה הדדית
8 פוסטים 7 כותבים 92 צפיות 6 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • איש אמתא מנותק
    איש אמתא מנותק
    איש אמת
    מדריכים
    כתב נערך לאחרונה על ידי איש אמת
    #1

    שימו לב! עולה כסף!!
    כנראה הייתי ממש משועמם אז יצרתי עם ai סקריפט שמוסיף 2 כפתורי עזרה מ ai
    צילום מסך 2025-12-23 ב-14.49.02.png

    אחד עונה תשובה לפוסט, ואחד מסביר את הפוסט.
    לעניות דעתי זה ממש לא נצרך אבל ביקשו ממני להעלות אז יאללה מה אכפת לי.
    להתקנת הסקריפט התקינו Tampermonkey, תעברו את התהליך של לאשר, מצב מפתח, וכו וצרו סקריפט חדש עם הקוד שבספוילר, אל תשכחו להדביק את מפתח ה api שלכם מגמיני בשורה 15.
    ניתן לשחק עם המודלים ולתת הנחיה יותר ברורה עם הרצונות שלכם...

    // ==UserScript==
    // @name         NodeBB Gemini Pro (Summarizer + Replier)
    // @namespace    http://tampermonkey.net/
    // @version      4.0
    // @description  הוספת כפתורי גמיני (סיכום + ניסוח תשובה) בעיצוב קומפקטי ל-mitmachim.top
    // @author       You
    // @match        https://mitmachim.top/*
    // @grant        GM_xmlhttpRequest
    // @grant        GM_addStyle
    // ==/UserScript==
    
    (function() {
        'use strict';
    
        // --- הגדרות ---
        // אנא הדבק כאן את המפתח שלך במקום הטקסט המופיע
        const API_KEY = 'YOUR_API_KEY_HERE'; 
        
        // המודל שביקשת. אם תקבל שגיאה 404, נסה לשנות ל: 'gemini-1.5-flash'
        const MODEL = 'gemini-flash-lite-latest'; 
    
        // --- עיצוב CSS (כולל גלילה ועיצוב קומפקטי) ---
        GM_addStyle(`
            /* כפתורים */
            .gemini-btn-wrapper { display: inline-flex; gap: 5px; margin-left: 8px; }
            .gemini-btn {
                transition: all 0.2s;
                border: 1px solid transparent;
            }
            .gemini-btn:hover { background-color: rgba(0,0,0,0.05); border-radius: 4px; }
            
            /* צבעים לאייקונים */
            .gemini-icon-magic { color: #8e44ad; } /* סגול לסיכום */
            .gemini-icon-reply { color: #27ae60; } /* ירוק לתשובה */
    
            /* תיבת התוצאה - קומפקטית ונגללת */
            .gemini-result-box {
                background: var(--bs-body-bg, #ffffff);
                border: 1px solid #e0e0e0;
                border-right: 4px solid #8e44ad;
                border-radius: 6px;
                padding: 15px;
                margin-top: 10px;
                box-shadow: 0 4px 12px rgba(0,0,0,0.1);
                font-size: 14px;
                line-height: 1.5;
                color: var(--bs-body-color, #333);
                position: relative;
                
                /* הגדרות גודל וגלילה */
                max-height: 300px; /* גובה מקסימלי */
                overflow-y: auto;  /* פס גלילה אם הטקסט ארוך */
                scrollbar-width: thin; /* פס גלילה דק */
            }
    
            /* עיצוב פס הגלילה */
            .gemini-result-box::-webkit-scrollbar { width: 6px; }
            .gemini-result-box::-webkit-scrollbar-thumb { background-color: #ccc; border-radius: 3px; }
    
            .gemini-close {
                position: sticky; /* נשאר למעלה בגלילה */
                top: 0;
                float: left;
                cursor: pointer;
                color: #999;
                font-size: 16px;
                background: inherit;
                padding: 0 5px;
                margin-left: -5px;
            }
            .gemini-close:hover { color: red; }
    
            .gemini-loading { display: flex; align-items: center; gap: 8px; color: #666; font-style: italic; }
            
            /* עיצוב התוכן */
            .gemini-content h3 { font-size: 1.1em; margin: 8px 0; font-weight: bold; }
            .gemini-content ul { padding-right: 20px; margin: 5px 0; }
            .gemini-content strong { font-weight: 600; }
        `);
    
        // --- אתחול ---
        function init() {
            setTimeout(addButtons, 1000);
            const observer = new MutationObserver(() => addButtons());
            observer.observe(document.body, { childList: true, subtree: true });
        }
    
        // --- הוספת הכפתורים ---
        function addButtons() {
            // בודק פוסטים שלא טופלו
            const posts = document.querySelectorAll('.post-container-parent:not(.gemini-processed)');
    
            posts.forEach(post => {
                post.classList.add('gemini-processed');
                const toolbar = post.querySelector('.post-tools');
    
                if (toolbar) {
                    // מעטפת לכפתורים
                    const wrapper = document.createElement('span');
                    wrapper.className = 'gemini-btn-wrapper';
    
                    // כפתור 1: סיכום והסבר (✨)
                    const btnExplain = createButton('fa-magic', 'gemini-icon-magic', 'סיכום והסבר', () => handleGeminiAction(post, 'explain'));
                    
                    // כפתור 2: יצירת תשובה (✒️)
                    const btnReply = createButton('fa-pencil', 'gemini-icon-reply', 'נסח תשובה', () => handleGeminiAction(post, 'reply'));
    
                    wrapper.appendChild(btnReply);
                    wrapper.appendChild(btnExplain);
                    
                    toolbar.prepend(wrapper);
                }
            });
        }
    
        function createButton(iconClass, colorClass, title, onClick) {
            const btn = document.createElement('a');
            btn.className = 'btn btn-ghost btn-sm gemini-btn';
            btn.href = '#';
            btn.title = title;
            btn.innerHTML = `<i class="fa ${iconClass} ${colorClass}"></i>`;
            btn.onclick = (e) => {
                e.preventDefault();
                onClick();
            };
            return btn;
        }
    
        // --- לוגיקה ראשית ---
        async function handleGeminiAction(postContainer, mode) {
            const contentArea = postContainer.querySelector('[component="post/content"]');
            if (!contentArea) return;
    
            // סגירת חלונית קיימת אם יש
            const existingBox = contentArea.querySelector('.gemini-result-box');
            if (existingBox) existingBox.remove();
    
            const textToProcess = contentArea.innerText.trim();
    
            // יצירת חלונית טעינה
            const resultBox = document.createElement('div');
            resultBox.className = 'gemini-result-box';
            const loadingText = mode === 'explain' ? 'מסכם ומסביר...' : 'מנסח תשובה...';
            resultBox.innerHTML = `
                <div class="gemini-loading">
                    <span>⚡</span><span>${loadingText}</span>
                </div>
            `;
            contentArea.appendChild(resultBox);
    
            try {
                // בחירת ההנחיה (Prompt) המתאימה
                let prompt = '';
                if (mode === 'explain') {
                    prompt = `
                    תפקידך לסייע למשתמש להבין פוסט בפורום.
                    הטקסט: "${textToProcess}"
                    1. סכם את הפוסט בקיצור נמרץ.
                    2. הסבר מושגים טכניים או סלנג אם יש.
                    `;
                } else {
                    prompt = `
                    אתה משתמש מומחה בפורום מקצועי ("מתמחים טופ").
                    כתוב נוסח לתגובה עבור הפוסט הבא.
                    התגובה צריכה להיות:
                    1. מועילה ומקצועית.
                    2. מנומסת ומכבדת.
                    3. בעברית.
                    4. אם זו שאלה טכנית, הצע כיוון לפתרון (אם אין מספיק מידע, תשאל שאלות מנחות).
                    
                    הפוסט עליו עונים: "${textToProcess}"
                    `;
                }
    
                const responseText = await callGeminiAPI(prompt);
                const formattedHTML = formatMarkdown(responseText);
    
                // שינוי צבע המסגרת לפי סוג הפעולה (ירוק לתשובה, סגול להסבר)
                const borderColor = mode === 'explain' ? '#8e44ad' : '#27ae60';
                resultBox.style.borderRightColor = borderColor;
    
                resultBox.innerHTML = `
                    <div class="gemini-close" onclick="this.parentElement.remove()">✖</div>
                    <div class="gemini-content">${formattedHTML}</div>
                    <div style="margin-top:10px; font-size:11px; color:#aaa;">
                        ${mode === 'explain' ? 'סיכום' : 'הצעת תשובה'} (מודל: ${MODEL})
                    </div>
                `;
                
            } catch (error) {
                console.error(error);
                resultBox.innerHTML = `
                    <div class="gemini-close" onclick="this.parentElement.remove()">✖</div>
                    <div style="color:red">שגיאה: ${error}</div>
                `;
            }
        }
    
        // --- תקשורת עם גוגל ---
        function callGeminiAPI(promptText) {
            return new Promise((resolve, reject) => {
                GM_xmlhttpRequest({
                    method: "POST",
                    url: `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent?key=${API_KEY}`,
                    headers: { "Content-Type": "application/json" },
                    data: JSON.stringify({
                        contents: [{ parts: [{ text: promptText }] }]
                    }),
                    onload: function(response) {
                        if (response.status >= 200 && response.status < 300) {
                            try {
                                const json = JSON.parse(response.responseText);
                                // בדיקה אם המודל החזיר תוכן
                                if (json.candidates && json.candidates[0].content) {
                                    resolve(json.candidates[0].content.parts[0].text);
                                } else {
                                    reject("המודל לא החזיר טקסט (אולי תוכן חסום?)");
                                }
                            } catch (e) { reject("שגיאה בפענוח JSON"); }
                        } else { reject(`שגיאת שרת: ${response.status}`); }
                    },
                    onerror: function(err) { reject("שגיאת חיבור"); }
                });
            });
        }
    
        function formatMarkdown(text) {
            return text
                .replace(/^### (.*$)/gim, '<h3>$1</h3>')
                .replace(/^## (.*$)/gim, '<h3>$1</h3>')
                .replace(/\*\*(.*?)\*\*/gim, '<strong>$1</strong>')
                .replace(/^\* (.*$)/gim, '<ul><li>$1</li></ul>')
                .replace(/<\/ul>\s*<ul>/gim, '')
                .replace(/\n/gim, '<br>');
        }
    
        init();
    })();
    

    מוקדש ל @יאיר-דניאל וכל שוכני השרשור הזה

    דוגמה קטנה של סיכום הפוסט (לא רואים הכול כי זה חלונית נגללת)
    צילום מסך 2025-12-23 ב-15.03.20.png

    אני יודע שאני חושב שאני יודע.

    פרוזיפ י 2 תגובות תגובה אחרונה
    5
    • יאיר דניאלי מנותק
      יאיר דניאלי מנותק
      יאיר דניאל
      כתב נערך לאחרונה על ידי
      #2

      למה עולה כסף? יש API חינמי

      תגובה 1 תגובה אחרונה
      0
      • שלמה רביבש מנותק
        שלמה רביבש מנותק
        שלמה רביב
        כתב נערך לאחרונה על ידי
        #3

        @איש-אמת אחלה רק אתה לא חושב שזה יגרום לעריכות בAI?
        הפורום ממש נגד זה

        תגובה 1 תגובה אחרונה
        2
        • איש אמתא איש אמת

          שימו לב! עולה כסף!!
          כנראה הייתי ממש משועמם אז יצרתי עם ai סקריפט שמוסיף 2 כפתורי עזרה מ ai
          צילום מסך 2025-12-23 ב-14.49.02.png

          אחד עונה תשובה לפוסט, ואחד מסביר את הפוסט.
          לעניות דעתי זה ממש לא נצרך אבל ביקשו ממני להעלות אז יאללה מה אכפת לי.
          להתקנת הסקריפט התקינו Tampermonkey, תעברו את התהליך של לאשר, מצב מפתח, וכו וצרו סקריפט חדש עם הקוד שבספוילר, אל תשכחו להדביק את מפתח ה api שלכם מגמיני בשורה 15.
          ניתן לשחק עם המודלים ולתת הנחיה יותר ברורה עם הרצונות שלכם...

          // ==UserScript==
          // @name         NodeBB Gemini Pro (Summarizer + Replier)
          // @namespace    http://tampermonkey.net/
          // @version      4.0
          // @description  הוספת כפתורי גמיני (סיכום + ניסוח תשובה) בעיצוב קומפקטי ל-mitmachim.top
          // @author       You
          // @match        https://mitmachim.top/*
          // @grant        GM_xmlhttpRequest
          // @grant        GM_addStyle
          // ==/UserScript==
          
          (function() {
              'use strict';
          
              // --- הגדרות ---
              // אנא הדבק כאן את המפתח שלך במקום הטקסט המופיע
              const API_KEY = 'YOUR_API_KEY_HERE'; 
              
              // המודל שביקשת. אם תקבל שגיאה 404, נסה לשנות ל: 'gemini-1.5-flash'
              const MODEL = 'gemini-flash-lite-latest'; 
          
              // --- עיצוב CSS (כולל גלילה ועיצוב קומפקטי) ---
              GM_addStyle(`
                  /* כפתורים */
                  .gemini-btn-wrapper { display: inline-flex; gap: 5px; margin-left: 8px; }
                  .gemini-btn {
                      transition: all 0.2s;
                      border: 1px solid transparent;
                  }
                  .gemini-btn:hover { background-color: rgba(0,0,0,0.05); border-radius: 4px; }
                  
                  /* צבעים לאייקונים */
                  .gemini-icon-magic { color: #8e44ad; } /* סגול לסיכום */
                  .gemini-icon-reply { color: #27ae60; } /* ירוק לתשובה */
          
                  /* תיבת התוצאה - קומפקטית ונגללת */
                  .gemini-result-box {
                      background: var(--bs-body-bg, #ffffff);
                      border: 1px solid #e0e0e0;
                      border-right: 4px solid #8e44ad;
                      border-radius: 6px;
                      padding: 15px;
                      margin-top: 10px;
                      box-shadow: 0 4px 12px rgba(0,0,0,0.1);
                      font-size: 14px;
                      line-height: 1.5;
                      color: var(--bs-body-color, #333);
                      position: relative;
                      
                      /* הגדרות גודל וגלילה */
                      max-height: 300px; /* גובה מקסימלי */
                      overflow-y: auto;  /* פס גלילה אם הטקסט ארוך */
                      scrollbar-width: thin; /* פס גלילה דק */
                  }
          
                  /* עיצוב פס הגלילה */
                  .gemini-result-box::-webkit-scrollbar { width: 6px; }
                  .gemini-result-box::-webkit-scrollbar-thumb { background-color: #ccc; border-radius: 3px; }
          
                  .gemini-close {
                      position: sticky; /* נשאר למעלה בגלילה */
                      top: 0;
                      float: left;
                      cursor: pointer;
                      color: #999;
                      font-size: 16px;
                      background: inherit;
                      padding: 0 5px;
                      margin-left: -5px;
                  }
                  .gemini-close:hover { color: red; }
          
                  .gemini-loading { display: flex; align-items: center; gap: 8px; color: #666; font-style: italic; }
                  
                  /* עיצוב התוכן */
                  .gemini-content h3 { font-size: 1.1em; margin: 8px 0; font-weight: bold; }
                  .gemini-content ul { padding-right: 20px; margin: 5px 0; }
                  .gemini-content strong { font-weight: 600; }
              `);
          
              // --- אתחול ---
              function init() {
                  setTimeout(addButtons, 1000);
                  const observer = new MutationObserver(() => addButtons());
                  observer.observe(document.body, { childList: true, subtree: true });
              }
          
              // --- הוספת הכפתורים ---
              function addButtons() {
                  // בודק פוסטים שלא טופלו
                  const posts = document.querySelectorAll('.post-container-parent:not(.gemini-processed)');
          
                  posts.forEach(post => {
                      post.classList.add('gemini-processed');
                      const toolbar = post.querySelector('.post-tools');
          
                      if (toolbar) {
                          // מעטפת לכפתורים
                          const wrapper = document.createElement('span');
                          wrapper.className = 'gemini-btn-wrapper';
          
                          // כפתור 1: סיכום והסבר (✨)
                          const btnExplain = createButton('fa-magic', 'gemini-icon-magic', 'סיכום והסבר', () => handleGeminiAction(post, 'explain'));
                          
                          // כפתור 2: יצירת תשובה (✒️)
                          const btnReply = createButton('fa-pencil', 'gemini-icon-reply', 'נסח תשובה', () => handleGeminiAction(post, 'reply'));
          
                          wrapper.appendChild(btnReply);
                          wrapper.appendChild(btnExplain);
                          
                          toolbar.prepend(wrapper);
                      }
                  });
              }
          
              function createButton(iconClass, colorClass, title, onClick) {
                  const btn = document.createElement('a');
                  btn.className = 'btn btn-ghost btn-sm gemini-btn';
                  btn.href = '#';
                  btn.title = title;
                  btn.innerHTML = `<i class="fa ${iconClass} ${colorClass}"></i>`;
                  btn.onclick = (e) => {
                      e.preventDefault();
                      onClick();
                  };
                  return btn;
              }
          
              // --- לוגיקה ראשית ---
              async function handleGeminiAction(postContainer, mode) {
                  const contentArea = postContainer.querySelector('[component="post/content"]');
                  if (!contentArea) return;
          
                  // סגירת חלונית קיימת אם יש
                  const existingBox = contentArea.querySelector('.gemini-result-box');
                  if (existingBox) existingBox.remove();
          
                  const textToProcess = contentArea.innerText.trim();
          
                  // יצירת חלונית טעינה
                  const resultBox = document.createElement('div');
                  resultBox.className = 'gemini-result-box';
                  const loadingText = mode === 'explain' ? 'מסכם ומסביר...' : 'מנסח תשובה...';
                  resultBox.innerHTML = `
                      <div class="gemini-loading">
                          <span>⚡</span><span>${loadingText}</span>
                      </div>
                  `;
                  contentArea.appendChild(resultBox);
          
                  try {
                      // בחירת ההנחיה (Prompt) המתאימה
                      let prompt = '';
                      if (mode === 'explain') {
                          prompt = `
                          תפקידך לסייע למשתמש להבין פוסט בפורום.
                          הטקסט: "${textToProcess}"
                          1. סכם את הפוסט בקיצור נמרץ.
                          2. הסבר מושגים טכניים או סלנג אם יש.
                          `;
                      } else {
                          prompt = `
                          אתה משתמש מומחה בפורום מקצועי ("מתמחים טופ").
                          כתוב נוסח לתגובה עבור הפוסט הבא.
                          התגובה צריכה להיות:
                          1. מועילה ומקצועית.
                          2. מנומסת ומכבדת.
                          3. בעברית.
                          4. אם זו שאלה טכנית, הצע כיוון לפתרון (אם אין מספיק מידע, תשאל שאלות מנחות).
                          
                          הפוסט עליו עונים: "${textToProcess}"
                          `;
                      }
          
                      const responseText = await callGeminiAPI(prompt);
                      const formattedHTML = formatMarkdown(responseText);
          
                      // שינוי צבע המסגרת לפי סוג הפעולה (ירוק לתשובה, סגול להסבר)
                      const borderColor = mode === 'explain' ? '#8e44ad' : '#27ae60';
                      resultBox.style.borderRightColor = borderColor;
          
                      resultBox.innerHTML = `
                          <div class="gemini-close" onclick="this.parentElement.remove()">✖</div>
                          <div class="gemini-content">${formattedHTML}</div>
                          <div style="margin-top:10px; font-size:11px; color:#aaa;">
                              ${mode === 'explain' ? 'סיכום' : 'הצעת תשובה'} (מודל: ${MODEL})
                          </div>
                      `;
                      
                  } catch (error) {
                      console.error(error);
                      resultBox.innerHTML = `
                          <div class="gemini-close" onclick="this.parentElement.remove()">✖</div>
                          <div style="color:red">שגיאה: ${error}</div>
                      `;
                  }
              }
          
              // --- תקשורת עם גוגל ---
              function callGeminiAPI(promptText) {
                  return new Promise((resolve, reject) => {
                      GM_xmlhttpRequest({
                          method: "POST",
                          url: `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent?key=${API_KEY}`,
                          headers: { "Content-Type": "application/json" },
                          data: JSON.stringify({
                              contents: [{ parts: [{ text: promptText }] }]
                          }),
                          onload: function(response) {
                              if (response.status >= 200 && response.status < 300) {
                                  try {
                                      const json = JSON.parse(response.responseText);
                                      // בדיקה אם המודל החזיר תוכן
                                      if (json.candidates && json.candidates[0].content) {
                                          resolve(json.candidates[0].content.parts[0].text);
                                      } else {
                                          reject("המודל לא החזיר טקסט (אולי תוכן חסום?)");
                                      }
                                  } catch (e) { reject("שגיאה בפענוח JSON"); }
                              } else { reject(`שגיאת שרת: ${response.status}`); }
                          },
                          onerror: function(err) { reject("שגיאת חיבור"); }
                      });
                  });
              }
          
              function formatMarkdown(text) {
                  return text
                      .replace(/^### (.*$)/gim, '<h3>$1</h3>')
                      .replace(/^## (.*$)/gim, '<h3>$1</h3>')
                      .replace(/\*\*(.*?)\*\*/gim, '<strong>$1</strong>')
                      .replace(/^\* (.*$)/gim, '<ul><li>$1</li></ul>')
                      .replace(/<\/ul>\s*<ul>/gim, '')
                      .replace(/\n/gim, '<br>');
              }
          
              init();
          })();
          

          מוקדש ל @יאיר-דניאל וכל שוכני השרשור הזה

          דוגמה קטנה של סיכום הפוסט (לא רואים הכול כי זה חלונית נגללת)
          צילום מסך 2025-12-23 ב-15.03.20.png

          פרוזיפ מחובר
          פרוזיפ מחובר
          פרוזי
          מדריכים עימוד
          כתב נערך לאחרונה על ידי
          #4

          @איש-אמת אתה יכול להעלות את הסקריפט לגיטהב וכך כל אחד שיש לו Tampermonkey יוכל להוסיף את זה אוטומטי מבלי להעתיק את הקוד...
          כמובן שאם אתה רוצה לשדרג את זה קצת אתה יכול ג"כ להוסיף פונקציה ממשקית להוספת ה API כך שלא יצטרכו להתעסק עם הקוד...
          סתם סקרון על איזה מודל הוא יושב?

          שמח לעזור

          O תגובה 1 תגובה אחרונה
          0
          • פרוזיפ פרוזי

            @איש-אמת אתה יכול להעלות את הסקריפט לגיטהב וכך כל אחד שיש לו Tampermonkey יוכל להוסיף את זה אוטומטי מבלי להעתיק את הקוד...
            כמובן שאם אתה רוצה לשדרג את זה קצת אתה יכול ג"כ להוסיף פונקציה ממשקית להוספת ה API כך שלא יצטרכו להתעסק עם הקוד...
            סתם סקרון על איזה מודל הוא יושב?

            O מנותק
            O מנותק
            oryadaniely
            כתב נערך לאחרונה על ידי oryadaniely
            #5

            @פרוזי gemini-flash-lite-latest
            אגב עדיף מאוד לשדרג... זה לכא' ישאר חינמי/מחיר אפסי גם במודל ההכי יקר שקיים

            תגובה 1 תגובה אחרונה
            1
            • איש אמתא איש אמת

              שימו לב! עולה כסף!!
              כנראה הייתי ממש משועמם אז יצרתי עם ai סקריפט שמוסיף 2 כפתורי עזרה מ ai
              צילום מסך 2025-12-23 ב-14.49.02.png

              אחד עונה תשובה לפוסט, ואחד מסביר את הפוסט.
              לעניות דעתי זה ממש לא נצרך אבל ביקשו ממני להעלות אז יאללה מה אכפת לי.
              להתקנת הסקריפט התקינו Tampermonkey, תעברו את התהליך של לאשר, מצב מפתח, וכו וצרו סקריפט חדש עם הקוד שבספוילר, אל תשכחו להדביק את מפתח ה api שלכם מגמיני בשורה 15.
              ניתן לשחק עם המודלים ולתת הנחיה יותר ברורה עם הרצונות שלכם...

              // ==UserScript==
              // @name         NodeBB Gemini Pro (Summarizer + Replier)
              // @namespace    http://tampermonkey.net/
              // @version      4.0
              // @description  הוספת כפתורי גמיני (סיכום + ניסוח תשובה) בעיצוב קומפקטי ל-mitmachim.top
              // @author       You
              // @match        https://mitmachim.top/*
              // @grant        GM_xmlhttpRequest
              // @grant        GM_addStyle
              // ==/UserScript==
              
              (function() {
                  'use strict';
              
                  // --- הגדרות ---
                  // אנא הדבק כאן את המפתח שלך במקום הטקסט המופיע
                  const API_KEY = 'YOUR_API_KEY_HERE'; 
                  
                  // המודל שביקשת. אם תקבל שגיאה 404, נסה לשנות ל: 'gemini-1.5-flash'
                  const MODEL = 'gemini-flash-lite-latest'; 
              
                  // --- עיצוב CSS (כולל גלילה ועיצוב קומפקטי) ---
                  GM_addStyle(`
                      /* כפתורים */
                      .gemini-btn-wrapper { display: inline-flex; gap: 5px; margin-left: 8px; }
                      .gemini-btn {
                          transition: all 0.2s;
                          border: 1px solid transparent;
                      }
                      .gemini-btn:hover { background-color: rgba(0,0,0,0.05); border-radius: 4px; }
                      
                      /* צבעים לאייקונים */
                      .gemini-icon-magic { color: #8e44ad; } /* סגול לסיכום */
                      .gemini-icon-reply { color: #27ae60; } /* ירוק לתשובה */
              
                      /* תיבת התוצאה - קומפקטית ונגללת */
                      .gemini-result-box {
                          background: var(--bs-body-bg, #ffffff);
                          border: 1px solid #e0e0e0;
                          border-right: 4px solid #8e44ad;
                          border-radius: 6px;
                          padding: 15px;
                          margin-top: 10px;
                          box-shadow: 0 4px 12px rgba(0,0,0,0.1);
                          font-size: 14px;
                          line-height: 1.5;
                          color: var(--bs-body-color, #333);
                          position: relative;
                          
                          /* הגדרות גודל וגלילה */
                          max-height: 300px; /* גובה מקסימלי */
                          overflow-y: auto;  /* פס גלילה אם הטקסט ארוך */
                          scrollbar-width: thin; /* פס גלילה דק */
                      }
              
                      /* עיצוב פס הגלילה */
                      .gemini-result-box::-webkit-scrollbar { width: 6px; }
                      .gemini-result-box::-webkit-scrollbar-thumb { background-color: #ccc; border-radius: 3px; }
              
                      .gemini-close {
                          position: sticky; /* נשאר למעלה בגלילה */
                          top: 0;
                          float: left;
                          cursor: pointer;
                          color: #999;
                          font-size: 16px;
                          background: inherit;
                          padding: 0 5px;
                          margin-left: -5px;
                      }
                      .gemini-close:hover { color: red; }
              
                      .gemini-loading { display: flex; align-items: center; gap: 8px; color: #666; font-style: italic; }
                      
                      /* עיצוב התוכן */
                      .gemini-content h3 { font-size: 1.1em; margin: 8px 0; font-weight: bold; }
                      .gemini-content ul { padding-right: 20px; margin: 5px 0; }
                      .gemini-content strong { font-weight: 600; }
                  `);
              
                  // --- אתחול ---
                  function init() {
                      setTimeout(addButtons, 1000);
                      const observer = new MutationObserver(() => addButtons());
                      observer.observe(document.body, { childList: true, subtree: true });
                  }
              
                  // --- הוספת הכפתורים ---
                  function addButtons() {
                      // בודק פוסטים שלא טופלו
                      const posts = document.querySelectorAll('.post-container-parent:not(.gemini-processed)');
              
                      posts.forEach(post => {
                          post.classList.add('gemini-processed');
                          const toolbar = post.querySelector('.post-tools');
              
                          if (toolbar) {
                              // מעטפת לכפתורים
                              const wrapper = document.createElement('span');
                              wrapper.className = 'gemini-btn-wrapper';
              
                              // כפתור 1: סיכום והסבר (✨)
                              const btnExplain = createButton('fa-magic', 'gemini-icon-magic', 'סיכום והסבר', () => handleGeminiAction(post, 'explain'));
                              
                              // כפתור 2: יצירת תשובה (✒️)
                              const btnReply = createButton('fa-pencil', 'gemini-icon-reply', 'נסח תשובה', () => handleGeminiAction(post, 'reply'));
              
                              wrapper.appendChild(btnReply);
                              wrapper.appendChild(btnExplain);
                              
                              toolbar.prepend(wrapper);
                          }
                      });
                  }
              
                  function createButton(iconClass, colorClass, title, onClick) {
                      const btn = document.createElement('a');
                      btn.className = 'btn btn-ghost btn-sm gemini-btn';
                      btn.href = '#';
                      btn.title = title;
                      btn.innerHTML = `<i class="fa ${iconClass} ${colorClass}"></i>`;
                      btn.onclick = (e) => {
                          e.preventDefault();
                          onClick();
                      };
                      return btn;
                  }
              
                  // --- לוגיקה ראשית ---
                  async function handleGeminiAction(postContainer, mode) {
                      const contentArea = postContainer.querySelector('[component="post/content"]');
                      if (!contentArea) return;
              
                      // סגירת חלונית קיימת אם יש
                      const existingBox = contentArea.querySelector('.gemini-result-box');
                      if (existingBox) existingBox.remove();
              
                      const textToProcess = contentArea.innerText.trim();
              
                      // יצירת חלונית טעינה
                      const resultBox = document.createElement('div');
                      resultBox.className = 'gemini-result-box';
                      const loadingText = mode === 'explain' ? 'מסכם ומסביר...' : 'מנסח תשובה...';
                      resultBox.innerHTML = `
                          <div class="gemini-loading">
                              <span>⚡</span><span>${loadingText}</span>
                          </div>
                      `;
                      contentArea.appendChild(resultBox);
              
                      try {
                          // בחירת ההנחיה (Prompt) המתאימה
                          let prompt = '';
                          if (mode === 'explain') {
                              prompt = `
                              תפקידך לסייע למשתמש להבין פוסט בפורום.
                              הטקסט: "${textToProcess}"
                              1. סכם את הפוסט בקיצור נמרץ.
                              2. הסבר מושגים טכניים או סלנג אם יש.
                              `;
                          } else {
                              prompt = `
                              אתה משתמש מומחה בפורום מקצועי ("מתמחים טופ").
                              כתוב נוסח לתגובה עבור הפוסט הבא.
                              התגובה צריכה להיות:
                              1. מועילה ומקצועית.
                              2. מנומסת ומכבדת.
                              3. בעברית.
                              4. אם זו שאלה טכנית, הצע כיוון לפתרון (אם אין מספיק מידע, תשאל שאלות מנחות).
                              
                              הפוסט עליו עונים: "${textToProcess}"
                              `;
                          }
              
                          const responseText = await callGeminiAPI(prompt);
                          const formattedHTML = formatMarkdown(responseText);
              
                          // שינוי צבע המסגרת לפי סוג הפעולה (ירוק לתשובה, סגול להסבר)
                          const borderColor = mode === 'explain' ? '#8e44ad' : '#27ae60';
                          resultBox.style.borderRightColor = borderColor;
              
                          resultBox.innerHTML = `
                              <div class="gemini-close" onclick="this.parentElement.remove()">✖</div>
                              <div class="gemini-content">${formattedHTML}</div>
                              <div style="margin-top:10px; font-size:11px; color:#aaa;">
                                  ${mode === 'explain' ? 'סיכום' : 'הצעת תשובה'} (מודל: ${MODEL})
                              </div>
                          `;
                          
                      } catch (error) {
                          console.error(error);
                          resultBox.innerHTML = `
                              <div class="gemini-close" onclick="this.parentElement.remove()">✖</div>
                              <div style="color:red">שגיאה: ${error}</div>
                          `;
                      }
                  }
              
                  // --- תקשורת עם גוגל ---
                  function callGeminiAPI(promptText) {
                      return new Promise((resolve, reject) => {
                          GM_xmlhttpRequest({
                              method: "POST",
                              url: `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent?key=${API_KEY}`,
                              headers: { "Content-Type": "application/json" },
                              data: JSON.stringify({
                                  contents: [{ parts: [{ text: promptText }] }]
                              }),
                              onload: function(response) {
                                  if (response.status >= 200 && response.status < 300) {
                                      try {
                                          const json = JSON.parse(response.responseText);
                                          // בדיקה אם המודל החזיר תוכן
                                          if (json.candidates && json.candidates[0].content) {
                                              resolve(json.candidates[0].content.parts[0].text);
                                          } else {
                                              reject("המודל לא החזיר טקסט (אולי תוכן חסום?)");
                                          }
                                      } catch (e) { reject("שגיאה בפענוח JSON"); }
                                  } else { reject(`שגיאת שרת: ${response.status}`); }
                              },
                              onerror: function(err) { reject("שגיאת חיבור"); }
                          });
                      });
                  }
              
                  function formatMarkdown(text) {
                      return text
                          .replace(/^### (.*$)/gim, '<h3>$1</h3>')
                          .replace(/^## (.*$)/gim, '<h3>$1</h3>')
                          .replace(/\*\*(.*?)\*\*/gim, '<strong>$1</strong>')
                          .replace(/^\* (.*$)/gim, '<ul><li>$1</li></ul>')
                          .replace(/<\/ul>\s*<ul>/gim, '')
                          .replace(/\n/gim, '<br>');
                  }
              
                  init();
              })();
              

              מוקדש ל @יאיר-דניאל וכל שוכני השרשור הזה

              דוגמה קטנה של סיכום הפוסט (לא רואים הכול כי זה חלונית נגללת)
              צילום מסך 2025-12-23 ב-15.03.20.png

              י מנותק
              י מנותק
              יענקיH
              כתב נערך לאחרונה על ידי
              #6

              @איש-אמת חמוד מאוד!

              תגובה 1 תגובה אחרונה
              0
              • מים אחרוניםמ מנותק
                מים אחרוניםמ מנותק
                מים אחרונים
                כתב נערך לאחרונה על ידי
                #7

                @איש-אמת
                אני חושב שהיה את זה בפורום, וההנהלה מחקה, כי זה יגרום להספמה.

                איך היית משועמם? משרשור אחר אני מבין שיש לך מספיק קווים להאזין להם... 😄

                תגובה 1 תגובה אחרונה
                1
                • איש אמתא מנותק
                  איש אמתא מנותק
                  איש אמת
                  מדריכים
                  כתב נערך לאחרונה על ידי
                  #8

                  אני באמת חושב שזה לא משהו שנצרך, ואולי באמת ההנהלה נגד, (אני נגד שיעתיקו ממנו תשובות) אבל אולי יש מישהו שזה נצרך לו אישית, אני לא אמחק כי אולי ההנהלה נגד.
                  @פרוזי אין לי עניין להשקיע בזה, אם תרצה תעשה את זה על החשבון שלך...

                  אני יודע שאני חושב שאני יודע.

                  תגובה 1 תגובה אחרונה
                  0
                  • יאיר דניאלי יאיר דניאל התייחס לנושא זה

                  • התחברות

                  • אין לך חשבון עדיין? הרשמה

                  • התחברו או הירשמו כדי לחפש.
                  • פוסט ראשון
                    פוסט אחרון
                  0
                  • חוקי הפורום
                  • פופולרי
                  • לא נפתר
                  • משתמשים
                  • חיפוש גוגל בפורום
                  • צור קשר