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"); }