ibrohm commited on
Commit
54b53dc
·
verified ·
1 Parent(s): 6062b21

Upload app.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. app.py +21 -2
app.py CHANGED
@@ -8,7 +8,7 @@ import sys
8
  import os
9
 
10
  from fastapi import FastAPI, Request
11
- from fastapi.responses import Response
12
  from aiogram import Bot, Dispatcher
13
  from aiogram.fsm.storage.memory import MemoryStorage
14
  from aiogram.client.default import DefaultBotProperties
@@ -23,7 +23,7 @@ from config import BOT_TOKEN
23
  from services.db import init_db
24
 
25
  # Handlerlar
26
- from handlers import start, generate, read_qr, settings, batch, history, inline, admin
27
 
28
  # Logging
29
  logging.basicConfig(
@@ -54,6 +54,7 @@ dp.include_router(batch.router)
54
  dp.include_router(history.router)
55
  dp.include_router(inline.router)
56
  dp.include_router(read_qr.router)
 
57
 
58
  # FastAPI
59
  app = FastAPI(title="QR Bot Webhook Service")
@@ -104,6 +105,24 @@ async def root():
104
  return {"status": "running", "mode": "webhook"}
105
 
106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  @app.get("/api/qr")
108
  async def api_qr(data: str = ""):
109
  """Inline rejim uchun QR kod rasmini qaytaruvchi endpoint"""
 
8
  import os
9
 
10
  from fastapi import FastAPI, Request
11
+ from fastapi.responses import Response, RedirectResponse, HTMLResponse
12
  from aiogram import Bot, Dispatcher
13
  from aiogram.fsm.storage.memory import MemoryStorage
14
  from aiogram.client.default import DefaultBotProperties
 
23
  from services.db import init_db
24
 
25
  # Handlerlar
26
+ from handlers import start, generate, read_qr, settings, batch, history, inline, admin, dynamic
27
 
28
  # Logging
29
  logging.basicConfig(
 
54
  dp.include_router(history.router)
55
  dp.include_router(inline.router)
56
  dp.include_router(read_qr.router)
57
+ dp.include_router(dynamic.router)
58
 
59
  # FastAPI
60
  app = FastAPI(title="QR Bot Webhook Service")
 
105
  return {"status": "running", "mode": "webhook"}
106
 
107
 
108
+ @app.get("/r/{code}")
109
+ async def redirect_dynamic_qr(code: str, request: Request):
110
+ """Dinamik QR kod skanerlaganda — skanerni yozib, maqsad URL ga yo'naltirish"""
111
+ from services.db import get_link_by_code, log_scan
112
+ link = await get_link_by_code(code)
113
+ if not link:
114
+ return HTMLResponse(
115
+ "<h2>QR kod topilmadi yoki muddati tugagan</h2><p>Bu havola mavjud emas.</p>",
116
+ status_code=404
117
+ )
118
+ # Skanerni qayd qilish
119
+ ip = request.client.host if request.client else ""
120
+ ua = request.headers.get("user-agent", "")
121
+ await log_scan(code, ip=ip, user_agent=ua)
122
+
123
+ return RedirectResponse(url=link["target_url"], status_code=302)
124
+
125
+
126
  @app.get("/api/qr")
127
  async def api_qr(data: str = ""):
128
  """Inline rejim uchun QR kod rasmini qaytaruvchi endpoint"""