add config_reader secrets
This commit is contained in:
parent
00d175be90
commit
687209ed0f
39
README.md
39
README.md
@ -85,3 +85,42 @@ async def main():
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
```
|
||||
### Создадим файл конфигурации и переопределим файл секретов в него
|
||||
|
||||
Итак, создадим рядом с **bot.py** отдельный файл **config_reader.py** о следующим содержимым
|
||||
|
||||
config_reader.py
|
||||
```py
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
from pydantic import SecretStr
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
# Желательно вместо str использовать SecretStr
|
||||
# для конфиденциальных данных, например, токена бота
|
||||
bot_token: SecretStr
|
||||
|
||||
# Начиная со второй версии pydantic, настройки класса настроек задаются
|
||||
# через model_config
|
||||
# В данном случае будет использоваться файла .env, который будет прочитан
|
||||
# с кодировкой UTF-8
|
||||
model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8')
|
||||
|
||||
|
||||
# При импорте файла сразу создастся
|
||||
# и провалидируется объект конфига,
|
||||
# который можно далее импортировать из разных мест
|
||||
config = Settings()
|
||||
```
|
||||
Теперь немного отредактируем наш bot.py:
|
||||
|
||||
|
||||
```py bot.py
|
||||
# импорты
|
||||
from config_reader import config
|
||||
|
||||
# Для записей с типом Secret* необходимо
|
||||
# вызывать метод get_secret_value(),
|
||||
# чтобы получить настоящее содержимое вместо '*******'
|
||||
bot = Bot(token=config.bot_token.get_secret_value())
|
||||
```
|
||||
|
21
bot.py
21
bot.py
@ -7,16 +7,22 @@ from datetime import datetime
|
||||
from aiogram import Bot, Dispatcher, types
|
||||
from aiogram.enums.dice_emoji import DiceEmoji
|
||||
from aiogram.filters.command import Command
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
from config_reader import config
|
||||
|
||||
# Включаем логирование, чтобы не пропустить важные сообщения
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
# Объект бота
|
||||
bot = Bot(token=os.getenv("BOT_TOKEN"))
|
||||
|
||||
# Для записей с типом Secret* необходимо
|
||||
# вызывать метод get_secret_value(),
|
||||
# чтобы получить настоящее содержимое вместо '*******'
|
||||
bot = Bot(token=config.bot_token.get_secret_value())
|
||||
|
||||
# Объект бота напрямую из .env
|
||||
# bot = Bot(token=os.getenv("BOT_TOKEN"))
|
||||
|
||||
# Диспетчер
|
||||
dp = Dispatcher()
|
||||
dp["started_at"] = datetime.now().strftime("%Y-%m-%d %H:%M")
|
||||
|
||||
# Хэндлер на команду /start
|
||||
@dp.message(Command("start"))
|
||||
@ -53,6 +59,11 @@ async def cmd_dice(message: types.Message):
|
||||
async def cmd_dice2(message: types.Message, bot: Bot):
|
||||
await bot.send_dice(-1001826767638, emoji=DiceEmoji.DICE)
|
||||
|
||||
# запрос даты запуска бота
|
||||
@dp.message(Command("info"))
|
||||
async def cmd_info(message: types.Message, started_at: str):
|
||||
await message.answer(f"Бот запущен {started_at}")
|
||||
|
||||
# Запуск процесса поллинга новых апдейтов
|
||||
async def main():
|
||||
# Регистрируем хэндлер cmd_test2 по команде /start
|
||||
|
20
config_reader.py
Normal file
20
config_reader.py
Normal file
@ -0,0 +1,20 @@
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
from pydantic import SecretStr
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
# Желательно вместо str использовать SecretStr
|
||||
# для конфиденциальных данных, например, токена бота
|
||||
bot_token: SecretStr
|
||||
|
||||
# Начиная со второй версии pydantic, настройки класса настроек задаются
|
||||
# через model_config
|
||||
# В данном случае будет использоваться файла .env, который будет прочитан
|
||||
# с кодировкой UTF-8
|
||||
model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8')
|
||||
|
||||
|
||||
# При импорте файла сразу создастся
|
||||
# и провалидируется объект конфига,
|
||||
# который можно далее импортировать из разных мест
|
||||
config = Settings()
|
Loading…
x
Reference in New Issue
Block a user