manlix_manager / database.py
RomanJordansky's picture
Update database.py
8a54980 verified
Raw
History Blame Contribute Delete
5.95 kB
# database.py
import os
import sqlite3
import requests
from huggingface_hub import HfApi, create_repo, repo_exists
HF_TOKEN = os.environ.get("HF_TOKEN")
if not HF_TOKEN:
print("[DB] ❌ НЕТ HF_TOKEN В ПЕРЕМЕННЫХ ОКРУЖЕНИЯ!")
print("[DB] Установи: export HF_TOKEN='твой_токен'")
raise SystemExit("[DB] НЕТ HF_TOKEN!")
REPO_ID = "RomanJordansky/Manlix_Manager-database"
DB_PATH_IN_REPO = "bot_database.db"
HF_URL = f"https://huggingface.co/{REPO_ID}/resolve/main/{DB_PATH_IN_REPO}"
DATA_DIR = "bot_data"
os.makedirs(DATA_DIR, exist_ok=True)
DB_PATH = os.path.join(DATA_DIR, "bot_database.db")
print(f"[DB] База данных: {DB_PATH}")
def create_repo_if_not_exists():
try:
if repo_exists(repo_id=REPO_ID, token=HF_TOKEN):
print(f"[DB] ✅ Репозиторий {REPO_ID} уже существует")
return True
create_repo(repo_id=REPO_ID, token=HF_TOKEN, repo_type="model", private=False, exist_ok=True)
print(f"[DB] ✅ Репозиторий {REPO_ID} создан как MODEL!")
return True
except Exception as e:
print(f"[DB] ❌ Ошибка создания репозитория: {e}")
return False
def download_db():
print("[DB] Попытка загрузить базу данных...")
try:
headers = {"User-Agent": "Mozilla/5.0", "Authorization": f"Bearer {HF_TOKEN}"}
response = requests.get(HF_URL, headers=headers, timeout=30)
if response.status_code == 200:
with open(DB_PATH, 'wb') as f:
f.write(response.content)
print(f"[DB] ✅ База данных загружена! Размер: {os.path.getsize(DB_PATH)} байт")
return True
else:
print(f"[DB] БД не найдена (код {response.status_code})")
return False
except Exception as e:
print(f"[DB] Ошибка загрузки: {e}")
return False
def upload_db():
try:
api = HfApi(token=HF_TOKEN)
api.upload_file(path_or_fileobj=DB_PATH, path_in_repo=DB_PATH_IN_REPO, repo_id=REPO_ID, repo_type="model")
print(f"[DB] ✅ БД сохранена на HF! Размер: {os.path.getsize(DB_PATH)} байт")
return True
except Exception as e:
print(f"[DB] ❌ Ошибка сохранения: {e}")
return False
create_repo_if_not_exists()
db_loaded = download_db()
if not db_loaded:
print("[DB] БД НЕ НАЙДЕНА! СОЗДАЮ НОВУЮ...")
conn = sqlite3.connect(DB_PATH, check_same_thread=False)
cursor = conn.cursor()
def create_tables():
cursor.execute("""
CREATE TABLE IF NOT EXISTS chats (
chat_id INTEGER PRIMARY KEY,
chat_type TEXT DEFAULT 'def',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER,
chat_id INTEGER NULL,
nick TEXT,
role TEXT DEFAULT 'Участник',
level INTEGER DEFAULT 0,
PRIMARY KEY (user_id, chat_id)
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS blocks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
chat_id INTEGER,
moderator_id INTEGER,
reason TEXT,
time TEXT,
block_type TEXT DEFAULT 'ban'
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS warns (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
chat_id INTEGER,
reason TEXT,
time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS mutes (
user_id INTEGER,
chat_id INTEGER,
muted INTEGER DEFAULT 1,
until_time TEXT,
reason TEXT,
PRIMARY KEY (user_id, chat_id)
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS messages (
user_id INTEGER,
chat_id INTEGER,
count INTEGER DEFAULT 0,
last_time TEXT,
PRIMARY KEY (user_id, chat_id)
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS global_nicks (
user_id INTEGER PRIMARY KEY,
nick TEXT,
set_by INTEGER,
set_at TEXT
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS tech_reports (
chat_id INTEGER PRIMARY KEY,
active INTEGER DEFAULT 1
)
""")
# Миграции
try:
cursor.execute("ALTER TABLE chats ADD COLUMN chat_type TEXT DEFAULT 'def'")
except:
pass
try:
cursor.execute("ALTER TABLE messages ADD COLUMN count INTEGER DEFAULT 0")
except:
pass
try:
cursor.execute("ALTER TABLE messages ADD COLUMN last_time TEXT")
except:
pass
try:
cursor.execute("ALTER TABLE mutes ADD COLUMN until_time TEXT")
except:
pass
try:
cursor.execute("ALTER TABLE mutes ADD COLUMN reason TEXT")
except:
pass
try:
cursor.execute("ALTER TABLE blocks ADD COLUMN moderator_id INTEGER")
except:
pass
try:
cursor.execute("ALTER TABLE blocks ADD COLUMN reason TEXT")
except:
pass
try:
cursor.execute("ALTER TABLE blocks ADD COLUMN time TEXT")
except:
pass
try:
cursor.execute("ALTER TABLE blocks ADD COLUMN block_type TEXT DEFAULT 'ban'")
except:
pass
conn.commit()
print("[DB] ✅ Таблицы созданы/проверены")
create_tables()
if not db_loaded:
upload_db()
print("[DB] ✅ Новая БД создана и загружена на HF")