import logging, pycafe, os, pytz, requests, json, time
from datetime import datetime
from threading import Thread
from bottle import route, run
import variabile_globale as vg
from clasa_si_analizare import TwitchBot
from get_user_id import get_user_id
# Inițializează loggerul
logger = logging.getLogger("twitch_bot")
def set_env_from_secrets(secret_names):
for name in secret_names:
if name in os.environ:
logger.info(f"Variabila de mediu {name} este deja setată.")
else:
try:
value = pycafe.get_secret(name)
os.environ[name] = value
logger.info(f"Variabila de mediu {name} a fost setată din secretul pycafe.")
except Exception as e:
logger.error(f"Eroare la obținerea secretului {name} din pycafe: {e}")
raise SystemExit(f"Lipsește secretul necesar: {name}")
def update_bot_token(new_token: str) -> None:
os.environ["BOT_ACCESS_TOKEN"] = new_token
vg.bot_access_token = new_token
logger.info("BOT_ACCESS_TOKEN a fost actualizat în variabilele de mediu și globale.")
@route("/", method="GET")
def home() -> str:
return ":)"
if __name__ == "__main__":
# Configurează logging-ul
logger.setLevel(logging.INFO)
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler("startup-log.txt", mode="a", encoding="utf-8")
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# Loghează pornirea aplicației
logger.info("Aplicația a pornit")
# Lista cu numele secretelor din pycafe
secret_names = [
"BOT_ACCESS_TOKEN",
"BOT_CLIENT_ID",
"BOT_CLIENT_SECRET", # Verifică dacă e necesar!
"BOT_REFRESH_TOKEN",
"BOT_USERNAME",
"OWNER"
]
# Setează variabilele de mediu din secrete doar dacă nu sunt deja setate
set_env_from_secrets(secret_names)
# Inițializează variabilele globale folosind variabilele de mediu
vg.initialize()
# Ping pentru reîmprospătarea tokenului de acces
refresh_url = f"https://twitchtokengenerator.com/api/refresh/{vg.bot_refresh_token}"
try:
response = requests.get(refresh_url, timeout=5)
if response.status_code == 200:
data = response.json()
token = data.get("token")
if token:
logger.info("Ping reușit pentru reîmprospătarea tokenului")
update_bot_token(token)
else:
logger.warning("Răspunsul nu conține câmpul «token»")
else:
logger.warning(f"Ping eșuat pe refresh token. Cod status: {response.status_code}")
except requests.exceptions.Timeout:
logger.error("Ping eșuat: Timeout atins")
except requests.exceptions.RequestException as exc:
logger.error(f"Ping eșuat: {exc}")
# Pornește Bottle într-un thread separat
Thread(target=lambda: run(host="0.0.0.0", port=3000, quiet=False)).start()
# Inițializează și pornește botul Twitch
vg.bot_id = get_user_id(vg.bot_username)
vg.owner_id = get_user_id(vg.owner)
bot = TwitchBot(vg.bot_username, vg.bot_client_id, vg.bot_access_token, vg.owner)
bot.start()