Files
miband-bot/setup.sh
T
2026-05-26 16:28:07 +03:00

175 lines
5.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# miband-bot setup for macOS / Linux
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
ok() { echo -e " ${GREEN}${NC} $1"; }
err() { echo -e " ${RED}${NC} $1"; }
clear
echo ""
echo " miband-bot"
echo ""
# --- Выбор режима ---
while true; do
read -p " [1] Python (рек.) [2] Docker Выбор [1]: " install_mode
install_mode="${install_mode:-1}"
[ "$install_mode" = "1" ] || [ "$install_mode" = "2" ] && break
done
echo ""
# --- Проверка требований ---
if [ "$install_mode" = "2" ]; then
if ! command -v docker &> /dev/null; then
err "Docker не найден. Установите Docker Desktop или Colima (brew install colima)."
exit 1
fi
if ! docker info &> /dev/null; then
err "Docker не запущен. Запустите демон (colima start / Docker Desktop) и повторите."
exit 1
fi
if docker compose version &> /dev/null; then
COMPOSE_CMD="docker compose"
elif command -v docker-compose &> /dev/null; then
COMPOSE_CMD="docker-compose"
else
err "Плагин docker compose не найден."
exit 1
fi
ok "Docker готов"
DOCKER_MODE=true
else
PYTHON_CMD=""
for cmd in python3.13 python3.12 python3.11 python3 python; do
if command -v "$cmd" &> /dev/null; then
if "$cmd" -c 'import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else 1)' 2>/dev/null; then
PYTHON_CMD="$cmd"
break
fi
fi
done
if [ -z "$PYTHON_CMD" ]; then
err "Python 3.11+ не найден. Установите: https://www.python.org/downloads/"
exit 1
fi
ok "Python готов ($PYTHON_CMD)"
DOCKER_MODE=false
fi
# --- Конфигурация ---
echo ""
if [ -f secrets.env ]; then
read -p " Конфигурация уже есть. Перенастроить? [y/N]: " overwrite < /dev/tty
if [[ ! "$overwrite" =~ ^[Yy]$ ]]; then
: # skip to launch
else
rm -f secrets.env
fi
fi
if [ ! -f secrets.env ]; then
echo ""
echo " Токен бота от @BotFather в Telegram:"
while true; do
read -p " > " bot_token < /dev/tty
[ -z "$bot_token" ] && echo " Токен не может быть пустым." && continue
[[ "$bot_token" == *":"* ]] && break
echo " Неверный формат (должен содержать ':')."
done
{
echo "# miband-bot"
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
ok "Конфигурация сохранена"
fi
# --- Запуск ---
echo ""
if [ "$DOCKER_MODE" = true ]; then
read -p " Запустить в Docker сейчас? [Y/n]: " launch_now < /dev/tty
launch_now="${launch_now:-y}"
if [[ ! "$launch_now" =~ ^[Yy]$ ]]; then
echo " Запуск вручную: $COMPOSE_CMD up -d --build"
exit 0
fi
$COMPOSE_CMD up -d --build
if [ $? -eq 0 ]; then
echo ""
ok "Бот запущен в Docker. Отправьте /start в Telegram."
echo " Логи: $COMPOSE_CMD logs -f fitness-bot"
else
err "Ошибка запуска Docker."
fi
exit 0
fi
# Python режим
echo " Подготовка..."
if [ ! -d ".venv" ]; then
if ! $PYTHON_CMD -m venv .venv; then
err "Не удалось создать .venv. На Debian/Ubuntu: sudo apt install -y python3-venv"
exit 1
fi
fi
source .venv/bin/activate
if python -m pip install --upgrade pip setuptools wheel > pip_install.log 2>&1 \
&& python -m pip install -r requirements.txt -e mi-fitness-python >> pip_install.log 2>&1; then
rm -f pip_install.log
ok "Готово"
else
err "Ошибка установки зависимостей:"
cat pip_install.log
rm -f pip_install.log
exit 1
fi
# Генерируем run_local.sh — логи Python уходят в файлы
cat << 'EOF' > run_local.sh
#!/usr/bin/env bash
# Запуск miband-bot (Python читает secrets.env автоматически)
cd "$(dirname "$0")"
if [ ! -d ".venv" ]; then
echo " ❌ .venv не найдена. Запустите setup.sh заново."
exit 1
fi
if [ ! -f "run.py" ]; then
echo " ❌ run.py не найден. Обновите проект и запустите setup.sh заново."
exit 1
fi
source .venv/bin/activate
mkdir -p data
clear
echo ""
echo " miband-bot"
echo ""
echo " ✓ Бот запущен. Не закрывайте это окно."
echo " Логи: data/bot.log / data/sync.log"
echo ""
python -u run.py
echo ""
echo " Бот остановлен. Можно закрыть окно."
echo ""
EOF
chmod +x run_local.sh
ok "Создан скрипт запуска: ./run_local.sh"
echo ""
read -p " Запустить бота сейчас? [Y/n]: " launch_now < /dev/tty
launch_now="${launch_now:-y}"
if [[ "$launch_now" =~ ^[Yy]$ ]]; then
./run_local.sh
fi