@shishko לפי הידוע לי מערכת הקבצים הבסיסית של התקנים אלו-FAT32 לא קולטת קבצים הגדולים מ4 GB שהמומחים יתקנו אותי אם אני טועה
מנעמע
-
באג | אונקי 128GB סאנדיסק עם 71 GB פנויים כותב על קובץ של 5GB שאין מקום בדיסק האונקי נקנה בארץ והוא של סמסונג רשמי -
סקר | סקר | פלאפון איכותי באמת בעלות גבוהה | האם יבוא היום?@kasnik @מישהו12
צודקים חטאתי ל @דב-אורב-הוא-לי ולשאר העלולים להפיק מכך תועלתאשמנו בגדנו גזלנו דברנו דופי וכו'
מקווה למחילה
-
בקשה | בקשה | סייר ללא וידאו גם לא בתצוגה@קראנץ-ונילה כתב בבקשה | בקשה | סייר ללא וידאו גם לא בתצוגה:
הסיירת
התכוונת הסייר
לא נורא קורה לכולם:
-
בקשת מידע | בידוד לצינורות מזגן, חייב?@יאיר-דניאל כתב בבקשת מידע | בידוד לצינורות מזגן, חייב?:
קשה לי לפרק את הצינורות ולעטוף אותם מחדש בבידוד,
אפשר לחרוץ את הבידוד לאורך להצמיד ולסגור טוב עם לפלף (ולענ"ד כדאי מעל הלפלף טבעות איזובנד כל 30 סנטימטר בערך)
-
עזרה | עזרה | נגן PRIME מי שיכול דחוף מאודד?????????????????@שאול-208 זה מה שאני לא יודע אם חתיכה אחת או שניים צמודות בלחץ וזה מה שכתבתי שישאל את @ישראל-בני-ברק שמתעסק בנגנים האלו
מבין? -
בעיה | מחשב לא עולה ומתחיל לצפצףזה מונח שם כזו בטרייה

-
בקשה | בקשה | סייר ללא וידאו גם לא בתצוגהתעשה חיפוש גוגל בפורום גרסאות כשרות לג'לי סטאר יש כל מני תבדוק לפי הדגם שלך
-
בקשת מידע | דחוף - הוצאת הקלטה מפלאפון Q7 וחבריו@אהרן בחלק מהנגנים יש אפשרות בהגדרות הקלטה/מקור המוזיקה/כבל AUX(הקלטה פנימית)ואז מחברים צד אחד לפלפון וצד אחד לנגן ועובד עם כבל AUX רגיל
מאמין שאפשרי גם במחשב לא יודע איך
בהצלחה -
בעיה | מחשב לא עולה ומתחיל לצפצף@הדובדבן-שבקצפת כתב בבעיה | מחשב לא עולה ומתחיל לצפצף:
@מנעמע צודק
לא יודע מה קרה לי הייתי באמצע טלפון
תודה על התיקוןלא נורא הכל בסדר- כולם הבינו
-
באג | גם לכם נטפרי הפסיק לבדוק תמונות?@רפאל-0 @ע-ה-דכו-ע כן וזה
https://mitmachim.top/assets/uploads/files/1746612291282-94248f82-4ad7-493d-9926-311ff850cecb-image.png
כלומר זה
https://mitmachim.top/post/956418עדיין לא וזה כבר 11 שעות
זה הדוג' הכי טובה לא?? -
שיתוף | Q8 קיוליקס@חברים כתב בשיתוף | Q8 קיוליקס:
אחותי יש לה טלפון Q7 ויש במכשיר חיסרון - אין אפשרות שיחת ועידה.
@חברים כתב בשיתוף | Q8 קיוליקס:
תלוי גרסאותכנראה תלוי גרסאות
@שאול-208 מצויין
@חברים למה להכליל את כל הQ7 ולא לשאול מה עם גרסאות אחרות?? -
באג | שקע יו אס בי לא עובד במחשב -
בקשת מידע | סקריפט שמתקין סקריפטיםGPT וגמיני בנו לי סקריפט שיתקין סקריפטים דרך המייל
כלומר שאם אני מקבל מייל שהנושא שלו זה "סקריפט חדש"
והתוכן זה סקריפט אז זה מתקין אותו כפרויקט חדש וגוגל סקריפט שלי
וכן בשורה האחרונה כותבים את הטריגר כלומר כל כמה זמן זה ירוץ
רציתי לשאול
א}האם זה יעבוד
ב}מה יש לכם להעיר על זה
אני מפחד להתקין לפני שאני חושב על כל הבעיות האפשריות
תודה רבה
אני כבר מצאתי פרצה אחת - צריך להגביל את זה לכתובות מייל מורשות בלבד שלא ישלחו לי סקריפט שמשתף את כל הדרריב לכתובת אחרת
וכן צריך להוסיף גם אפשרות לעריכת פרויקטים קיימים (על ידי שם הפרויקט) וכן להסרת פרוייקטים ולא רק ליצירת חדשים
יש עוד הערות?
הקודיםגיפיטי
/** * manager: בדיקת דואר, יצירת קבצי סקריפט חדשים והרצתם/התקנת טריגרים. * * הוראות הפעלה: * 1. צור פרויקט Apps Script חדש (Script ID תצטרך בהגדרות מתקדמות). * 2. הפעל את ה-Apps Script API בממשק Google Cloud עבור ה-Cloud Project המשויך לפרויקט זה. * 3. פרוייקט זה צריך הרשאות: * - Gmail API scopes (GmailApp suffice for reading basic mail) * - https://www.googleapis.com/auth/script.projects (Apps Script API - לשינוי תוכן הפרויקט) * - https://www.googleapis.com/auth/script.deployments (אם תרצה להרחיב) * - https://www.googleapis.com/auth/script.scriptapp (ליצירת טריגרים) * - https://www.googleapis.com/auth/script.external_request (UrlFetchEnabled — בדרך כלל לא נדרש) * * 4. התקן trigger למחזור בדיקה (למשל minute timer) ע"י הפעלת createPollTrigger() פעם אחת ידנית. * * השתמש בפורמט המייל שפורט במסמך לעיל. */ /* === CONFIG === */ const SUBJECT_KEYWORD = "סקריפט חדש"; // מזהה נושא של הודעות שמכילות סקריפט const PROJECT_SCRIPT_ID = ScriptApp.getScriptId(); // מזהה הפרויקט הנוכחי const TIMEZONE = "Asia/Jerusalem"; /* === END CONFIG === */ /** * הפונקציה הראשית להריץ כמחזור (כל דקה למשל) — מסננת מיילים חדשים ומטפלת בהם. */ function checkInboxAndProcess() { // חפש הודעות בלתי נקראות שנושאן EXACTLY SUBJECT_KEYWORD // (ניתן להרחיב ל"subject:סקריפט חדש" ב-Gmail search) const query = `subject:"${SUBJECT_KEYWORD}" is:unread`; const threads = GmailApp.search(query, 0, 10); // עד 10 חוטים בפעם if (!threads || threads.length === 0) return; threads.forEach(thread => { const messages = thread.getMessages(); messages.forEach(msg => { if (msg.isUnread()) { try { processMessage(msg); // הסמן כהודעה שנקראה/מעובדת msg.markRead(); } catch (e) { // במקרה של שגיאה, השאר כלא נקרא או שלח הודעת שגיאה לגבהים Logger.log("processMessage failed: " + e); } } }); // לסיום: ניתן לתג את ה-thread או לארכיון // thread.moveToArchive(); }); } /** * מעבד הודעה בודדת: יוצר/מעדכן קובץ בפרויקט עם הקוד שבמייל ומתקין טריגר לפי השורה האחרונה. * @param {GmailMessage} msg */ function processMessage(msg) { const body = getPlainBody(msg); if (!body) { Logger.log("Empty body"); return; } const lines = body.trim().split(/\r?\n/).map(l => l.replace(/\r/g,'')); // שורת טריגר = השורה האחרונה const triggerLine = lines.length ? lines[lines.length - 1].trim() : ""; // קוד הגוף — כל השורות חוץ מהשורה האחרונה const codeLines = lines.slice(0, Math.max(0, lines.length - 1)); const code = codeLines.join("\n").trim(); if (!code) { // אם אין קוד — אין מה להוסיף Logger.log("No code found (maybe email only contained trigger line)."); return; } // יוצרים שם קובץ ייחודי מבוסס זמן const timestamp = Utilities.formatDate(new Date(), TIMEZONE, "yyyyMMdd_HHmmss"); const fileName = `script_from_email_${timestamp}.gs`; const functionName = detectMainFunctionName(code) || `main_${timestamp}`; // יוצרים content של הקובץ כך שהפונקציה הראשית תיקרא בשם מובנה: const wrapperCode = `// Generated from email received at ${new Date().toISOString()}\n// Original Subject: ${msg.getSubject()}\n\n${code}\n\n` + `// If your script does not define a function named "${functionName}", adjust the trigger spec or the script.\n`; // 1) נסה להעלות את הקובץ כקובץ חדש בתוך אותו פרויקט (Apps Script API required) try { updateProjectContentAddFile(fileName, wrapperCode); Logger.log("Added file " + fileName + " to project " + PROJECT_SCRIPT_ID); } catch (e) { Logger.log("Failed to add file via Apps Script API: " + e); // חלופה: יצירת פונקציה דינמית והרצה מידית (יהיה מוגבל) // ננסה להריץ את הקוד ישירות אם trigger == runNow } // 2) לפי triggerLine — צור טריגר מתאים או הרץ עכשיו handleTriggerSpec(triggerLine, functionName); } /** * קולט טקסט מה-GmailMessage בפורמט טקסט בלבד */ function getPlainBody(msg) { // עדיפות ל־plainBody אם קיים, אחרת נקח את ה־body וננקה HTML try { const plain = msg.getPlainBody(); if (plain && plain.trim()) return plain; } catch (e) { /* continue */ } // fallback — להמיר HTML לטקסט try { const html = msg.getBody(); return htmlToPlainText(html); } catch (e) { return ""; } } function htmlToPlainText(html) { if (!html) return ""; // הסרה בסיסית של תגיות return html.replace(/<\/?[^>]+(>|$)/g, ""); } /** * מזהה שם פונקציית כניסה בקוד שנשלח (חיפוש פונקציה בג'אווהסקריפט). * אם לא נמצא — החזר null. */ function detectMainFunctionName(code) { const m = code.match(/function\s+([A-Za-z0-9_]+)\s*\(/); if (m && m[1]) return m[1]; // חפש גם שילוב של arrow functions/exports => לא מטופל כרגע return null; } /** * מפרש את שורת הטריגר ומתקין טריגר מתאים (או מריץ מיד). * תמיכה ב: * - everyMinutes N * - dailyAt HH:MM * - onceAt YYYY-MM-DD HH:MM * - runNow * * @param {string} spec * @param {string} functionName */ function handleTriggerSpec(spec, functionName) { if (!spec) { Logger.log("No trigger spec provided; defaulting to runNow."); spec = "runNow"; } spec = spec.trim(); if (/^runNow$/i.test(spec)) { // אפשר להריץ פונקציה ישירות אם היא קיימת בפרויקט try { // קריאה דינמית לפונקציה — אם לא קיימת, ייזרח שגיאה. this[functionName] ? this[functionName]() : runFunctionByName(functionName); Logger.log("Ran function immediately: " + functionName); } catch (e) { Logger.log("Immediate run failed: " + e); } return; } const everyMinMatch = spec.match(/^everyMinutes\s+(\d{1,3})$/i); if (everyMinMatch) { const minutes = parseInt(everyMinMatch[1], 10); createTimeDrivenTrigger(functionName, {type: 'everyMinutes', minutes: minutes}); return; } const dailyMatch = spec.match(/^dailyAt\s+([0-2]\d):([0-5]\d)$/i); if (dailyMatch) { const hh = parseInt(dailyMatch[1],10); const mm = parseInt(dailyMatch[2],10); createTimeDrivenTrigger(functionName, {type: 'dailyAt', hour: hh, minute: mm}); return; } const onceMatch = spec.match(/^onceAt\s+(\d{4}-\d{2}-\d{2})\s+([0-2]\d:[0-5]\d)$/i); if (onceMatch) { const dateStr = onceMatch[1]; const timeStr = onceMatch[2]; const dt = new Date(dateStr + "T" + timeStr + ":00"); // במערכת גוגל הזמן יהיה לפי ה־timezone החזוי; נמיר למשתמש const userOffsetDate = new Date(dt.toLocaleString("en-US", {timeZone: TIMEZONE})); createTimeDrivenTrigger(functionName, {type: 'onceAt', date: userOffsetDate}); return; } Logger.log("Unrecognized trigger spec: " + spec + ". Defaulting to runNow."); try { runFunctionByName(functionName); } catch(e){ Logger.log("runNow fallback failed: "+e); } } /** * יוצר טריגר time-driven עבור שם הפונקציה שנוצר. * אופציות: * - {type:'everyMinutes', minutes: N} * - {type:'dailyAt', hour: HH, minute: MM} * - {type:'onceAt', date: DateObject} */ function createTimeDrivenTrigger(functionName, options) { // מחק טריגרים זהים קודם (למנוע כפילויות) deleteExistingTriggers(functionName); if (options.type === 'everyMinutes') { const minutes = Math.max(1, Math.min(60*24, options.minutes)); ScriptApp.newTrigger(functionName) .timeBased() .everyMinutes(minutes) .create(); Logger.log(`Created everyMinutes(${minutes}) trigger for ${functionName}`); return; } if (options.type === 'dailyAt') { // לא ניתן להגדיר שעה מדויקת בדקה אחת בעברית בלי להשתמש ב־atHour / nearMinute ScriptApp.newTrigger(functionName) .timeBased() .everyDays(1) .atHour(options.hour) // atHour uses script timezone .nearMinute(options.minute) // best-effort .create(); Logger.log(`Created dailyAt ${options.hour}:${options.minute} trigger for ${functionName}`); return; } if (options.type === 'onceAt') { const runDate = options.date; ScriptApp.newTrigger(functionName) .timeBased() .at(runDate) .create(); Logger.log(`Created one-time trigger at ${runDate} for ${functionName}`); return; } } /** * מוחק טריגרים קודמים על אותו שם פונקציה כדי למנוע כפילויות. */ function deleteExistingTriggers(functionName) { const triggers = ScriptApp.getProjectTriggers(); triggers.forEach(t => { if (t.getHandlerFunction && t.getHandlerFunction() === functionName) { ScriptApp.deleteTrigger(t); } }); } /** * ניסיון להריץ פונקציה על ידי שם (אם קיימת בסקופ הגלובלי). * אם לא קיימת — ננסה לקרוא את ה-Apps Script API כדי להריץ (לא ממומש כאן). */ function runFunctionByName(functionName) { if (typeof this[functionName] === 'function') { return this[functionName](); } // אם פונקציה לא קיימת בסקופ זה — תיזרק שגיאה throw new Error("Function " + functionName + " not found in current script global scope."); } /** * עדכון/הוספה של קובץ בפרויקט Apps Script באמצעות Apps Script API. * דורש: Apps Script API מופעל עבור אותו Cloud Project ושימוש ב-OAuthToken של הסקריפט. * * הערה: קריאה זו כותבת את כל תוכן הפרויקט (files array). פה אנחנו עושים 'read-modify-write' פשוט: */ function updateProjectContentAddFile(filename, fileContent) { const scriptId = PROJECT_SCRIPT_ID; if (!scriptId) throw new Error("PROJECT_SCRIPT_ID not available. Make sure project has an id."); // קריאה ראשונית של תוכן הפרויקט כדי לקבל ה־files הקיימים const token = ScriptApp.getOAuthToken(); const getUrl = `https://script.googleapis.com/v1/projects/${encodeURIComponent(scriptId)}/content`; const getResp = UrlFetchApp.fetch(getUrl, { method: "get", headers: { Authorization: "Bearer " + token }, muteHttpExceptions: true }); if (getResp.getResponseCode() !== 200) { throw new Error("Could not GET project content. Ensure Apps Script API is enabled and script has permission. RC=" + getResp.getResponseCode() + " body=" + getResp.getContentText()); } const current = JSON.parse(getResp.getContentText()); const files = current.files || []; // הוסף קובץ חדש לרשימת הקבצים files.push({ name: filename.replace(/\.gs$/,''), type: "SERVER_JS", source: fileContent }); // הכנת payload חדש const payload = { files: files }; // עדכון תוכן הפרויקט const putResp = UrlFetchApp.fetch(getUrl, { method: "put", contentType: "application/json", payload: JSON.stringify(payload), headers: { Authorization: "Bearer " + token }, muteHttpExceptions: true }); if (putResp.getResponseCode() < 200 || putResp.getResponseCode() > 299) { throw new Error("Failed to update project content. RC=" + putResp.getResponseCode() + " body=" + putResp.getContentText()); } return JSON.parse(putResp.getContentText()); } /* ======= Utilities / Helpers ======= */ /** * יוצר trigger שמריץ את הפונקציה checkInboxAndProcess כל דקה. * הפעל פעם אחת ידנית כדי להפעיל polling. */ function createPollTrigger() { // Verifiy no duplicates const triggers = ScriptApp.getProjectTriggers(); const exists = triggers.some(t => t.getHandlerFunction && t.getHandlerFunction() === 'checkInboxAndProcess'); if (!exists) { ScriptApp.newTrigger('checkInboxAndProcess') .timeBased() .everyMinutes(1) .create(); Logger.log("Created poll trigger every 1 minute."); } else { Logger.log("Poll trigger already exists."); } } /** * מחיקת כל הטריגרים שנוצרו ע"י הסקריפט (לניקיון) */ function deleteAllTriggers() { const triggers = ScriptApp.getProjectTriggers(); triggers.forEach(t => ScriptApp.deleteTrigger(t)); Logger.log("All triggers deleted."); }גמיני
`javascript / * סורק את תיבת הדואר הנכנס עבור מיילים עם נושא ספציפי, * יוצר סקריפט חדש בגוגל סקריפט מתוכן המייל, וקובע טריגר בהתבסס * על השורה האחרונה של המייל. */ function processNewScriptEmails() { // הגדרות const SCRIPT_SUBJECT = 'New Script'; // הנושא של המיילים שמכילים את הסקריפטים const SPREADSHEETID = 'YOURSPREADSHEET_ID'; // שנה את זה ל-ID של גיליון ה-Google שלך const SHEET_NAME = 'Sheet1'; // שנה את זה לשם הגיליון שבו אתה רוצה לשמור את המידע. const EMAILLABEL = 'scriptemails'; // שם התווית (label) במייל לסימון מיילים מעובדים //קבלת גיליון const ss = SpreadsheetApp.openById(SPREADSHEET_ID); const sheet = ss.getSheetByName(SHEET_NAME); // קבל את כל המיילים בנושא הספציפי const threads = GmailApp.search('subject:' + SCRIPT_SUBJECT + ' is:unread'); if (threads.length === 0) { Logger.log('No new script emails found.'); return; } for (const thread of threads) { try { const messages = thread.getMessages(); const lastMessage = messages[messages.length - 1]; // לוקח את המייל האחרון בשרשור const emailBody = lastMessage.getPlainBody(); const lines = emailBody.split('\n'); const scriptCode = lines.slice(0, -1).join('\n'); // כל הקוד חוץ מהשורה האחרונה const triggerLine = lines[lines.length - 1].trim(); // השורה האחרונה כטריגר // יצירת סקריפט חדש const scriptName = 'Script_' + Date.now(); const scriptId = createScript(scriptName, scriptCode); if (scriptId) { // שמירת מידע בגיליון const triggerFunction = triggerLine; // משתמש בשורה האחרונה כפונקציית הטריגר sheet.appendRow([scriptName, scriptId, triggerFunction, new Date()]); // יצירת טריגר if (triggerFunction) { createTimeBasedTrigger(scriptId, triggerFunction); } else { Logger.log('No trigger function specified.'); } // הוספת תווית למייל ולסמן אותו כנקרא. thread.addLabel(GmailApp.getUserLabelByName(EMAILLABEL) || GmailApp.createLabel(EMAILLABEL)); thread.markRead(); } } catch (error) { Logger.log('Error processing email: ' + error); } } } / * יוצר סקריפט חדש בגוגל סקריפט. * @param {string} scriptName השם של הסקריפט. * @param {string} code הקוד של הסקריפט. * @return {string|null} ה-ID של הסקריפט החדש, או null אם יש שגיאה. */ function createScript(scriptName, code) { try { const scriptId = ScriptApp.newTrigger(scriptName).create(scriptName).getId(); PropertiesService.getScriptProperties().setProperty(scriptName, code); // Saves code in script properties Logger.log('Script "' + scriptName + '" created with ID: ' + scriptId); return scriptId; } catch (error) { Logger.log('Error creating script: ' + error); return null; } } / * יוצר טריגר זמן מבוסס. * @param {string} scriptId ה-ID של הסקריפט. * @param {string} functionName שם הפונקציה להפעלה. */ function createTimeBasedTrigger(scriptId, functionName) { try { ScriptApp.getProjectTriggers().forEach(trigger => { if (trigger.getHandlerFunction() === functionName) { ScriptApp.deleteTrigger(trigger); // Delete existing triggers with same name } }); ScriptApp.newTrigger(functionName) .timeBased() .everyMinutes(1) // ניתן לשנות את התדירות .inTimezone(Session.getScriptTimeZone()) // משתמש באזור הזמן של הסקריפט .create(); Logger.log('Trigger created for function "' + functionName + '" in script ' + scriptId); } catch (error) { Logger.log('Error creating trigger: ' + error); } } / * פונקציה לדוגמה שתופעל על ידי הטריגר. * תשתנה לפי הסקריפטים שלך. */ function myFunction() { Logger.log('Hello from my new script!'); }הגמיני זה מדרך המייל
מצורף הבקשה והתשובה המלאה בספוילרהשאלה
אני רוצה קוד לסקריפט שכל פעם שיכנס למייל שלי מייל חדש עם הנושט סקריפט חדש הוא יצור את התוכן של המייל בגוגל סקריפט ויפעיל אותו עם טריגר לפי השורה האחרונה של המיילהתשובה המלאה
הנה תשובתי: בטח, הנה סקריפט בגוגל שיטס שעושה את מה שביקשת. הוא סורק את תיבת הדואר הנכנס שלך עבור מיילים חדשים, מזהה מיילים עם נושא ספציפי, יוצר סקריפט חדש בגוגל סקריפט מתוכן המייל, וקובע טריגר בהתבסס על השורה האחרונה של המייל. חשוב: * אבטחה: סקריפט זה דורש גישה לחשבון Gmail שלך. וודא שאתה סומך על הסקריפט הזה לפני שאתה מתקין אותו. * מגבלות: גוגל סקריפט יש מגבלות של שימוש, במיוחד לגבי שליחת מיילים. * ניפוי באגים: הקוד מכיל הדפסות ללוג כדי לעזור לך לעקוב אחר מה שקורה. תסתכל על הלוגים כדי לפתור בעיות. שלבים: 1. יצירת גיליון גוגל חדש: * צור גיליון גוגל חדש (sheets.google.com). * תן לגיליון שם כמו "Script Manager". * הזן את הדברים האלה בגיליון. זה ישמש לאחסון את פרטי הסקריפטים שאתה יוצר. * עמודה A: "Script Name" * עמודה B: "Script ID" (כדי לעקוב אחרי כל סקריפט) * עמודה C: "Trigger Function" (הפונקציה שצריכה לפעול) * עמודה D: "Last Run" (שעת פעולה אחרונה) 2. פתיחת גוגל סקריפט: * בגיליון גוגל שלך, לחץ על "תוספים" (Extensions) > "App Script". זה יפתח את עורך הסקריפטים. 3. הוספת קוד: * העתק והדבק את הקוד הבא בעורך הסקריפטים. * שנה את הערכים בקוד (ראה הסברים בתוך הקוד). `javascript / * סורק את תיבת הדואר הנכנס עבור מיילים עם נושא ספציפי, * יוצר סקריפט חדש בגוגל סקריפט מתוכן המייל, וקובע טריגר בהתבסס * על השורה האחרונה של המייל. */ function processNewScriptEmails() { // הגדרות const SCRIPT_SUBJECT = 'New Script'; // הנושא של המיילים שמכילים את הסקריפטים const SPREADSHEETID = 'YOURSPREADSHEET_ID'; // שנה את זה ל-ID של גיליון ה-Google שלך const SHEET_NAME = 'Sheet1'; // שנה את זה לשם הגיליון שבו אתה רוצה לשמור את המידע. const EMAILLABEL = 'scriptemails'; // שם התווית (label) במייל לסימון מיילים מעובדים //קבלת גיליון const ss = SpreadsheetApp.openById(SPREADSHEET_ID); const sheet = ss.getSheetByName(SHEET_NAME); // קבל את כל המיילים בנושא הספציפי const threads = GmailApp.search('subject:' + SCRIPT_SUBJECT + ' is:unread'); if (threads.length === 0) { Logger.log('No new script emails found.'); return; } for (const thread of threads) { try { const messages = thread.getMessages(); const lastMessage = messages[messages.length - 1]; // לוקח את המייל האחרון בשרשור const emailBody = lastMessage.getPlainBody(); const lines = emailBody.split('\n'); const scriptCode = lines.slice(0, -1).join('\n'); // כל הקוד חוץ מהשורה האחרונה const triggerLine = lines[lines.length - 1].trim(); // השורה האחרונה כטריגר // יצירת סקריפט חדש const scriptName = 'Script_' + Date.now(); const scriptId = createScript(scriptName, scriptCode); if (scriptId) { // שמירת מידע בגיליון const triggerFunction = triggerLine; // משתמש בשורה האחרונה כפונקציית הטריגר sheet.appendRow([scriptName, scriptId, triggerFunction, new Date()]); // יצירת טריגר if (triggerFunction) { createTimeBasedTrigger(scriptId, triggerFunction); } else { Logger.log('No trigger function specified.'); } // הוספת תווית למייל ולסמן אותו כנקרא. thread.addLabel(GmailApp.getUserLabelByName(EMAILLABEL) || GmailApp.createLabel(EMAILLABEL)); thread.markRead(); } } catch (error) { Logger.log('Error processing email: ' + error); } } } / * יוצר סקריפט חדש בגוגל סקריפט. * @param {string} scriptName השם של הסקריפט. * @param {string} code הקוד של הסקריפט. * @return {string|null} ה-ID של הסקריפט החדש, או null אם יש שגיאה. */ function createScript(scriptName, code) { try { const scriptId = ScriptApp.newTrigger(scriptName).create(scriptName).getId(); PropertiesService.getScriptProperties().setProperty(scriptName, code); // Saves code in script properties Logger.log('Script "' + scriptName + '" created with ID: ' + scriptId); return scriptId; } catch (error) { Logger.log('Error creating script: ' + error); return null; } } / * יוצר טריגר זמן מבוסס. * @param {string} scriptId ה-ID של הסקריפט. * @param {string} functionName שם הפונקציה להפעלה. */ function createTimeBasedTrigger(scriptId, functionName) { try { ScriptApp.getProjectTriggers().forEach(trigger => { if (trigger.getHandlerFunction() === functionName) { ScriptApp.deleteTrigger(trigger); // Delete existing triggers with same name } }); ScriptApp.newTrigger(functionName) .timeBased() .everyMinutes(1) // ניתן לשנות את התדירות .inTimezone(Session.getScriptTimeZone()) // משתמש באזור הזמן של הסקריפט .create(); Logger.log('Trigger created for function "' + functionName + '" in script ' + scriptId); } catch (error) { Logger.log('Error creating trigger: ' + error); } } / * פונקציה לדוגמה שתופעל על ידי הטריגר. * תשתנה לפי הסקריפטים שלך. */ function myFunction() { Logger.log('Hello from my new script!'); } ` 4. שינוי קוד: * SCRIPT_SUBJECT: שנה את זה לנושא המייל שבו אתה משתמש. * SPREADSHEETID: החלף את YOURSPREADSHEET_ID עם ה-ID של גיליון הנתונים שלך. אתה יכול למצוא את זה בכתובת ה-URL של הגיליון (למשל, https://docs.google.com/spreadsheets/d/1234567890abcdefg/edit#gid=0). * SHEET_NAME: שנה את זה לשם של הגיליון שבו אתה רוצה לאחסן את פרטי הסקריפטים. * EMAIL_LABEL: שנה את זה אם אתה רוצה תווית אחרת למיילים מעובדים. 5. שמירת הקוד: * לחץ על סמל התקליט כדי לשמור את הסקריפט. 6. הגדרת טריגר: * בעורך הסקריפטים, לחץ על סמל השעון (טריגרים). * לחץ על "+ Add Trigger". * תצורה של הטריגר: * בחר את הפונקציה: processNewScriptEmails * בחר אירוע להפעלה (Event Source): From spreadsheet * בחר סוג אירוע (Event Type): On change * בחר התראה על כשלון (Failure notification settings): בחר את זה שמתאים לך. * לחץ על "Save". * תתבקש לאשר הרשאות. עקוב אחר ההוראות, תן הרשאה לספק גישה ל-Gmail ולגיליון שלך. 7. בדיקת הסקריפט: * שלח לעצמך מייל חדש עם הנושא שציינת ב- SCRIPT_SUBJECT. * גוף המייל צריך להכיל את הקוד של הסקריפט שאתה רוצה ליצור. הקוד צריך להיות בפורמט חוקי של גוגל סקריפט. * השורה האחרונה של המייל צריכה להכיל את שם הפונקציה שאתה רוצה שהטריגר יפעיל (למשל, myFunction). * בדוק את הלוגים כדי לוודא שהסקריפט פועל כמתוכנן: * בעורך הסקריפטים, לחץ על "Execution" (סמל השעון עם ה-V). * אתה תראה את הלוגים של הסקריפט. אם יש בעיות, הלוגים יעזרו לך לזהות אותן. * בדוק את גיליון Google שלך כדי לוודא שפרטי הסקריפט החדש נוספו. * בדוק שפונקציית הטריגר פועלת. איך זה עובד: 1. הסקריפט סורק את תיבת הדואר הנכנס שלך עבור מיילים חדשים עם הנושא שציינת. 2. עבור כל מייל, הסקריפט מחלץ את הקוד מהמייל. כל השורות למעט האחרונה הם הקוד. 3. הסקריפט יוצר סקריפט חדש בגוגל סקריפט עם הקוד הזה. 4. הסקריפט מחלץ את השורה האחרונה של המייל. זה יהיה שם הפונקציה שתופעל על ידי הטריגר. 5. הסקריפט יוצר טריגר מבוסס זמן שקורא לפונקציה שצוינה בשורה האחרונה. 6. הסקריפט מוסיף את פרטי הסקריפט החדש לגליון Google. 7. הסקריפט מוסיף תווית למייל ומסמן אותו כנקרא. הערות נוספות: * ודא שהקוד שאתה שולח במיילים הוא קוד תקף של גוגל סקריפט. * הטריגרים מבוססי הזמן עשויים לקחת עד 15 דקות לפעול. * אתה יכול לשנות את תדירות הטריגר בתוך הפונקציה createTimeBasedTrigger. * אם אתה רוצה להסיר סקריפט, אתה יכול למחוק אותו מהגליון ולמחוק את הטריגר שלו. אני מקווה שזה עוזר! אם יש לך שאלות נוספות, אל תהסס לשאול. -
עזרה | קורוזיה ואיחוד טלפונים שיואמי@יאיר-דניאל בQIN1S+ אני הכרתי
בF21 חידשת לי
יש למישהו מידע על האחרים??וספוילר ל@polak-21
@polak-21 בבקשה תקפיד על זה
@יאיר-דניאל כתב בבאג | קורוזיה ואיחוד טלפונים שיואמי!!!!!:נ.ב. המסך של החצי טאצ' אמור להיות הרבה יותר עדין ושביר תיזהר איתו מאוד!
ואם אתה יכול אל תנסה להוציא אותו כי הוא דבוק בדבק מיוחד, ורוב הסיכויים שהוא יהרס.
אם אני זוכר נכון יש דרך מסויימת, ע"י חימום או משהו כזה, איך לפרק אותו, בלי שיהרס.כי חבל שמחר יהיה נושא חדש
@polak-21 כתב בבאג | קורוזיה ואיחוד טלפונים שיואמי!!!!!:
יש לי שתי טלפונים חצי טאצ'. אחד נפל למים לפני המון זמן והשקע טעינה הלך. המוכר אמר שעולה 300 שקל.(הגיוני?) אז כבר קניתי חדש. השני נפל שבוע שעבר למים ואחרי שהוא היה באורז 48 שעות לאט לאט הלך לעולמו בהתחלה הבלוטוס לא נדלק ואז לא התחבר למחשב. ועכשיו הוא לא מטעין בכלל נשאר על אחוז אחד כל הזמן
1.האם יש אפשרות לנקות אותו מקורוזיה (את הטלפון השני).?
2.ואיך עושים את זה? איזה חומר?
3.אם אין אפשרות אולי אפשר לאחד את הטלפונים לקחת מכל מכשיר את החלקים שעובדים?
כמה זה עולה והאם זה שווה את זה ?
אתמול הרסתי את המסך איך אני משיג חדש??
סליחה על האורך ותודה מראש........ -
בקשת מידע | יש קושחה חלופית למצלמה שלי? -
בירור | סקר חשוב | מה חסר בחסימות מערכת מולטימדיה כיום?@מישהו12 כתב בבירור | סקר חשוב | מה חסר בחסימות מערכת מולטימדיה כיום?:
@יוסף-אלחנן כתב בבירור | סקר חשוב | מה חסר בחסימות מערכת מולטימדיה כיום?:
אם מגבילים את התקנת אפליקציות, אפשר אולי להשתמש עם הדפדפן של מישהו12 (כמובן ברשותו...).
Spoiler
הוא לא חוסם דפדפן פנימי באפילקציות.
אגב, חברים, במערכות מולטימדיה מסויימות שיצא לי לראות הדפדפן מושבת כשהרכב מונע. לא בקטע של סינון, בקטע של הסחת דעת מהכביש.
מילא יוטיוב\ספוטיפיי אני מבין, שרוצים לשמוע מוזיקה בנסיעה.
אבל דפדפן? בשביל מה? סתם מסוכןליושב/ת ליד הנהג אבל אני לא נכנס לזה כל אחד והגדרים שלו
@מיישה
לדעתי שיכלול וויז וIGO (לזמנים לא מקוונים) וכן עמוד ענן לניווט בשטח וכמובן פנגו וסלו׳לדעתי דפדפן מיותר
תודה רבה
-
בקשת מידע | יצירת תמונה שתמיד תישאר עליונה על המסך@טופטופיסט כתב בבקשת מידע | יצירת תמונה שתמיד תישאר עליונה על המסך:
תוכנת 'הרחפן' של מכון כתר תורה
יש לך אותה ??
-
עזרה | קורוזיה ואיחוד טלפונים שיואמי@יאיר-דניאל כתב בבאג | קורוזיה ואיחוד טלפונים שיואמי!!!!!:
@מנעמע כתב בבאג | קורוזיה ואיחוד טלפונים שיואמי!!!!!:
בבקשה תקפיד על זה כי חבל שמחר יהיה נושא חדש
???
התכוונתי להגיד את זה ל @polak-21
ושכחתי לתייג
תקנתי
סליחה -
בקשת מידע | עריכת גירסה לנגן@אורי אני לא רוצה לחייב אותם לנגן ספציפי שיקנה דרכי אלא שכל אחד יביא נגן משלו ואחרי בדיקה ואישור של בחור שמבין נוסיף לו חתימה
אני מודע לעובדה שזה יהיה המון עבודה אבל מוכן לזה
תודה רבה