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
Post a Comment