Files
miband-bot/setup.bat
T
2026-05-26 16:38:43 +03:00

250 lines
7.1 KiB
Batchfile

@echo off
chcp 65001 >nul
setlocal EnableExtensions
set "AUTO_START=0"
if /i "%~1"=="--start" set "AUTO_START=1"
if /i "%MIBAND_BOT_AUTO_START%"=="1" set "AUTO_START=1"
cls
echo.
echo miband-bot
echo.
:CHOOSE_MODE
if "%AUTO_START%"=="1" if exist secrets.env goto MODE_PYTHON
set "install_mode=1"
set /p "install_mode= [1] Python (recommended) [2] Docker Choice [1]: "
if "%install_mode%"=="1" goto MODE_PYTHON
if "%install_mode%"=="2" goto MODE_DOCKER
goto CHOOSE_MODE
:MODE_DOCKER
where docker >nul 2>nul
if errorlevel 1 goto DOCKER_MISSING
docker info >nul 2>nul
if errorlevel 1 goto DOCKER_NOT_RUNNING
echo OK Docker is ready
set "DOCKER_ACTIVE=1"
goto SETUP_ENV
:DOCKER_MISSING
echo ERROR Docker was not found. Install Docker Desktop.
pause
exit /b 1
:DOCKER_NOT_RUNNING
echo ERROR Docker is not running. Start Docker Desktop and try again.
pause
exit /b 1
:MODE_PYTHON
call :FIND_PYTHON
if defined PYTHON_CMD goto PYTHON_OK
echo ERROR Python 3.11+ was not found: https://www.python.org/downloads/
echo.
set "install_python=y"
set /p "install_python= Install Python 3.11 automatically? [Y/n]: "
if /i not "%install_python%"=="y" goto PYTHON_INSTALL_DECLINED
echo Downloading Python 3.11.9...
powershell -NoProfile -ExecutionPolicy Bypass -Command "$ProgressPreference='SilentlyContinue'; Invoke-WebRequest -Uri 'https://www.python.org/ftp/python/3.11.9/python-3.11.9-amd64.exe' -OutFile 'python_installer.exe'"
if errorlevel 1 goto PYTHON_DOWNLOAD_FAILED
echo Installing Python...
python_installer.exe /quiet InstallAllUsers=0 PrependPath=1 Include_test=0
if errorlevel 1 goto PYTHON_INSTALL_FAILED
del python_installer.exe >nul 2>nul
set "PATH=%LocalAppData%\Programs\Python\Python311;%LocalAppData%\Programs\Python\Python311\Scripts;%PATH%"
set "PYTHON_CMD=python"
%PYTHON_CMD% -c "import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else 1)" >nul 2>nul
if errorlevel 1 goto PYTHON_INSTALL_FAILED
goto PYTHON_OK
:PYTHON_INSTALL_DECLINED
echo Install Python manually and run setup.bat again.
pause
exit /b 1
:PYTHON_DOWNLOAD_FAILED
echo ERROR Could not download Python installer.
pause
exit /b 1
:PYTHON_INSTALL_FAILED
echo ERROR Could not install Python.
pause
exit /b 1
:PYTHON_OK
echo OK Python is ready: %PYTHON_CMD%
set "DOCKER_ACTIVE=0"
goto SETUP_ENV
:FIND_PYTHON
set "PYTHON_CMD="
where py >nul 2>nul
if not errorlevel 1 (
py -3.13 -c "import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else 1)" >nul 2>nul
if not errorlevel 1 set "PYTHON_CMD=py -3.13" & exit /b 0
py -3.12 -c "import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else 1)" >nul 2>nul
if not errorlevel 1 set "PYTHON_CMD=py -3.12" & exit /b 0
py -3.11 -c "import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else 1)" >nul 2>nul
if not errorlevel 1 set "PYTHON_CMD=py -3.11" & exit /b 0
)
where python >nul 2>nul
if not errorlevel 1 (
python -c "import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else 1)" >nul 2>nul
if not errorlevel 1 set "PYTHON_CMD=python" & exit /b 0
)
where python3 >nul 2>nul
if not errorlevel 1 (
python3 -c "import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else 1)" >nul 2>nul
if not errorlevel 1 set "PYTHON_CMD=python3" & exit /b 0
)
exit /b 0
:SETUP_ENV
echo.
if not exist secrets.env goto INPUT_ENV_VALUES
if "%AUTO_START%"=="1" goto LAUNCH_PHASE
set "overwrite_env=n"
set /p "overwrite_env= Config already exists. Reconfigure? [y/N]: "
if /i not "%overwrite_env%"=="y" goto LAUNCH_PHASE
:INPUT_ENV_VALUES
echo.
echo Telegram bot token from @BotFather:
:INPUT_TOKEN
set "bot_token="
set /p "bot_token= Token: "
if "%bot_token%"=="" goto TOKEN_EMPTY
echo %bot_token% | find ":" >nul 2>nul
if errorlevel 1 goto TOKEN_INVALID
goto TOKEN_OK
:TOKEN_EMPTY
echo Token cannot be empty.
goto INPUT_TOKEN
:TOKEN_INVALID
echo Invalid token format. It must contain a colon.
goto INPUT_TOKEN
:TOKEN_OK
(
echo # miband-bot config
echo TELEGRAM_BOT_TOKEN=%bot_token%
echo TELEGRAM_ALLOWED_USER_ID=
echo SYNC_INTERVAL=900
echo QUERY_DURATION=2
echo ENABLE_FDS_SLEEP_DETAILS=true
) > secrets.env
echo OK Config saved
:LAUNCH_PHASE
echo.
if not "%DOCKER_ACTIVE%"=="1" goto PYTHON_LAUNCH
:DOCKER_LAUNCH
set "launch_now=y"
set /p "launch_now= Start in Docker now? [Y/n]: "
if /i not "%launch_now%"=="y" goto DOCKER_MANUAL
docker compose up -d --build
if errorlevel 1 goto DOCKER_LAUNCH_FAILED
echo.
echo OK Bot started in Docker. Send /start in Telegram.
echo Logs: docker compose logs -f fitness-bot
goto END_LAUNCH
:DOCKER_MANUAL
echo Manual start: docker compose up -d --build
goto END_LAUNCH
:DOCKER_LAUNCH_FAILED
echo ERROR Docker startup failed.
goto END_LAUNCH
:PYTHON_LAUNCH
echo Preparing Python environment...
if not exist .venv (
%PYTHON_CMD% -m venv .venv >nul 2>nul
if errorlevel 1 goto VENV_FAILED
)
call .venv\Scripts\activate
python -m pip install --upgrade pip setuptools wheel > pip_install.log 2>&1
if errorlevel 1 goto PIP_INSTALL_FAILED
python -m pip install -r requirements.txt -e mi-fitness-python >> pip_install.log 2>&1
if errorlevel 1 goto PIP_INSTALL_FAILED
del pip_install.log >nul 2>nul
echo OK Dependencies installed
call :WRITE_RUN_LOCAL
if errorlevel 1 goto RUN_LOCAL_FAILED
if "%AUTO_START%"=="1" goto RUN_LOCAL_NOW
echo.
set "launch_now=y"
set /p "launch_now= Start bot now? [Y/n]: "
if /i "%launch_now%"=="y" call run_local.bat
goto END_LAUNCH
:VENV_FAILED
echo ERROR Could not create .venv.
pause
exit /b 1
:PIP_INSTALL_FAILED
echo ERROR Dependency installation failed:
type pip_install.log
del pip_install.log >nul 2>nul
pause
exit /b 1
:RUN_LOCAL_FAILED
echo ERROR Could not create run_local.bat.
pause
exit /b 1
:WRITE_RUN_LOCAL
>run_local.bat echo @echo off
>>run_local.bat echo chcp 65001 ^>nul
>>run_local.bat echo cd /d "%%~dp0"
>>run_local.bat echo if not exist .venv ^(
>>run_local.bat echo echo ERROR .venv was not found. Run setup.bat again.
>>run_local.bat echo pause
>>run_local.bat echo exit /b 1
>>run_local.bat echo ^)
>>run_local.bat echo if not exist run.py ^(
>>run_local.bat echo echo ERROR run.py was not found. Update project and run setup.bat again.
>>run_local.bat echo pause
>>run_local.bat echo exit /b 1
>>run_local.bat echo ^)
>>run_local.bat echo call .venv\Scripts\activate
>>run_local.bat echo set PYTHONUTF8=1
>>run_local.bat echo set PYTHONIOENCODING=utf-8
>>run_local.bat echo md data 2^>nul
>>run_local.bat echo cls
>>run_local.bat echo echo.
>>run_local.bat echo echo miband-bot
>>run_local.bat echo echo.
>>run_local.bat echo echo OK Bot started. Keep this window open.
>>run_local.bat echo echo Logs: data\bot.log / data\sync.log
>>run_local.bat echo echo.
>>run_local.bat echo python -u run.py
>>run_local.bat echo echo.
>>run_local.bat echo echo Bot stopped. You can close this window.
>>run_local.bat echo echo.
>>run_local.bat echo pause
exit /b 0
:RUN_LOCAL_NOW
call run_local.bat
:END_LAUNCH
echo.
pause
endlocal