-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathconfig.py
69 lines (55 loc) · 1.57 KB
/
config.py
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
from dataclasses import dataclass
from environs import Env
@dataclass
class TgBot:
token: str
admin_id: int
port: int
@staticmethod
def from_env(env: Env):
token = env.str("BOT_TOKEN")
admin_id = env.int("ADMIN")
port = env.int("BOT_PORT")
return TgBot(token=token, admin_id=admin_id, port=port)
@dataclass
class Webhook:
url: str
domain: str
use_webhook: bool
@staticmethod
def from_env(env: Env):
url = env.str('SERVER_URL')
domain = env.str('DOMAIN')
use_webhook = env.bool('USE_WEBHOOK')
return Webhook(url=url, domain=domain, use_webhook=use_webhook)
@dataclass
class Marzban:
username: str
password: str
token_expire: int
verify_ssl: bool
@staticmethod
def from_env(env: Env, env_marz: Env):
username = env_marz.str("SUDO_USERNAME")
password = env_marz.str("SUDO_PASSWORD")
token_expire = env_marz.int("JWT_ACCESS_TOKEN_EXPIRE_MINUTES", 1440)
verify_ssl = env.bool("MARZ_HAS_CERTIFICATE")
return Marzban(username=username, password=password,
token_expire=token_expire,
verify_ssl=verify_ssl)
@dataclass
class Config:
tg_bot: TgBot
webhook: Webhook
marzban: Marzban
def load_config():
from environs import Env
env = Env()
env.read_env('.env')
env_marz = Env()
env_marz.read_env('.env.marzban')
return Config(
tg_bot=TgBot.from_env(env),
webhook=Webhook.from_env(env),
marzban=Marzban.from_env(env, env_marz)
)