first commit
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
#!/usr/bin/env bash
|
||||
# Polymarket Whale Watcher - One-Click Setup
|
||||
# Usage: chmod +x setup.sh && ./setup.sh
|
||||
|
||||
set -e
|
||||
|
||||
CYAN='\033[0;36m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
DIM='\033[2m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${CYAN}"
|
||||
echo "╭──────────────────────────────────────────────────────────╮"
|
||||
echo "│ 🐋 Polymarket Whale Watcher Setup │"
|
||||
echo "╰──────────────────────────────────────────────────────────╯"
|
||||
echo -e "${NC}"
|
||||
|
||||
# ============================================================
|
||||
# Step 1: Check Python
|
||||
# ============================================================
|
||||
echo -e "${CYAN}[1/4]${NC} Checking Python version..."
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
echo -e "${RED}Error: Python 3 is required but not installed.${NC}"
|
||||
echo " Install from https://www.python.org/downloads/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PYTHON_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
|
||||
PYTHON_MAJOR=$(echo "$PYTHON_VERSION" | cut -d. -f1)
|
||||
PYTHON_MINOR=$(echo "$PYTHON_VERSION" | cut -d. -f2)
|
||||
|
||||
if [ "$PYTHON_MAJOR" -lt 3 ] || ([ "$PYTHON_MAJOR" -eq 3 ] && [ "$PYTHON_MINOR" -lt 10 ]); then
|
||||
echo -e "${RED}Error: Python 3.10+ required, found $PYTHON_VERSION${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e " ${GREEN}✓${NC} Python $PYTHON_VERSION"
|
||||
|
||||
# ============================================================
|
||||
# Step 2: Virtual environment
|
||||
# ============================================================
|
||||
echo -e "${CYAN}[2/4]${NC} Setting up virtual environment..."
|
||||
if [ ! -d "venv" ]; then
|
||||
python3 -m venv venv
|
||||
echo -e " ${GREEN}✓${NC} Virtual environment created"
|
||||
else
|
||||
echo -e " ${GREEN}✓${NC} Virtual environment already exists"
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Step 3: Install dependencies
|
||||
# ============================================================
|
||||
echo -e "${CYAN}[3/4]${NC} Installing dependencies..."
|
||||
source venv/bin/activate
|
||||
pip install --upgrade pip -q
|
||||
pip install -r requirements.txt -q
|
||||
echo -e " ${GREEN}✓${NC} Dependencies installed"
|
||||
|
||||
# Create data directories
|
||||
mkdir -p data reports daily_briefings
|
||||
|
||||
# ============================================================
|
||||
# Step 4: API Key Configuration
|
||||
# ============================================================
|
||||
echo -e "${CYAN}[4/4]${NC} Configuring API keys..."
|
||||
echo ""
|
||||
|
||||
if [ -f ".env" ]; then
|
||||
echo -e " ${YELLOW}Found existing .env file.${NC}"
|
||||
read -p " Overwrite and reconfigure? [y/N] " overwrite
|
||||
if [[ ! "$overwrite" =~ ^[Yy]$ ]]; then
|
||||
echo -e " ${GREEN}✓${NC} Keeping existing .env"
|
||||
echo ""
|
||||
echo -e "${GREEN}Setup complete! Run:${NC}"
|
||||
echo " source venv/bin/activate"
|
||||
echo " python -m src.main run"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
cp .env.example .env
|
||||
|
||||
# Helper function: prompt for a key and write to .env
|
||||
set_key() {
|
||||
local var_name="$1"
|
||||
local prompt_text="$2"
|
||||
local url="$3"
|
||||
local required="$4"
|
||||
|
||||
echo ""
|
||||
if [ "$required" = "required" ]; then
|
||||
echo -e " ${BOLD}${var_name}${NC} ${RED}(required)${NC}"
|
||||
else
|
||||
echo -e " ${BOLD}${var_name}${NC} ${DIM}(optional, press Enter to skip)${NC}"
|
||||
fi
|
||||
echo -e " ${DIM}$prompt_text${NC}"
|
||||
echo -e " ${DIM}→ $url${NC}"
|
||||
|
||||
while true; do
|
||||
read -p " Key: " key_value
|
||||
if [ -z "$key_value" ]; then
|
||||
if [ "$required" = "required" ]; then
|
||||
echo -e " ${RED}This key is required. Please enter a value.${NC}"
|
||||
continue
|
||||
else
|
||||
echo -e " ${DIM}Skipped${NC}"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
break
|
||||
done
|
||||
|
||||
# Replace the placeholder in .env
|
||||
if grep -q "^${var_name}=" .env; then
|
||||
sed -i.bak "s|^${var_name}=.*|${var_name}=${key_value}|" .env
|
||||
elif grep -q "^# ${var_name}=" .env; then
|
||||
sed -i.bak "s|^# ${var_name}=.*|${var_name}=${key_value}|" .env
|
||||
else
|
||||
echo "${var_name}=${key_value}" >> .env
|
||||
fi
|
||||
rm -f .env.bak
|
||||
echo -e " ${GREEN}✓ Saved${NC}"
|
||||
}
|
||||
|
||||
echo -e "${CYAN}╭──────────────────────────────────────────────────────────╮${NC}"
|
||||
echo -e "${CYAN}│ API Key Configuration │${NC}"
|
||||
echo -e "${CYAN}│ │${NC}"
|
||||
echo -e "${CYAN}│ The more keys you add, the better the analysis. │${NC}"
|
||||
echo -e "${CYAN}│ Only LLM_API_KEY is required. Others are optional but │${NC}"
|
||||
echo -e "${CYAN}│ strongly recommended for full coverage. │${NC}"
|
||||
echo -e "${CYAN}╰──────────────────────────────────────────────────────────╯${NC}"
|
||||
|
||||
# --- Required ---
|
||||
echo ""
|
||||
echo -e "${YELLOW}━━━ Required (LLM Engine) ━━━${NC}"
|
||||
|
||||
set_key "LLM_API_KEY" \
|
||||
"Powers the LLM analysis (OpenAI-compatible)" \
|
||||
"https://platform.openai.com/api-keys" \
|
||||
"required"
|
||||
|
||||
# --- Core Search ---
|
||||
echo ""
|
||||
echo -e "${YELLOW}━━━ Web Search (strongly recommended) ━━━${NC}"
|
||||
echo -e "${DIM} Without these, LLM falls back to DuckDuckGo (lower quality)${NC}"
|
||||
|
||||
set_key "TAVILY_API_KEY" \
|
||||
"Best web search quality, 1000 free searches/month" \
|
||||
"https://app.tavily.com/home"
|
||||
|
||||
set_key "SERPER_API_KEY" \
|
||||
"Google search fallback, 2500 free searches" \
|
||||
"https://serper.dev"
|
||||
|
||||
# --- Social Sentiment ---
|
||||
echo ""
|
||||
echo -e "${YELLOW}━━━ Social Sentiment ━━━${NC}"
|
||||
|
||||
set_key "TWITTER_API_KEY" \
|
||||
"Twitter/X sentiment & breaking news search" \
|
||||
"https://developer.x.com/en/portal/dashboard"
|
||||
|
||||
# --- Financial Data ---
|
||||
echo ""
|
||||
echo -e "${YELLOW}━━━ Financial & On-Chain Data ━━━${NC}"
|
||||
|
||||
set_key "POLYGON_API_KEY" \
|
||||
"Stock, ETF, forex, commodities data (free tier)" \
|
||||
"https://polygon.io/dashboard/signup"
|
||||
|
||||
set_key "FRED_API_KEY" \
|
||||
"US economic indicators (free, instant approval)" \
|
||||
"https://fred.stlouisfed.org/docs/api/api_key.html"
|
||||
|
||||
set_key "ETHERSCAN_API_KEY" \
|
||||
"On-chain wallet & contract analysis (free tier)" \
|
||||
"https://etherscan.io/myapikey"
|
||||
|
||||
set_key "CONGRESS_API_KEY" \
|
||||
"US legislation & bills tracking (free)" \
|
||||
"https://api.congress.gov/sign-up/"
|
||||
|
||||
# --- Summary ---
|
||||
echo ""
|
||||
echo ""
|
||||
|
||||
# Count configured keys
|
||||
configured=0
|
||||
total=8
|
||||
for var in LLM_API_KEY TAVILY_API_KEY SERPER_API_KEY TWITTER_API_KEY POLYGON_API_KEY FRED_API_KEY ETHERSCAN_API_KEY CONGRESS_API_KEY; do
|
||||
val=$(grep "^${var}=" .env 2>/dev/null | cut -d= -f2-)
|
||||
if [ -n "$val" ] && [ "$val" != "your_api_key_here" ]; then
|
||||
configured=$((configured + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
echo -e "${GREEN}╭──────────────────────────────────────────────────────────╮${NC}"
|
||||
echo -e "${GREEN}│ ✅ Setup Complete! │${NC}"
|
||||
echo -e "${GREEN}│ │${NC}"
|
||||
echo -e "${GREEN}│ API Keys configured: ${configured}/${total} │${NC}"
|
||||
echo -e "${GREEN}╰──────────────────────────────────────────────────────────╯${NC}"
|
||||
|
||||
if [ "$configured" -lt 4 ]; then
|
||||
echo ""
|
||||
echo -e " ${YELLOW}Tip: More API keys = better analysis coverage.${NC}"
|
||||
echo -e " ${YELLOW}You can edit .env anytime to add more keys later.${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo " Start monitoring:"
|
||||
echo -e " ${BOLD}source venv/bin/activate${NC}"
|
||||
echo -e " ${BOLD}python -m src.main run${NC}"
|
||||
echo ""
|
||||
echo " Other commands:"
|
||||
echo " python -m src.main check-markets # View trending markets"
|
||||
echo " python -m src.main dashboard # Web dashboard"
|
||||
echo " python -m src.main briefing --today # Daily briefing"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user