-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsetup
More file actions
133 lines (114 loc) · 6.07 KB
/
setup
File metadata and controls
133 lines (114 loc) · 6.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/bash
# ─── Colors ───────────────────────────────────────────────
CYAN='\033[1;96m'
GREEN='\033[1;92m'
YELLOW='\033[1;93m'
RED='\033[1;91m'
RESET='\033[0m'
# ─── Auto-detect actual script directory (any clone name) ──
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BOT_NAME="yuki"
log() { echo -e "${CYAN}[*] $1${RESET}"; }
ok() { echo -e "${GREEN}✓ $1${RESET}"; }
warn() { echo -e "${YELLOW}⚠ $1${RESET}"; }
err() { echo -e "${RED}✗ $1${RESET}"; exit 1; }
echo -e "\n${CYAN}=== ʏᴜᴋɪ ᴀᴜᴛᴏ ɪɴsᴛᴀʟʟᴇʀ ===${RESET}"
echo -e "${YELLOW}Directory: ${SCRIPT_DIR}${RESET}\n"
# ─── 1. System Update ─────────────────────────────────────
log "Updating system packages..."
sudo apt-get update -y > /dev/null 2>&1 || err "apt update failed. Check internet/sudo."
ok "System updated!"
# ─── 2. Python 3.11 ───────────────────────────────────────
log "Installing Python 3.11..."
if ! command -v python3.11 &>/dev/null; then
# Try deadsnakes PPA if not available natively
sudo apt-get install -y software-properties-common > /dev/null 2>&1
sudo add-apt-repository -y ppa:deadsnakes/ppa > /dev/null 2>&1
sudo apt-get update -y > /dev/null 2>&1
fi
sudo apt-get install -y python3.11 python3.11-venv python3.11-distutils > /dev/null 2>&1
python3.11 --version &>/dev/null || err "Python 3.11 install failed!"
ok "Python 3.11 ready!"
# ─── 3. Node.js (v18+) & PM2 ──────────────────────────────
log "Installing Node.js 18 & PM2..."
NODE_VER=$(node -v 2>/dev/null | grep -oP '\d+' | head -1)
if [[ -z "$NODE_VER" || "$NODE_VER" -lt 18 ]]; then
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - > /dev/null 2>&1
sudo apt-get install -y nodejs > /dev/null 2>&1
fi
sudo npm install -g pm2 > /dev/null 2>&1 || err "PM2 install failed!"
ok "PM2 & Node.js $(node -v) ready!"
# ─── 4. Virtual Environment ───────────────────────────────
log "Creating virtual environment..."
cd "$SCRIPT_DIR" || err "Cannot cd into $SCRIPT_DIR"
if [ ! -d "venv" ]; then
python3.11 -m venv venv || err "Venv creation failed!"
fi
source venv/bin/activate || err "Cannot activate venv!"
ok "Venv activated!"
# ─── 5. Requirements ──────────────────────────────────────
log "Installing requirements..."
if [ ! -f "$SCRIPT_DIR/requirements.txt" ]; then
err "requirements.txt not found in $SCRIPT_DIR"
fi
pip install --upgrade pip > /dev/null 2>&1
pip install -r "$SCRIPT_DIR/requirements.txt" > /dev/null 2>&1
if [ $? -ne 0 ]; then
warn "Some packages failed. Retrying with --ignore-requires-python..."
pip install -r "$SCRIPT_DIR/requirements.txt" --ignore-requires-python > /dev/null 2>&1 \
|| err "requirements install failed! Run: pip install -r requirements.txt manually"
fi
ok "Requirements installed!"
# ─── 6. .env Setup ────────────────────────────────────────
if [ ! -f "$SCRIPT_DIR/.env" ]; then
if [ -f "$SCRIPT_DIR/sample.env" ]; then
cp "$SCRIPT_DIR/sample.env" "$SCRIPT_DIR/.env"
ok "Created .env from sample!"
else
warn "sample.env not found. Create .env manually."
fi
else
warn ".env already exists, skipping."
fi
# ─── 7. PM2 Registration ──────────────────────────────────
log "Registering bot in PM2..."
pm2 delete "$BOT_NAME" > /dev/null 2>&1 # Remove old entry if any
START_SCRIPT="$SCRIPT_DIR/start"
if [ ! -f "$START_SCRIPT" ]; then
warn "'start' script missing. Trying 'python3.11 yuki.py' as fallback..."
pm2 start python3.11 --name "$BOT_NAME" -- "$SCRIPT_DIR/yuki.py" > /dev/null 2>&1
else
pm2 start "$START_SCRIPT" --interpreter bash --name "$BOT_NAME" > /dev/null 2>&1
fi
pm2 stop "$BOT_NAME" > /dev/null 2>&1
pm2 save > /dev/null 2>&1
ok "Bot registered & stopped in PM2!"
# ─── 8. Bashrc Aliases (dynamic path) ────────────────────
log "Injecting terminal aliases..."
# Remove all old yuki aliases cleanly
sed -i '/# YUKI Dashboard/d' ~/.bashrc
sed -i '/^alias logs=/d' ~/.bashrc
sed -i '/^alias restart=/d' ~/.bashrc
sed -i '/^alias stop=/d' ~/.bashrc
sed -i '/^alias setup=/d' ~/.bashrc
sed -i '/^alias version=/d' ~/.bashrc
sed -i '/^alias update=/d' ~/.bashrc
# Inject fresh aliases with actual resolved path
cat >> ~/.bashrc <<EOF
# YUKI Dashboard — $(date '+%Y-%m-%d')
alias logs='pm2 logs $BOT_NAME'
alias restart='pm2 restart $BOT_NAME'
alias stop='pm2 stop $BOT_NAME'
alias setup='bash ${SCRIPT_DIR}/setup'
alias version='${SCRIPT_DIR}/venv/bin/python3.11 ${SCRIPT_DIR}/yuki.py version'
alias update='${SCRIPT_DIR}/venv/bin/python3.11 ${SCRIPT_DIR}/yuki.py update'
EOF
ok "Aliases injected!"
# ─── Done ─────────────────────────────────────────────────
echo -e "\n${GREEN}=== sᴇᴛᴜᴘ sᴜᴄᴄᴇssғᴜʟʟʏ ᴄᴏᴍᴘʟᴇᴛᴇᴅ ===${RESET}"
echo -e "──────────────────────────────────────────────────"
echo -e "${YELLOW}Step 1:${RESET} Edit config → ${CYAN}nano ${SCRIPT_DIR}/.env${RESET}"
echo -e "${YELLOW}Step 2:${RESET} Reload shell → ${CYAN}source ~/.bashrc${RESET}"
echo -e "${YELLOW}Step 3:${RESET} Start bot → ${CYAN}restart${RESET}"
echo -e "${YELLOW}Step 4:${RESET} Check logs → ${CYAN}logs${RESET}"
echo -e "──────────────────────────────────────────────────\n"