Files
ritmex-bot/setup.sh
T

161 lines
4.4 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
# - Starts the bot
main() {
require_unix
ensure_repo
cd "$PROJECT_DIR"
referral_notice
ensure_bun
install_deps
prompt_env
write_env
echo
echo "✅ Setup complete. Starting ritmex-bot..."
echo
start_bot
}
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}"
}
start_bot() {
# Bun auto-loads .env; no need to run dotenv explicitly
# Ensure Bun has a TTY for interactive menu input
exec bun run start < /dev/tty
}
main "$@"