diff options
| author | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
|---|---|---|
| committer | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
| commit | e5abc1fe99340b979b18864d978179f71fe8f5c5 (patch) | |
| tree | 98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /files/TG_bot_VPN-main/database/models.py | |
First
Diffstat (limited to 'files/TG_bot_VPN-main/database/models.py')
| -rw-r--r-- | files/TG_bot_VPN-main/database/models.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/files/TG_bot_VPN-main/database/models.py b/files/TG_bot_VPN-main/database/models.py new file mode 100644 index 0000000..ded6bae --- /dev/null +++ b/files/TG_bot_VPN-main/database/models.py @@ -0,0 +1,69 @@ +import datetime +import os.path +import re + +from config_data.config import BASE_DIR +import peewee + +db = peewee.SqliteDatabase(os.path.join(BASE_DIR, "database/database.db")) + + +class BaseModel(peewee.Model): + """ Базовая модель """ + class Meta: + database = db + + +class Server(BaseModel): + """ Модель сервера для подключения VPN """ + username = peewee.CharField() + password = peewee.CharField() + location = peewee.CharField() + ip_address = peewee.CharField(unique=True) + public_key = peewee.CharField(null=True, unique=True) + + +class VPNKey(BaseModel): + """ Модель для VPN ключа. Привязан к серверу. Имеет qr код (картинка) для подключения """ + server = peewee.ForeignKeyField(Server, related_name="keys", + on_delete="cascade", + on_update="cascade") + name = peewee.CharField() + key = peewee.CharField(unique=True) + qr_code = peewee.CharField() + is_valid = peewee.BooleanField(default=True) + created_at = peewee.DateTimeField(default=datetime.datetime.now()) + updated_at = peewee.DateTimeField(default=datetime.datetime.now()) + + def extract_uuid(self) -> str | None: + """ + Извлекает UUID из VLESS-ссылки ключа. + """ + match = re.match(r'vless://([a-fA-F0-9-]{36})@', self.key) + return match.group(1) if match else None + + +class User(BaseModel): + """ Модель пользователя """ + user_id = peewee.CharField(unique=True) + full_name = peewee.CharField() + username = peewee.CharField() + is_premium = peewee.BooleanField(null=True) + is_subscribed = peewee.BooleanField(default=False) + vpn_key = peewee.ForeignKeyField(VPNKey, related_name="users", null=True, on_update="set null", + on_delete="set null") + + +class Group(BaseModel): + """ Класс группы """ + group_id = peewee.CharField(unique=True) + title = peewee.CharField() + description = peewee.TextField(null=True) + bio = peewee.TextField(null=True) + invite_link = peewee.CharField(null=True) + location = peewee.CharField(null=True) + username = peewee.CharField(null=True) + + +def create_models(): + db.create_tables(BaseModel.__subclasses__()) |
