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()