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__":
|
if __name__ == "__main__":
|
||||||
asyncio.run(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 import Bot, Dispatcher, types
|
||||||
from aiogram.enums.dice_emoji import DiceEmoji
|
from aiogram.enums.dice_emoji import DiceEmoji
|
||||||
from aiogram.filters.command import Command
|
from aiogram.filters.command import Command
|
||||||
from dotenv import load_dotenv
|
from config_reader import config
|
||||||
|
|
||||||
load_dotenv()
|
|
||||||
|
|
||||||
# Включаем логирование, чтобы не пропустить важные сообщения
|
# Включаем логирование, чтобы не пропустить важные сообщения
|
||||||
logging.basicConfig(level=logging.INFO)
|
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 = Dispatcher()
|
||||||
|
dp["started_at"] = datetime.now().strftime("%Y-%m-%d %H:%M")
|
||||||
|
|
||||||
# Хэндлер на команду /start
|
# Хэндлер на команду /start
|
||||||
@dp.message(Command("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):
|
async def cmd_dice2(message: types.Message, bot: Bot):
|
||||||
await bot.send_dice(-1001826767638, emoji=DiceEmoji.DICE)
|
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():
|
async def main():
|
||||||
# Регистрируем хэндлер cmd_test2 по команде /start
|
# Регистрируем хэндлер 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