mirror of
https://github.com/alexgetmancom/miband-bot.git
synced 2026-07-19 20:20:14 +03:00
Fix Windows setup script
This commit is contained in:
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
# Enforce CRLF for Windows batch files to prevent CMD parsing bugs on multi-byte UTF-8
|
# Enforce CRLF for Windows batch files to prevent CMD parsing bugs on multi-byte UTF-8
|
||||||
*.bat text eol=crlf
|
*.bat text eol=crlf whitespace=-blank-at-eol
|
||||||
*.cmd text eol=crlf
|
*.cmd text eol=crlf whitespace=-blank-at-eol
|
||||||
|
|
||||||
# Enforce LF for shell scripts
|
# Enforce LF for shell scripts
|
||||||
*.sh text eol=lf
|
*.sh text eol=lf
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
@echo off
|
@echo off
|
||||||
chcp 65001 > nul
|
chcp 65001 >nul
|
||||||
set AUTO_START=0
|
setlocal EnableExtensions
|
||||||
if /i "%~1"=="--start" set AUTO_START=1
|
|
||||||
if /i "%MIBAND_BOT_AUTO_START%"=="1" set AUTO_START=1
|
set "AUTO_START=0"
|
||||||
|
if /i "%~1"=="--start" set "AUTO_START=1"
|
||||||
|
if /i "%MIBAND_BOT_AUTO_START%"=="1" set "AUTO_START=1"
|
||||||
cls
|
cls
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
@@ -11,75 +13,124 @@ echo.
|
|||||||
|
|
||||||
:CHOOSE_MODE
|
:CHOOSE_MODE
|
||||||
if "%AUTO_START%"=="1" if exist secrets.env goto MODE_PYTHON
|
if "%AUTO_START%"=="1" if exist secrets.env goto MODE_PYTHON
|
||||||
set install_mode=1
|
set "install_mode=1"
|
||||||
set /p install_mode=" [1] Python (рек.) [2] Docker Выбор [1]: "
|
set /p "install_mode= [1] Python (recommended) [2] Docker Choice [1]: "
|
||||||
if "%install_mode%"=="1" goto MODE_PYTHON
|
if "%install_mode%"=="1" goto MODE_PYTHON
|
||||||
if "%install_mode%"=="2" goto MODE_DOCKER
|
if "%install_mode%"=="2" goto MODE_DOCKER
|
||||||
goto CHOOSE_MODE
|
goto CHOOSE_MODE
|
||||||
|
|
||||||
:MODE_DOCKER
|
:MODE_DOCKER
|
||||||
where docker >nul 2>nul
|
where docker >nul 2>nul
|
||||||
if errorlevel 1 ( echo ! Docker не найден. Установите Docker Desktop. & pause & exit /b 1 )
|
if errorlevel 1 goto DOCKER_MISSING
|
||||||
docker info >nul 2>nul
|
docker info >nul 2>nul
|
||||||
if errorlevel 1 ( echo ! Docker не запущен. Запустите Docker Desktop. & pause & exit /b 1 )
|
if errorlevel 1 goto DOCKER_NOT_RUNNING
|
||||||
echo OK Docker готов
|
echo OK Docker is ready
|
||||||
set DOCKER_ACTIVE=1
|
set "DOCKER_ACTIVE=1"
|
||||||
goto SETUP_ENV
|
goto SETUP_ENV
|
||||||
|
|
||||||
:MODE_PYTHON
|
:DOCKER_MISSING
|
||||||
python --version >nul 2>nul
|
echo ERROR Docker was not found. Install Docker Desktop.
|
||||||
if not errorlevel 1 (
|
pause
|
||||||
python -c "import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else 1)" >nul 2>nul
|
exit /b 1
|
||||||
if not errorlevel 1 goto PYTHON_OK
|
|
||||||
echo ! Найден Python, но нужна версия 3.11 или новее.
|
|
||||||
)
|
|
||||||
|
|
||||||
echo ! Python 3.11+ не найден: https://www.python.org/downloads/
|
|
||||||
echo.
|
|
||||||
set install_python=y
|
|
||||||
set /p install_python=" Установить Python 3.11 автоматически? [Y/n]: "
|
|
||||||
if /i not "%install_python%"=="y" ( echo Установите Python вручную и повторите. & pause & exit /b 1 )
|
|
||||||
|
|
||||||
echo Скачивание Python 3.11.9...
|
:DOCKER_NOT_RUNNING
|
||||||
powershell -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'"
|
echo ERROR Docker is not running. Start Docker Desktop and try again.
|
||||||
echo Установка...
|
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
|
python_installer.exe /quiet InstallAllUsers=0 PrependPath=1 Include_test=0
|
||||||
del python_installer.exe
|
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 "PATH=%LocalAppData%\Programs\Python\Python311;%LocalAppData%\Programs\Python\Python311\Scripts;%PATH%"
|
||||||
python --version >nul 2>nul
|
set "PYTHON_CMD=python"
|
||||||
if errorlevel 1 ( echo ! Не удалось установить Python. & pause & exit /b 1 )
|
%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
|
:PYTHON_OK
|
||||||
echo OK Python готов
|
echo OK Python is ready: %PYTHON_CMD%
|
||||||
set DOCKER_ACTIVE=0
|
set "DOCKER_ACTIVE=0"
|
||||||
goto SETUP_ENV
|
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
|
:SETUP_ENV
|
||||||
echo.
|
echo.
|
||||||
if not exist secrets.env goto INPUT_ENV_VALUES
|
if not exist secrets.env goto INPUT_ENV_VALUES
|
||||||
if "%AUTO_START%"=="1" goto LAUNCH_PHASE
|
if "%AUTO_START%"=="1" goto LAUNCH_PHASE
|
||||||
set overwrite_env=n
|
set "overwrite_env=n"
|
||||||
set /p overwrite_env=" Конфигурация уже есть. Перенастроить? [y/N]: "
|
set /p "overwrite_env= Config already exists. Reconfigure? [y/N]: "
|
||||||
if /i not "%overwrite_env%"=="y" goto LAUNCH_PHASE
|
if /i not "%overwrite_env%"=="y" goto LAUNCH_PHASE
|
||||||
|
|
||||||
:INPUT_ENV_VALUES
|
:INPUT_ENV_VALUES
|
||||||
echo.
|
echo.
|
||||||
echo Токен бота от @BotFather в Telegram:
|
echo Telegram bot token from @BotFather:
|
||||||
|
|
||||||
:INPUT_TOKEN
|
:INPUT_TOKEN
|
||||||
set bot_token=
|
set "bot_token="
|
||||||
set /p bot_token=" Токен: "
|
set /p "bot_token= Token: "
|
||||||
if "%bot_token%"=="" goto TOKEN_EMPTY
|
if "%bot_token%"=="" goto TOKEN_EMPTY
|
||||||
echo %bot_token% | find ":" >nul 2>nul
|
echo %bot_token% | find ":" >nul 2>nul
|
||||||
if errorlevel 1 goto TOKEN_INVALID
|
if errorlevel 1 goto TOKEN_INVALID
|
||||||
goto TOKEN_OK
|
goto TOKEN_OK
|
||||||
|
|
||||||
:TOKEN_EMPTY
|
:TOKEN_EMPTY
|
||||||
echo Токен не может быть пустым.
|
echo Token cannot be empty.
|
||||||
goto INPUT_TOKEN
|
goto INPUT_TOKEN
|
||||||
|
|
||||||
:TOKEN_INVALID
|
:TOKEN_INVALID
|
||||||
echo Неверный формат - токен должен содержать двоеточие.
|
echo Invalid token format. It must contain a colon.
|
||||||
goto INPUT_TOKEN
|
goto INPUT_TOKEN
|
||||||
|
|
||||||
:TOKEN_OK
|
:TOKEN_OK
|
||||||
@@ -91,56 +142,83 @@ echo SYNC_INTERVAL=900
|
|||||||
echo QUERY_DURATION=2
|
echo QUERY_DURATION=2
|
||||||
echo ENABLE_FDS_SLEEP_DETAILS=true
|
echo ENABLE_FDS_SLEEP_DETAILS=true
|
||||||
) > secrets.env
|
) > secrets.env
|
||||||
echo OK Конфигурация сохранена
|
echo OK Config saved
|
||||||
|
|
||||||
:LAUNCH_PHASE
|
:LAUNCH_PHASE
|
||||||
echo.
|
echo.
|
||||||
if not "%DOCKER_ACTIVE%"=="1" goto PYTHON_LAUNCH
|
if not "%DOCKER_ACTIVE%"=="1" goto PYTHON_LAUNCH
|
||||||
|
|
||||||
:DOCKER_LAUNCH
|
:DOCKER_LAUNCH
|
||||||
set launch_now=y
|
set "launch_now=y"
|
||||||
set /p launch_now=" Запустить в Docker сейчас? [Y/n]: "
|
set /p "launch_now= Start in Docker now? [Y/n]: "
|
||||||
if /i not "%launch_now%"=="y" ( echo Запуск вручную: docker compose up -d --build & goto END_LAUNCH )
|
if /i not "%launch_now%"=="y" goto DOCKER_MANUAL
|
||||||
docker compose up -d --build
|
docker compose up -d --build
|
||||||
if not errorlevel 1 (
|
if errorlevel 1 goto DOCKER_LAUNCH_FAILED
|
||||||
echo.
|
echo.
|
||||||
echo OK Бот запущен в Docker. Отправьте /start в Telegram.
|
echo OK Bot started in Docker. Send /start in Telegram.
|
||||||
echo Логи: docker compose logs -f fitness-bot
|
echo Logs: docker compose logs -f fitness-bot
|
||||||
) else (
|
goto END_LAUNCH
|
||||||
echo ! Ошибка запуска Docker.
|
|
||||||
)
|
:DOCKER_MANUAL
|
||||||
|
echo Manual start: docker compose up -d --build
|
||||||
|
goto END_LAUNCH
|
||||||
|
|
||||||
|
:DOCKER_LAUNCH_FAILED
|
||||||
|
echo ERROR Docker startup failed.
|
||||||
goto END_LAUNCH
|
goto END_LAUNCH
|
||||||
|
|
||||||
:PYTHON_LAUNCH
|
:PYTHON_LAUNCH
|
||||||
echo Подготовка...
|
echo Preparing Python environment...
|
||||||
if not exist .venv ( python -m venv .venv >nul 2>nul )
|
if not exist .venv (
|
||||||
call .venv\Scripts\activate
|
%PYTHON_CMD% -m venv .venv >nul 2>nul
|
||||||
python -m pip install --upgrade pip setuptools wheel > pip_install.log 2>&1
|
if errorlevel 1 goto VENV_FAILED
|
||||||
if errorlevel 1 goto PIP_INSTALL_FAILED
|
)
|
||||||
python -m pip install -r requirements.txt -e mi-fitness-python >> pip_install.log 2>&1
|
call .venv\Scripts\activate
|
||||||
if errorlevel 1 goto PIP_INSTALL_FAILED
|
python -m pip install --upgrade pip setuptools wheel > pip_install.log 2>&1
|
||||||
goto PIP_INSTALL_OK
|
if errorlevel 1 goto PIP_INSTALL_FAILED
|
||||||
|
python -m pip install -r requirements.txt -e mi-fitness-python >> pip_install.log 2>&1
|
||||||
:PIP_INSTALL_FAILED
|
if errorlevel 1 goto PIP_INSTALL_FAILED
|
||||||
echo ! Ошибка установки зависимостей:
|
del pip_install.log >nul 2>nul
|
||||||
type pip_install.log
|
echo OK Dependencies installed
|
||||||
del pip_install.log >nul 2>nul
|
call :WRITE_RUN_LOCAL
|
||||||
pause & exit /b 1
|
if errorlevel 1 goto RUN_LOCAL_FAILED
|
||||||
|
|
||||||
:PIP_INSTALL_OK
|
if "%AUTO_START%"=="1" goto RUN_LOCAL_NOW
|
||||||
del pip_install.log >nul 2>nul
|
|
||||||
echo OK Готово
|
echo.
|
||||||
|
set "launch_now=y"
|
||||||
>run_local.bat echo @echo off
|
set /p "launch_now= Start bot now? [Y/n]: "
|
||||||
>>run_local.bat echo chcp 65001 ^> nul
|
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 cd /d "%%~dp0"
|
||||||
>>run_local.bat echo if not exist .venv ^(
|
>>run_local.bat echo if not exist .venv ^(
|
||||||
>>run_local.bat echo echo ! .venv не найдено. Запустите setup.bat заново.
|
>>run_local.bat echo echo ERROR .venv was not found. Run setup.bat again.
|
||||||
>>run_local.bat echo pause
|
>>run_local.bat echo pause
|
||||||
>>run_local.bat echo exit /b 1
|
>>run_local.bat echo exit /b 1
|
||||||
>>run_local.bat echo ^)
|
>>run_local.bat echo ^)
|
||||||
>>run_local.bat echo if not exist run.py ^(
|
>>run_local.bat echo if not exist run.py ^(
|
||||||
>>run_local.bat echo echo ! run.py не найден. Обновите проект и запустите setup.bat заново.
|
>>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 pause
|
||||||
>>run_local.bat echo exit /b 1
|
>>run_local.bat echo exit /b 1
|
||||||
>>run_local.bat echo ^)
|
>>run_local.bat echo ^)
|
||||||
@@ -152,22 +230,15 @@ echo OK Готово
|
|||||||
>>run_local.bat echo echo.
|
>>run_local.bat echo echo.
|
||||||
>>run_local.bat echo echo miband-bot
|
>>run_local.bat echo echo miband-bot
|
||||||
>>run_local.bat echo echo.
|
>>run_local.bat echo echo.
|
||||||
>>run_local.bat echo echo OK Бот запущен. Не закрывайте это окно.
|
>>run_local.bat echo echo OK Bot started. Keep this window open.
|
||||||
>>run_local.bat echo echo Логи: data\bot.log / data\sync.log
|
>>run_local.bat echo echo Logs: data\bot.log / data\sync.log
|
||||||
>>run_local.bat echo echo.
|
>>run_local.bat echo echo.
|
||||||
>>run_local.bat echo python -u run.py
|
>>run_local.bat echo python -u run.py
|
||||||
>>run_local.bat echo echo.
|
>>run_local.bat echo echo.
|
||||||
>>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 echo.
|
||||||
>>run_local.bat echo pause
|
>>run_local.bat echo pause
|
||||||
|
exit /b 0
|
||||||
if "%AUTO_START%"=="1" goto RUN_LOCAL_NOW
|
|
||||||
|
|
||||||
echo.
|
|
||||||
set launch_now=y
|
|
||||||
set /p launch_now=" Запустить бота сейчас? [Y/n]: "
|
|
||||||
if /i "%launch_now%"=="y" ( call run_local.bat )
|
|
||||||
goto END_LAUNCH
|
|
||||||
|
|
||||||
:RUN_LOCAL_NOW
|
:RUN_LOCAL_NOW
|
||||||
call run_local.bat
|
call run_local.bat
|
||||||
@@ -175,3 +246,4 @@ call run_local.bat
|
|||||||
:END_LAUNCH
|
:END_LAUNCH
|
||||||
echo.
|
echo.
|
||||||
pause
|
pause
|
||||||
|
endlocal
|
||||||
|
|||||||
Reference in New Issue
Block a user