3. App Script Bot-1 Telegram Saham Turun - oneoff di spreadsheet belum otomatis
/************************************************************
* FUNGSI 1 — UPDATE HARGA DARI GOOGLE FINANCE (SHEET: Data)
************************************************************/
function updateHarga() {
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName("Data");
const status = (sheet.getRange("A1").getValue() || "").toString().toUpperCase();
if (status !== "ON") {
Logger.log("Update harga dimatikan oleh user (A1 != ON)");
return;
}
const tickers = sheet.getRange("B2:B1061").getValues();
tickers.forEach((row, i) => {
const kode = row[0];
if (!kode) return;
const formula = `=GOOGLEFINANCE("${kode}","price")`;
sheet.getRange(i + 2, 3).setFormula(formula); // kolom C = harga
});
Logger.log("Update harga selesai.");
}
/************************************************************
* Script otomatis menulis ON/OFF ke Sheet
************************************************************/
function syncOnOff() {
const sheet = SpreadsheetApp.getActive().getSheetByName("Data");
const SYSTEM_MODE = "ON"; // ubah manual hanya di script
sheet.getRange("A1").setValue(SYSTEM_MODE);
Logger.log("Spreadsheet ON/OFF telah disinkronkan dari script.");
}
/************************************************************
* CONTOH FULL: updateHarga() pakai ON/OFF dari Script
************************************************************/
const SYSTEM_ENABLED = true; // ubah ON / OFF di sini
function updateHarga() {
if (!SYSTEM_ENABLED) {
Logger.log("updateHarga() dimatikan oleh Script.");
return;
}
const sheet = SpreadsheetApp.getActive().getSheetByName("Data");
const tickers = sheet.getRange("B2:B1061").getValues();
tickers.forEach((row, i) => {
const kode = row[0];
if (!kode) return;
sheet.getRange(i+2, 3)
.setFormula(`=GOOGLEFINANCE("${kode}","price")`);
});
Logger.log("Harga diupdate karena SYSTEM_ENABLED = true");
}
/************************************************************
* CONTOH FULL: checkStockAlerts() pakai ON/OFF dari Script
************************************************************/
const ALERT_SYSTEM = true; // ON/OFF alert Telegram
function checkStockAlerts() {
if (!ALERT_SYSTEM) {
Logger.log("Alert system OFF oleh script.");
return;
}
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
const data = sheet.getDataRange().getValues();
// ... lanjut kode alert ...
}
/************************************************************
* FUNGSI 2 — ALERT SAHAM (SHEET: Sheet1)
************************************************************/
function checkStockAlerts() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
const data = sheet.getDataRange().getValues();
const TELEGRAM_TOKEN = "TOKEN-KAMU";
const TELEGRAM_CHAT_ID = "CHAT-ID-KAMU";
let alerts = [];
for (let i = 1; i < data.length; i++) {
const row = data[i];
const onoff = (row[1] || "").toString().toLowerCase(); // kolom B (OnOff)
if (onoff !== "on") continue;
const kode = row[2]; // C
const nama = row[3]; // D
const harga = parseFloat(row[4]); // E
const batasTurun = parseFloat(row[7]); // H
const batasNaik = parseFloat(row[8]); // I
const statusTurun = (row[9] || "").toLowerCase(); // J
const statusNaik = (row[10] || "").toLowerCase(); // K
Logger.log(`Row ${i+1}: ${kode} Harga=${harga}`);
// 🎯 Alert Turun
if (!isNaN(harga) && !isNaN(batasTurun) && harga < batasTurun && statusTurun !== "terkirim") {
alerts.push(`🔻 ${kode} (${nama}) TURUN ke ${harga} (batas: ${batasTurun})`);
sheet.getRange(i + 1, 10).setValue("terkirim"); // kolom J
}
// 🎯 Alert Naik
if (!isNaN(harga) && !isNaN(batasNaik) && harga > batasNaik && statusNaik !== "terkirim") {
alerts.push(`🔺 ${kode} (${nama}) NAIK ke ${harga} (batas: ${batasNaik})`);
sheet.getRange(i + 1, 11).setValue("terkirim"); // kolom K
}
}
if (alerts.length > 0) {
const message = "📢 ALERT SAHAM:\n" + alerts.join("\n");
const url = `https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage`;
UrlFetchApp.fetch(url, {
method: "post",
payload: {
chat_id: TELEGRAM_CHAT_ID,
text: message,
},
});
} else {
Logger.log("Tidak ada alert.");
}
}
/************************************************************
* FUNGSI CEK ALERT SAHAM → TELEGRAM
************************************************************/
function checkStockAlerts() {
if (!SYSTEM_ENABLED || !ALERT_ENABLED) {
Logger.log("Alert system OFF.");
return;
}
const sheet = SpreadsheetApp.getActive().getSheetByName("Sheet1");
const data = sheet.getDataRange().getValues();
let alerts = [];
for (let i = 1; i < data.length; i++) {
const row = data[i];
const onoff = (row[1] || "").toString().toLowerCase(); // kol B
if (onoff !== "on") continue;
const kode = row[2];
const nama = row[3];
const harga = parseFloat(row[4]);
const batasTurun = parseFloat(row[7]);
const batasNaik = parseFloat(row[8]);
const statusTurun = (row[9] || "").toLowerCase();
const statusNaik = (row[10] || "").toLowerCase();
// Turun
if (!isNaN(harga) && !isNaN(batasTurun) && harga < batasTurun && statusTurun !== "terkirim") {
alerts.push(`🔻 ${kode} (${nama}) TURUN ke ${harga} (batas: ${batasTurun})`);
sheet.getRange(i + 1, 10).setValue("terkirim");
}
// Naik
if (!isNaN(harga) && !isNaN(batasNaik) && harga > batasNaik && statusNaik !== "terkirim") {
alerts.push(`🔺 ${kode} (${nama}) NAIK ke ${harga} (batas: ${batasNaik})`);
sheet.getRange(i + 1, 11).setValue("terkirim");
}
}
if (alerts.length === 0) {
Logger.log("Tidak ada alert.");
return;
}
const text = "📢 ALERT SAHAM:\n" + alerts.join("\n");
UrlFetchApp.fetch(`https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage`, {
method: "post",
payload: {
chat_id: TELEGRAM_CHAT_ID,
text: text
}
});
}
Comments
Post a Comment