Añadiendo todos los archivos del proyecto (incluidos secretos y venv)
This commit is contained in:
124
botdiscord/config.py
Normal file
124
botdiscord/config.py
Normal file
@@ -0,0 +1,124 @@
|
||||
import yaml
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
_config = None
|
||||
|
||||
def load_config(config_path: str = None) -> dict:
|
||||
global _config
|
||||
if _config is None:
|
||||
config = {}
|
||||
|
||||
defaults = {
|
||||
"discord": {
|
||||
"token": ""
|
||||
},
|
||||
"telegram": {
|
||||
"token": ""
|
||||
},
|
||||
"libretranslate": {
|
||||
"url": ""
|
||||
},
|
||||
"web": {
|
||||
"host": "0.0.0.0",
|
||||
"port": 8000,
|
||||
"admin_username": "",
|
||||
"admin_password": ""
|
||||
},
|
||||
"database": {
|
||||
"type": "sqlite",
|
||||
"path": "bots_config.db",
|
||||
"host": "",
|
||||
"port": 3306,
|
||||
"user": "",
|
||||
"password": "",
|
||||
"name": "mi_red"
|
||||
},
|
||||
"languages": {
|
||||
"enabled": [
|
||||
{"code": "en", "name": "English"},
|
||||
{"code": "es", "name": "Español"},
|
||||
{"code": "fr", "name": "Français"},
|
||||
{"code": "de", "name": "Deutsch"},
|
||||
{"code": "it", "name": "Italiano"},
|
||||
{"code": "pt", "name": "Português"}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
config = defaults.copy()
|
||||
|
||||
if config_path is None:
|
||||
config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "config.yaml")
|
||||
|
||||
if os.path.exists(config_path):
|
||||
with open(config_path, "r") as f:
|
||||
yaml_config = yaml.safe_load(f)
|
||||
if yaml_config:
|
||||
_merge_config(config, yaml_config)
|
||||
|
||||
env_mappings = {
|
||||
"DISCORD_TOKEN": ("discord", "token"),
|
||||
"TELEGRAM_TOKEN": ("telegram", "token"),
|
||||
"LIBRETRANSLATE_URL": ("libretranslate", "url"),
|
||||
"WEB_HOST": ("web", "host"),
|
||||
"WEB_PORT": ("web", "port", int),
|
||||
"ADMIN_USERNAME": ("web", "admin_username"),
|
||||
"ADMIN_PASSWORD": ("web", "admin_password"),
|
||||
"DATABASE_PATH": ("database", "path"),
|
||||
"DB_TYPE": ("database", "type"),
|
||||
"DB_HOST": ("database", "host"),
|
||||
"DB_PORT": ("database", "port", int),
|
||||
"DB_USER": ("database", "user"),
|
||||
"DB_PASSWORD": ("database", "password"),
|
||||
"DB_NAME": ("database", "name"),
|
||||
}
|
||||
|
||||
for env_key, (section, key, *transform) in env_mappings.items():
|
||||
env_val = os.getenv(env_key)
|
||||
if env_val:
|
||||
if transform:
|
||||
env_val = transform[0](env_val)
|
||||
config[section][key] = env_val
|
||||
|
||||
_config = config
|
||||
|
||||
return _config
|
||||
|
||||
def _merge_config(config: dict, yaml_config: dict):
|
||||
for key, value in yaml_config.items():
|
||||
if key in config and isinstance(config[key], dict) and isinstance(value, dict):
|
||||
config[key].update({k: v for k, v in value.items() if v})
|
||||
elif value:
|
||||
config[key] = value
|
||||
|
||||
def get_config() -> dict:
|
||||
if _config is None:
|
||||
load_config()
|
||||
return _config
|
||||
|
||||
def get_discord_token() -> str:
|
||||
return get_config().get("discord", {}).get("token", "")
|
||||
|
||||
def get_telegram_token() -> str:
|
||||
return get_config().get("telegram", {}).get("token", "")
|
||||
|
||||
def get_libretranslate_url() -> str:
|
||||
return get_config().get("libretranslate", {}).get("url", "")
|
||||
|
||||
def get_languages() -> list:
|
||||
return get_config().get("languages", {}).get("enabled", [])
|
||||
|
||||
def get_db_path() -> str:
|
||||
return get_config().get("database", {}).get("path", "bots_config.db")
|
||||
|
||||
def get_db_config() -> dict:
|
||||
return get_config().get("database", {})
|
||||
|
||||
def get_db_type() -> str:
|
||||
return get_config().get("database", {}).get("type", "sqlite")
|
||||
|
||||
def get_web_config() -> dict:
|
||||
return get_config().get("web", {})
|
||||
Reference in New Issue
Block a user