Apps Script Harga Saham Turun Naik Bot 3

Apps Script v3

// Fungsi utama untuk mengecek harga dan kirim alert ke Telegram function checkStockAlerts(slot = "manual") { // 🔍 Filter waktu & hari (Senin–Jumat, 08:55–16:00 WIB) if (!isWithinWorkHours()) { Logger.log(`${slot}: Di luar jam kerja, tidak dijalankan.`); return; } const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); const data = sheet.getDataRange().getValues(); const TELEGRAM_TOKEN = "8449489352:AAGOaADnjyuJ-3vtQst2qIozdvzOw1HhDH4"; const TELEGRAM_CHAT_ID = "1243483408"; let alerts = []; for (let i = 1; i < data.length; i++) { const row = data[i]; const kode = row[2]; const nama = row[3]; const harga = parseFloat(row[4]); const batasTurun = parseFloat(row[5]); const batasNaik = parseFloat(row[6]); const statusTurun = (row[7] || "").toLowerCase(); const statusNaik = (row[8] || "").toLowerCase(); if (!isNaN(harga) && !isNaN(batasTurun) && harga < batasTurun && statusTurun !== "terkirim") { alerts.push(`🔴${kode} (${nama}) TURUN ke ${harga} (batas: ${batasTurun})`); sheet.getRange(i + 1, 8).setValue("terkirim"); // kolom H } if (!isNaN(harga) && !isNaN(batasNaik) && harga > batasNaik && statusNaik !== "terkirim") { alerts.push(`🟢${kode} (${nama}) NAIK ke ${harga} (batas: ${batasNaik})`); sheet.getRange(i + 1, 9).setValue("terkirim"); // kolom I } } if (alerts.length > 0) { const message = `🔔 ALERT SAHAM (${slot}):\n` + alerts.join("\n"); const url = `https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage`; const payload = { method: "post", payload: { chat_id: TELEGRAM_CHAT_ID, text: message, }, }; const response = UrlFetchApp.fetch(url, payload); Logger.log("Telegram response: " + response.getContentText()); } else { Logger.log(`${slot}: Tidak ada alert.`); } } // Fungsi pemicu waktu: cek detik lalu panggil alert function checkAndRunEvery15Sec() { // 🔍 Filter waktu & hari (Senin–Jumat, 08:55–16:00 WIB) if (!isWithinWorkHours()) { Logger.log("Diluar jam kerja, script tidak dijalankan."); return; } const now = new Date(); const seconds = now.getSeconds(); if (seconds >= 0 && seconds < 15) { checkStockAlerts("slot1"); } else if (seconds >= 15 && seconds < 30) { checkStockAlerts("slot2"); } else if (seconds >= 30 && seconds < 45) { checkStockAlerts("slot3"); } else if (seconds >= 45 && seconds < 60) { checkStockAlerts("slot4"); } } // 🔄 Fungsi pengecekan jam & hari (Senin–Jumat, 08:55–16:00 WIB) function isWithinWorkHours() { const now = new Date(); const timeZone = "Asia/Jakarta"; const day = parseInt(Utilities.formatDate(now, timeZone, "u")); // 1 = Senin, 7 = Minggu const hour = parseInt(Utilities.formatDate(now, timeZone, "H")); const minute = parseInt(Utilities.formatDate(now, timeZone, "m")); // Hanya Senin–Jumat if (day < 1 || day > 5) return false; // Hanya jam 08:55–16:00 WIB if (hour < 8 || hour > 15) return false; if (hour === 8 && minute < 55) return false; return true; } // Fungsi untuk menampilkan halaman HTML frontend looping function doGet() { return HtmlService.createHtmlOutputFromFile('index'); }

Comments

Popular posts from this blog

Vault Frontend 2 V5

Atur Jarak Antar Elemen HTML