telegram autopilot setup backend
// ==========================================
// 1. GROQ API CREDENTIALS & SETTINGS
// ==========================================
const GROQ_API_KEY = "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";
function callGroq(promptText) {
const url = "https://api.groq.com/openai/v1/chat/completions";
const payload = {
"model": "llama-3.3-70b-versatile",
"messages": [{ "role": "user", "content": promptText }],
"temperature": 0.7
};
const options = {
"method": "post",
"contentType": "application/json",
"headers": { "Authorization": "Bearer " + GROQ_API_KEY },
"payload": JSON.stringify(payload),
"muteHttpExceptions": true
};
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response.getContentText());
if (json.choices && json.choices.length > 0) return json.choices[0].message.content;
else throw new Error("Groq API Error");
}
// ==========================================
// 2. AI CONTENT GENERATOR (With Strict HTML Rules)
// ==========================================
function generateAutoContent() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
// --- 🏏 Cricket Content Generation ---
var cricketSheet = sheet.getSheetByName("Cricket_Posts");
var cricketPrompt = "Write a highly engaging Telegram post (in a mix of Hindi and English) about the latest trending cricket news or match updates. Use appropriate emojis. STRICT RULE: Use ONLY HTML tags for bold text and for italic. DO NOT use markdown like ** or *. Do not add any intro/outro text, just give the direct message ready to post.";
try {
var rawCricketText = callGroq(cricketPrompt);
var cleanCricketText = rawCricketText.replace(/```html/g, "").replace(/```/g, "").trim();
cricketSheet.appendRow([new Date(), cleanCricketText, "Pending"]);
} catch (error) {
Logger.log("Cricket AI Error: " + error.message);
}
// --- 🩺 NEET Content Generation ---
var neetSheet = sheet.getSheetByName("NEET_Posts");
var neetPrompt = "Write one high-yield study fact and one challenging MCQ for NEET 2027 preparation (Subject: Biology, Physics, or Chemistry). Keep an encouraging tone for future doctors in a Hindi-English mix. Use emojis. STRICT RULE: Use ONLY HTML tags for bold text. DO NOT use markdown like **. Provide the correct answer and a 1-line explanation at the end. Do not add any intro/outro text, just the direct message.";
try {
var rawNeetText = callGroq(neetPrompt);
var cleanNeetText = rawNeetText.replace(/```html/g, "").replace(/```/g, "").trim();
neetSheet.appendRow([new Date(), cleanNeetText, "Pending"]);
} catch (error) {
Logger.log("NEET AI Error: " + error.message);
}
}
// ==========================================
// 3. TELEGRAM AUTO-POSTER LOGIC
// ==========================================
function autoPostToTelegram() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var configSheet = sheet.getSheetByName("Config");
var botToken = configSheet.getRange("B1").getValue();
var cricketChatId = configSheet.getRange("B2").getValue();
var neetChatId = configSheet.getRange("B3").getValue();
function processSheet(sheetName, chatId) {
var dataSheet = sheet.getSheetByName(sheetName);
if (!dataSheet) return;
var lastRow = dataSheet.getLastRow();
if (lastRow < 2) return;
var data = dataSheet.getRange(2, 1, lastRow - 1, 3).getValues();
var lock = LockService.getScriptLock();
if (!lock.tryLock(10000)) return;
try {
for (var i = 0; i < data.length; i++) {
var message = data[i][1];
var status = data[i][2];
if (message !== "" && (status === "" || status === "Pending")) {
var success = sendMessage(botToken, chatId, message);
if(success) {
dataSheet.getRange(i + 2, 3).setValue("Sent");
} else {
dataSheet.getRange(i + 2, 3).setValue("Failed");
}
break;
}
}
} finally {
lock.releaseLock();
}
}
processSheet("Cricket_Posts", cricketChatId);
processSheet("NEET_Posts", neetChatId);
}
// ==========================================
// 4. TELEGRAM API CALL (Error Handled)
// ==========================================
function sendMessage(botToken, chatId, text) {
var url = "https://api.telegram.org/bot" + botToken + "/sendMessage";
var payload = { "chat_id": chatId, "text": text, "parse_mode": "HTML" };
var options = { "method": "post", "payload": payload, "muteHttpExceptions": true };
try {
var response = UrlFetchApp.fetch(url, options);
return response.getResponseCode() === 200;
} catch(e) {
return false;
}
}
// ==========================================
// ⭐ 5. MASTER CONTROLLER (Isi ko Trigger karna hai)
// ==========================================
function runMasterAutoPilot() {
// Step 1: Naya content Groq API se likhwa kar Sheet me save karega
generateAutoContent();
// Step 2: Sheet ko save hone ke liye thoda samay (flush & sleep) dega
SpreadsheetApp.flush();
Utilities.sleep(3000); // 3 seconds wait
// Step 3: Sheet se 'Pending' message padh kar Telegram me bhej dega
autoPostToTelegram();
}
// ==========================================
// 6. WEBHOOK HANDLER (User Interaction & Buttons)
// ==========================================
function doPost(e) {
// 💡 ADVANCED LOGIC: Webhook Acknowledgment (Telegram ko bar-bar bhejne se rokne ke liye)
if (!e || !e.postData) {
return ContentService.createTextOutput("OK");
}
var data = JSON.parse(e.postData.contents);
// Agar kisi ne inline button (Callback Query) par click kiya ha
if (data.callback_query) {
var callbackQueryId = data.callback_query.id;
var chatId = data.callback_query.message.chat.id;
var buttonData = data.callback_query.data; // Jaise ki "A", "B", "APPROVE"
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var botToken = sheet.getSheetByName("Config").getRange("B1").getValue();
// 💡 ADVANCED LOGIC: answerCallbackQuery (Button ka loading ghoomna band karne ke liye)
var url = "https://api.telegram.org/bot" + botToken + "/answerCallbackQuery";
var payload = {
"callback_query_id": callbackQueryId,
"text": "Response Recorded: " + buttonData, // User ko chota sa pop-up dikhega
"show_alert": false
};
var options = {
"method": "post",
"payload": payload,
"muteHttpExceptions": true
};
UrlFetchApp.fetch(url, options);
// Future Note: Yahan hum aapka '/editMessageText' wala logic laga sakte hain
// taaki vote count badh sake ya live result dikh sake.
}
// Final Signal: Telegram ko batao ki "Hame data mil gaya hai"
return ContentService.createTextOutput("OK");
}