from contextlib import asynccontextmanager from fastapi import FastAPI, Depends from sqlalchemy.ext.asyncio import AsyncSession from fastapi.responses import HTMLResponse import uvicorn from telethon import TelegramClient import base64 import aiohttp import time from app.dependencies import get_session from app.models.user import User from config import config client = TelegramClient('nowplaying_callback', config.api_id, config.api_hash) @asynccontextmanager async def lifespan(app: FastAPI): global r await client.connect() await client.sign_in(bot_token=config.bot_token) yield app = FastAPI(lifespan=lifespan) creds = base64.b64encode(config.spotify.client_id.encode() + b':' + config.spotify.client_secret.encode()).decode( "utf-8") async def get_spotify_token(code: str, user_id: int): token_headers = { "Authorization": "Basic " + creds, "Content-Type": "application/x-www-form-urlencoded" } token_data = { "grant_type": "authorization_code", "code": code, "redirect_uri": config.spotify.redirect } async with aiohttp.ClientSession() as session: resp = await session.post("https://accounts.spotify.com/api/token", data=token_data, headers=token_headers) resp = await resp.json() return resp['access_token'], resp['refresh_token'], int(resp['expires_in']) def generate_success_reponse(): content = """