Spaces:
Sleeping
Sleeping
File size: 3,258 Bytes
587b720 3c65da8 587b720 3c65da8 587b720 3c65da8 aa78d5b 3c65da8 587b720 3c65da8 587b720 3c65da8 bf466fa 3c65da8 14e28ba 3c65da8 59f78c2 3c65da8 14e28ba bf466fa 3c65da8 bf466fa 3c65da8 aa78d5b 3c65da8 d301624 14e28ba | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | import os
import time
import logging
import re
from threading import Thread
from http.server import BaseHTTPRequestHandler, HTTPServer
from supabase import create_client, Client
import requests
from requests.exceptions import ReadTimeout
# --- LOGGING ---
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
logger = logging.getLogger("GreenCafeNotifier")
# --- CONFIG ---
URL = os.environ.get("SUPABASE_URL", "https://eoazyzszahatchuxxnui.supabase.co")
KEY = os.environ.get("SUPABASE_KEY")
TELEGRAM_TOKEN = os.environ.get("TELEGRAM_TOKEN")
GROUP_ID = "-1003956756122"
supabase: Client = create_client(URL, KEY)
# --- HEALTH CHECK ---
class HealthCheckHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b"Green Cafe Notifier Operational.")
def log_message(self, format, *args): return
def run_health_server():
httpd = HTTPServer(('0.0.0.0', 7860), HealthCheckHandler)
httpd.serve_forever()
# --- TELEGRAM RELAY CORE ---
def send_via_relay(payload: dict) -> bool:
try:
edge_url = f"{URL}/functions/v1/telegram-notify"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {KEY}"
}
res = requests.post(edge_url, json=payload, headers=headers, timeout=20)
return res.status_code == 200
except Exception as e:
logger.error(f"Relay Connection Error: {e}")
return False
# --- POLLS TELEGRAM FOR COMMANDS ---
def poll_telegram_feedback():
logger.info("📡 Telegram Poller (Commands Only) started...")
offset = 0
while True:
try:
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/getUpdates"
res = requests.get(url, params={"offset": offset, "timeout": 30}, timeout=45)
data = res.json()
if data.get("ok"):
for update in data.get("result", []):
offset = update["update_id"] + 1
msg = update.get("message")
if msg and msg.get("text"):
text = msg["text"].strip()
from_user = msg.get("from", {}).get("first_name", "Waiter")
oid_match = re.search(r'([a-f0-9-]{8,})', text)
if not oid_match: continue
oid = oid_match.group(1)
if text.startswith("/confirm"):
supabase.table("orders").update({"status": "confirmed"}).eq("id", oid).execute()
send_via_relay({"text": f"✅ Order <b>#{oid[:8]}</b> confirmed by {from_user}!"})
elif text.startswith("/cancel"):
supabase.table("orders").update({"status": "cancelled"}).eq("id", oid).execute()
send_via_relay({"text": f"❌ Order <b>#{oid[:8]}</b> cancelled by {from_user}."})
except ReadTimeout:
continue
except Exception as e:
logger.error(f"Poller error: {e}")
time.sleep(5)
if __name__ == "__main__":
Thread(target=run_health_server, daemon=True).start()
poll_telegram_feedback() |