This commit is contained in:
2026-02-27 16:05:45 +03:00
parent a57a5278d6
commit bb96aa1cce
5 changed files with 73 additions and 6 deletions
+2
View File
@@ -8,3 +8,5 @@ wheels/
# Virtual environments # Virtual environments
.venv .venv
config.toml
+10
View File
@@ -0,0 +1,10 @@
[bot]
token = "YOUR_BOT_TOKEN"
creator_id = 123456789
[database]
host = "localhost"
port = 5432
user = "postgres"
password = "password"
database = "dutylog"
+1 -1
View File
@@ -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()
+60 -5
View File
@@ -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"],
),
) )