Feat: minimal configuration
This commit is contained in:
27
main.py
Normal file
27
main.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
from sys import exit
|
||||||
|
|
||||||
|
import uvloop
|
||||||
|
from aiogram import Bot, Dispatcher
|
||||||
|
|
||||||
|
from nwxraybot import Settings
|
||||||
|
from nwxraybot.handlers import HelloHandler
|
||||||
|
from nwxraybot.models import User
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
config = Settings() # Load config from .env
|
||||||
|
logging.basicConfig(level=logging.DEBUG if config.debug else logging.INFO)
|
||||||
|
|
||||||
|
print(config.postgres_url)
|
||||||
|
|
||||||
|
# Check if bot token is set
|
||||||
|
if config.bot_token == 'token':
|
||||||
|
logging.error("Bot token is not set")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
# Start bot
|
||||||
|
bot = Bot(token=config.bot_token.get_secret_value())
|
||||||
|
dp = Dispatcher()
|
||||||
|
dp.include_routers(HelloHandler(bot)())
|
||||||
|
uvloop.run(dp.start_polling(bot, skip_updates=True))
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
from nwxraybot.config import Settings
|
||||||
|
|||||||
0
nwxraybot/bot.py
Normal file
0
nwxraybot/bot.py
Normal file
@@ -3,4 +3,19 @@ from pydantic_settings import BaseSettings
|
|||||||
|
|
||||||
|
|
||||||
class Settings(BaseSettings):
|
class Settings(BaseSettings):
|
||||||
bot_token: SecretStr = Field(..., env="BOT_TOKEN")
|
bot_token: SecretStr = Field('token', env="BOT_TOKEN")
|
||||||
|
debug: bool = Field(False, env="DEBUG")
|
||||||
|
postgres_user: str = Field('user', env="POSTGRES_USER")
|
||||||
|
postgres_password: SecretStr = Field('password', env="POSTGRES_PASSWORD")
|
||||||
|
postgres_db: str = Field('db', env="POSTGRES_DB")
|
||||||
|
postgres_host: str = Field('localhost', env="POSTGRES_HOST")
|
||||||
|
postgres_port: int = Field(15432, env="POSTGRES_PORT")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def postgres_url(self) -> str:
|
||||||
|
return f"postgresql://{self.postgres_user}:{
|
||||||
|
self.postgres_password.get_secret_value()}@{self.postgres_host}:{self.postgres_port}/{self.postgres_db}"
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
env_file = ".env"
|
||||||
|
env_file_encoding = "utf-8"
|
||||||
|
|||||||
1
nwxraybot/handlers/__init__.py
Normal file
1
nwxraybot/handlers/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from nwxraybot.handlers.hello import HelloHandler
|
||||||
13
nwxraybot/handlers/hello.py
Normal file
13
nwxraybot/handlers/hello.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
from aiogram import types
|
||||||
|
from aiogram.filters import Command
|
||||||
|
|
||||||
|
from nwxraybot.meta import Handler
|
||||||
|
|
||||||
|
|
||||||
|
class HelloHandler(Handler):
|
||||||
|
def __init__(self, bot) -> None:
|
||||||
|
super().__init__(bot)
|
||||||
|
|
||||||
|
@self.router.message(Command("start"))
|
||||||
|
async def hello(message: types.Message):
|
||||||
|
await message.reply("Приветствуем в боте NwXray! Здесь вы сможете получить информацию о своем подключении к NwXray")
|
||||||
1
nwxraybot/meta/__init__.py
Normal file
1
nwxraybot/meta/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from nwxraybot.meta.router import Handler
|
||||||
14
nwxraybot/meta/router.py
Normal file
14
nwxraybot/meta/router.py
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
from aiogram import Bot, Router
|
||||||
|
|
||||||
|
|
||||||
|
class Handler:
|
||||||
|
bot: Bot
|
||||||
|
router: Router
|
||||||
|
|
||||||
|
def __init__(self, bot: Bot) -> None:
|
||||||
|
assert isinstance(bot, Bot)
|
||||||
|
self.bot = bot
|
||||||
|
self.router = Router()
|
||||||
|
|
||||||
|
def __call__(self) -> Router:
|
||||||
|
return self.router
|
||||||
Reference in New Issue
Block a user