diff --git a/app.py b/app.py index beb9739..f33bc0a 100644 --- a/app.py +++ b/app.py @@ -79,7 +79,7 @@ def log_event(event: str, **kwargs): logger.info(f"{base} {details}") # ============================================================ -# INIT +# INIT CONFIG # ============================================================ config = Config() @@ -90,7 +90,7 @@ if missing: raise SystemExit(1) # ============================================================ -# STATE + CACHE +# STATE & Cache # ============================================================ KNOWN_EXTERNAL_USERS = {} @@ -104,7 +104,7 @@ CACHE_FILE = "/app/cache/known_users.json" CACHE_DIRTY = False # ============================================================ -# CACHE HANDLING +# CACHE Handling # ============================================================ def load_cache(): @@ -127,9 +127,6 @@ def load_cache(): def save_cache(): global CACHE_DIRTY - if not CACHE_DIRTY: - return - try: with CACHE_LOCK: os.makedirs(os.path.dirname(CACHE_FILE), exist_ok=True) @@ -186,7 +183,7 @@ def get_role(user_id): return "admin" if user_id in config.admin_users else "user" # ============================================================ -# RATE LIMIT (FIXED) +# RATE LIMIT # ============================================================ def is_rate_limited(domain, sender): @@ -294,7 +291,6 @@ def is_likely_dm_create(payload): return True invite = payload.get("invite", []) - if isinstance(invite, list) and len(invite) == 1: return True @@ -315,6 +311,24 @@ def is_likely_dm_event(event): members = [e for e in state if e.get("type") == "m.room.member"] return len(members) <= 2 +# ============================================================ +# INIT (🔥 CRITICAL FIX FOR GUNICORN) +# ============================================================ + +def init_app(): + logger.info("Initializing interceptor (gunicorn mode)...") + + load_cache() + seed_known_users() + + threading.Thread(target=periodic_seed, daemon=True).start() + threading.Thread(target=periodic_cache_save, daemon=True).start() + + logger.info("Initialization complete") + +init_app() + + # ============================================================ # ROUTES # ============================================================ @@ -475,16 +489,3 @@ def forward_request(method, url, headers, body): return Response(status=200) return Response(status=502) - -# ============================================================ -# START -# ============================================================ - -if __name__ == '__main__': - load_cache() - seed_known_users() - - threading.Thread(target=periodic_seed, daemon=True).start() - threading.Thread(target=periodic_cache_save, daemon=True).start() - - app.run(host='0.0.0.0', port=5000)