File size: 5,949 Bytes
0939ee3
 
e193cba
4ebb06b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e193cba
4ebb06b
 
 
 
 
 
e193cba
4ebb06b
 
1be4974
4ebb06b
 
1be4974
4ebb06b
 
 
 
 
 
 
1be4974
4ebb06b
 
 
 
 
1be4974
4ebb06b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8a54980
4ebb06b
f7bb136
4ebb06b
 
 
 
 
 
 
 
 
 
1be4974
4ebb06b
 
 
 
 
 
 
8a54980
 
 
 
4ebb06b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4f4a513
 
4ebb06b
 
 
 
 
e7480ab
4ebb06b
 
 
 
 
 
 
 
5ca8b86
 
 
0939ee3
5ca8b86
 
 
 
 
0939ee3
 
 
 
 
 
 
8a54980
 
 
 
 
e7480ab
 
b95f79a
 
 
e7480ab
 
 
4f4a513
 
 
 
 
 
 
 
8a54980
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4f4a513
4ebb06b
 
e193cba
4ebb06b
e7480ab
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# 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")