mirror of
https://github.com/alexgetmancom/miband-bot.git
synced 2026-07-16 15:16:41 +03:00
175 lines
5.1 KiB
Bash
Executable File
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
|