add telegram post creation feature but experimental
This commit is contained in:
@@ -2419,13 +2419,20 @@ async def settings_page(request: Request):
|
||||
# Get LinkedIn account if linked
|
||||
linkedin_account = await db.get_linkedin_account(user_id)
|
||||
|
||||
# Get Telegram account if feature is enabled
|
||||
telegram_account = None
|
||||
if settings.telegram_enabled:
|
||||
telegram_account = await db.get_telegram_account(user_id)
|
||||
|
||||
return templates.TemplateResponse("settings.html", {
|
||||
"request": request,
|
||||
"page": "settings",
|
||||
"session": session,
|
||||
"profile": profile,
|
||||
"profile_picture": profile_picture,
|
||||
"linkedin_account": linkedin_account
|
||||
"linkedin_account": linkedin_account,
|
||||
"telegram_enabled": settings.telegram_enabled,
|
||||
"telegram_account": telegram_account,
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"Error loading settings: {e}")
|
||||
@@ -4720,3 +4727,57 @@ async def proxy_supabase_image(bucket: str, path: str):
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to proxy image {bucket}/{path}: {e}")
|
||||
raise HTTPException(status_code=500, detail="Failed to load image")
|
||||
|
||||
|
||||
# ==================== TELEGRAM BOT ====================
|
||||
|
||||
if settings.telegram_enabled:
|
||||
import secrets as _secrets
|
||||
from src.services.telegram_service import telegram_service as _telegram_service
|
||||
|
||||
@user_router.get("/settings/telegram/start")
|
||||
async def telegram_start_link(request: Request):
|
||||
"""Generate a one-time Telegram linking token and return the bot link."""
|
||||
session = require_user_session(request)
|
||||
if not session:
|
||||
raise HTTPException(status_code=401, detail="Not authenticated")
|
||||
|
||||
from src.services.redis_client import get_redis
|
||||
token = _secrets.token_urlsafe(32)
|
||||
try:
|
||||
redis = await get_redis()
|
||||
await redis.setex(f"telegram_link:{token}", 600, session.user_id)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to store telegram link token: {e}")
|
||||
raise HTTPException(status_code=500, detail="Failed to generate link")
|
||||
|
||||
return JSONResponse({
|
||||
"bot_username": settings.telegram_bot_username,
|
||||
"token": token
|
||||
})
|
||||
|
||||
@user_router.post("/api/telegram/webhook")
|
||||
async def telegram_webhook(request: Request):
|
||||
"""Receive Telegram webhook updates."""
|
||||
secret = request.headers.get("X-Telegram-Bot-Api-Secret-Token", "")
|
||||
if secret != settings.telegram_webhook_secret:
|
||||
raise HTTPException(status_code=403, detail="Invalid secret")
|
||||
|
||||
try:
|
||||
update = await request.json()
|
||||
if _telegram_service:
|
||||
await _telegram_service.handle_update(update, db)
|
||||
except Exception as e:
|
||||
logger.error(f"Telegram webhook error: {e}")
|
||||
# Always return 200 — Telegram requires it
|
||||
return {"ok": True}
|
||||
|
||||
@user_router.post("/api/settings/telegram/disconnect")
|
||||
async def telegram_disconnect(request: Request):
|
||||
"""Disconnect Telegram account."""
|
||||
session = require_user_session(request)
|
||||
if not session:
|
||||
raise HTTPException(status_code=401, detail="Not authenticated")
|
||||
|
||||
await db.delete_telegram_account(UUID(session.user_id))
|
||||
return JSONResponse({"success": True})
|
||||
|
||||
Reference in New Issue
Block a user