import requests import os import time TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") HF_API_URL = os.getenv("HF_API_URL") BASE_URL = f"https://api.telegram.org/bot{TOKEN}" STATE_FILE = ".github/state/last_id.txt" def load_last_id(): try: with open(STATE_FILE, "r") as f: return int(f.read().strip()) except: return 0 def save_last_id(last_id): with open(STATE_FILE, "w") as f: f.write(str(last_id)) def get_updates(): url = f"{BASE_URL}/getUpdates" return requests.get(url, params={"timeout": 10}).json() def send_message(chat_id, text): requests.post(f"{BASE_URL}/sendMessage", json={ "chat_id": chat_id, "text": text[:4000] }) def main(): print("🚀 Checking Telegram...") last_id = load_last_id() print(f"📌 Last processed ID: {last_id}") data = get_updates() updates = data.get("result", []) if not updates: print("📭 No messages") return current_time = int(time.time()) new_last_id = last_id for update in updates: update_id = update["update_id"] # 🔥 Skip already processed if update_id <= last_id: continue message = update.get("message", {}) chat_id = message.get("chat", {}).get("id") text = message.get("text", "") message_time = message.get("date", 0) # 🔥 Ignore old messages if current_time - message_time > 180: continue if not text: continue print(f"📩 User: {text}") try: response = requests.post( HF_API_URL, json={ "message": text, "chat_id": str(chat_id) }, timeout=180 ) if response.status_code == 200: reply = response.json().get("reply", "⚠️ Empty reply") else: print("❌ HF error:", response.text) reply = "⚠️ AI error" except Exception as e: print("❌ Request failed:", str(e)) reply = "⚠️ Request failed" print(f"🤖 Reply: {reply}") send_message(chat_id, reply) # track latest new_last_id = max(new_last_id, update_id) # 🔥 Save only if new messages processed if new_last_id != last_id: save_last_id(new_last_id) print(f"✅ Updated last_id: {new_last_id}") if __name__ == "__main__": main()