Files
ritmex-bot/setup.sh
T

160 lines
4.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
# One-click setup for ritmex-bot (Linux/macOS)
# - Ensures Bun is installed
# - Installs dependencies
# - Prompts for API credentials
# - Generates .env
# - Prepares to start the bot (does not auto-run)
main() {
require_unix
ensure_repo
cd "$PROJECT_DIR"
referral_notice
ensure_bun
install_deps
prompt_env
write_env
echo
# Ensure we end inside the project directory
cd "$PROJECT_DIR"
echo "✅ 安装完成!已进入项目目录:$PROJECT_DIR"
echo "请在终端中输入以下命令启动:"
echo
echo " bun start"
echo
echo "提示:启动前可检查或编辑当前目录下的 .env 文件。"
}
require_unix() {
case "$(uname -s)" in
Linux|Darwin) ;;
*) echo "This script supports only Linux and macOS." >&2; exit 1 ;;
esac
}
ensure_bun() {
if command -v bun >/dev/null 2>&1; then
echo "✔ Bun found: $(bun --version)"
return
fi
echo " Bun not found. Installing Bun..."
if [ "$(uname -s)" = "Darwin" ] && command -v brew >/dev/null 2>&1; then
brew install bun
else
# Non-interactive install via official script
curl -fsSL https://bun.sh/install | bash
# shellcheck disable=SC1090
if [ -f "$HOME/.bun/bun" ] || [ -d "$HOME/.bun" ]; then
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"
fi
fi
if ! command -v bun >/dev/null 2>&1; then
echo "❌ Failed to install Bun. Please install it manually from https://bun.sh" >&2
exit 1
fi
echo "✔ Bun installed: $(bun --version)"
}
ensure_repo() {
# Detect if running inside project root already
if [ -f "package.json" ] && grep -q '"name"\s*:\s*"ritmex-bot"' package.json 2>/dev/null; then
PROJECT_DIR="$PWD"
echo "✔ Project detected in current directory: $PROJECT_DIR"
return
fi
local REPO_URL="https://github.com/discountry/ritmex-bot.git"
local TAR_URL="https://github.com/discountry/ritmex-bot/archive/refs/heads/main.tar.gz"
local TARGET_DIR="${RITMEX_DIR:-ritmex-bot}"
if [ -d "$TARGET_DIR" ] && [ -f "$TARGET_DIR/package.json" ]; then
PROJECT_DIR="$TARGET_DIR"
echo "✔ Project directory found: $PROJECT_DIR"
return
fi
echo "Fetching ritmex-bot sources..."
if command -v git >/dev/null 2>&1; then
git clone --depth=1 "$REPO_URL" "$TARGET_DIR"
else
echo " git not found; downloading tarball..."
curl -fsSL "$TAR_URL" -o /tmp/ritmex-bot.tar.gz
mkdir -p "$TARGET_DIR"
tar -xzf /tmp/ritmex-bot.tar.gz --strip-components=1 -C "$TARGET_DIR"
rm -f /tmp/ritmex-bot.tar.gz
fi
PROJECT_DIR="$TARGET_DIR"
}
referral_notice() {
echo
echo "开始之前:请打开以下链接连接钱包加入战队,享受 30% 手续费优惠:"
echo "https://www.asterdex.com/zh-CN/referral/4665f3"
echo
# Wait for user to press Enter on a real TTY; don't fail if no TTY
read -r -p "打开链接后按下回车继续..." _ < /dev/tty || true
}
install_deps() {
echo "Installing dependencies with Bun..."
bun install
}
prompt_env() {
echo
echo "Please enter your AsterDex API credentials."
while true; do
read -r -p "ASTER_API_KEY: " ASTER_API_KEY < /dev/tty
[ -n "${ASTER_API_KEY:-}" ] && break
echo "ASTER_API_KEY cannot be empty. Please try again."
done
while true; do
read -r -p "ASTER_API_SECRET: " ASTER_API_SECRET < /dev/tty
[ -n "${ASTER_API_SECRET:-}" ] && break
echo "ASTER_API_SECRET cannot be empty. Please try again."
done
read -r -p "TRADE_SYMBOL (default BTCUSDT): " TRADE_SYMBOL < /dev/tty || true
TRADE_SYMBOL=${TRADE_SYMBOL:-BTCUSDT}
# Optional trading parameters
read -r -p "TRADE_AMOUNT (default 0.001): " TRADE_AMOUNT < /dev/tty || true
TRADE_AMOUNT=${TRADE_AMOUNT:-0.001}
read -r -p "LOSS_LIMIT (default 0.03): " LOSS_LIMIT < /dev/tty || true
LOSS_LIMIT=${LOSS_LIMIT:-0.03}
read -r -p "KLINE_INTERVAL (default 1m): " KLINE_INTERVAL < /dev/tty || true
KLINE_INTERVAL=${KLINE_INTERVAL:-1m}
}
write_env() {
local env_file=".env"
echo "Writing ${env_file}..."
cat > "${env_file}" <<EOF
# Generated by setup.sh
ASTER_API_KEY=${ASTER_API_KEY}
ASTER_API_SECRET=${ASTER_API_SECRET}
TRADE_SYMBOL=${TRADE_SYMBOL}
TRADE_AMOUNT=${TRADE_AMOUNT}
LOSS_LIMIT=${LOSS_LIMIT}
KLINE_INTERVAL=${KLINE_INTERVAL}
# Optional maker params (uncomment and tune as needed)
# MAKER_LOSS_LIMIT=0.03
# MAKER_PRICE_CHASE=0.3
# MAKER_BID_OFFSET=0
# MAKER_ASK_OFFSET=0
# MAKER_REFRESH_INTERVAL_MS=1500
# MAKER_MAX_CLOSE_SLIPPAGE_PCT=0.05
# MAKER_PRICE_TICK=0.1
EOF
echo "✔ .env created at $(pwd)/${env_file}"
}
main "$@"