mirror of
https://github.com/koloideal/DutyLog.git
synced 2026-06-10 10:25:29 +03:00
initial
This commit is contained in:
@@ -8,3 +8,5 @@ wheels/
|
|||||||
|
|
||||||
# Virtual environments
|
# Virtual environments
|
||||||
.venv
|
.venv
|
||||||
|
|
||||||
|
config.toml
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
[bot]
|
||||||
|
token = "YOUR_BOT_TOKEN"
|
||||||
|
creator_id = 123456789
|
||||||
|
|
||||||
|
[database]
|
||||||
|
host = "localhost"
|
||||||
|
port = 5432
|
||||||
|
user = "postgres"
|
||||||
|
password = "password"
|
||||||
|
database = "dutylog"
|
||||||
@@ -17,7 +17,7 @@ async def main():
|
|||||||
config = load_config()
|
config = load_config()
|
||||||
|
|
||||||
bot = Bot(
|
bot = Bot(
|
||||||
token=config.bot_token,
|
token=config.bot.token,
|
||||||
default=DefaultBotProperties(parse_mode=ParseMode.HTML)
|
default=DefaultBotProperties(parse_mode=ParseMode.HTML)
|
||||||
)
|
)
|
||||||
dp = Dispatcher()
|
dp = Dispatcher()
|
||||||
|
|||||||
@@ -1,15 +1,70 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from os import getenv
|
from pathlib import Path
|
||||||
|
|
||||||
|
import tomllib
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class BotConfig:
|
||||||
|
token: str
|
||||||
|
creator_id: int
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class DatabaseConfig:
|
||||||
|
host: str
|
||||||
|
port: int
|
||||||
|
user: str
|
||||||
|
password: str
|
||||||
|
database: str
|
||||||
|
|
||||||
|
@property
|
||||||
|
def url(self) -> str:
|
||||||
|
return f"postgresql+asyncpg://{self.user}:{self.password}@{self.host}:{self.port}/{self.database}"
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Config:
|
class Config:
|
||||||
bot_token: str
|
bot: BotConfig
|
||||||
database_url: str
|
database: DatabaseConfig
|
||||||
|
|
||||||
|
|
||||||
def load_config() -> Config:
|
def load_config() -> Config:
|
||||||
|
config_path = Path("config.toml")
|
||||||
|
|
||||||
|
if not config_path.exists():
|
||||||
|
raise FileNotFoundError(f"Config file not found: {config_path}")
|
||||||
|
|
||||||
|
with open(config_path, "rb") as f:
|
||||||
|
data = tomllib.load(f)
|
||||||
|
|
||||||
|
if "bot" not in data:
|
||||||
|
raise KeyError("Missing required section: bot")
|
||||||
|
if "database" not in data:
|
||||||
|
raise KeyError("Missing required section: database")
|
||||||
|
|
||||||
|
bot_data = data["bot"]
|
||||||
|
if "token" not in bot_data:
|
||||||
|
raise KeyError("Missing required field: bot.token")
|
||||||
|
if "creator_id" not in bot_data:
|
||||||
|
raise KeyError("Missing required field: bot.creator_id")
|
||||||
|
|
||||||
|
database_data = data["database"]
|
||||||
|
required_db_fields = ["host", "port", "user", "password", "database"]
|
||||||
|
for field in required_db_fields:
|
||||||
|
if field not in database_data:
|
||||||
|
raise KeyError(f"Missing required field: database.{field}")
|
||||||
|
|
||||||
return Config(
|
return Config(
|
||||||
bot_token=getenv("BOT_TOKEN", ""),
|
bot=BotConfig(
|
||||||
database_url=getenv("DATABASE_URL", "sqlite+aiosqlite:///./db.sqlite3"),
|
token=bot_data["token"],
|
||||||
|
creator_id=bot_data["creator_id"],
|
||||||
|
),
|
||||||
|
database=DatabaseConfig(
|
||||||
|
host=database_data["host"],
|
||||||
|
port=database_data["port"],
|
||||||
|
user=database_data["user"],
|
||||||
|
password=database_data["password"],
|
||||||
|
database=database_data["database"],
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user