mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 13:36:04 +00:00
v2.2.1: unified menu with bot management, grouped sections, telemt download fix, QR cleanup, version bump
This commit is contained in:
@@ -1,70 +1,147 @@
|
||||
# GoTelegram MTProxy Bot
|
||||
# GoTelegram v2.2 Bot
|
||||
|
||||
Telegram-бот для управления MTProxy на сервере — те же функции, что и у CLI `gotelegram`, но через бота.
|
||||
Production-quality Telegram bot for managing MTProxy (telemt engine) on Linux servers.
|
||||
|
||||
## Команды
|
||||
## Features
|
||||
|
||||
| Команда | Описание |
|
||||
|--------|----------|
|
||||
| `/start`, `/help` | Справка |
|
||||
| `/install` | Установить или обновить прокси (выбор домена и порта) |
|
||||
| `/status` | Статус и данные подключения (IP, порт, secret, ссылка) |
|
||||
| `/link` | Только ссылка `tg://proxy` |
|
||||
| `/restart` | Перезапустить контейнер |
|
||||
| `/logs` | Последние логи контейнера |
|
||||
| `/remove` | Удалить прокси |
|
||||
| `/promo` | Промо хостинга |
|
||||
- **Complete CLI Feature Parity** - All menu items from CLI version
|
||||
- Install (Quick/Stealth modes)
|
||||
- Status monitoring
|
||||
- Proxy link generation
|
||||
- Share with QR codes
|
||||
- Service restart
|
||||
- Logs viewing
|
||||
- Mode/template changes
|
||||
- Backup/restore
|
||||
- telemt updates
|
||||
- Website/SSL management
|
||||
- Remove installation
|
||||
- Promotional links
|
||||
|
||||
## Установка на сервер
|
||||
- **Template Browsing** - Browse categories → templates → preview → install
|
||||
- **V1 Migration** - Detects old mtg Docker container and offers migration
|
||||
- **Access Control** - ALLOWED_IDS from .env
|
||||
- **Async/Await** - Full async support via python-telegram-bot v21+
|
||||
- **Inline Keyboards** - Modern UI with callback-based navigation
|
||||
- **Shell Integration** - Executes system commands via asyncio subprocess
|
||||
- **Error Handling** - Production-ready error handling
|
||||
|
||||
### Публичный репозиторий (одной командой)
|
||||
## Installation
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Python 3.8+
|
||||
- Linux system with systemd
|
||||
- telemt installed and running
|
||||
- Telegram Bot Token from @BotFather
|
||||
|
||||
### Setup
|
||||
|
||||
1. Install dependencies:
|
||||
```bash
|
||||
curl -sL https://raw.githubusercontent.com/anten-ka/gotelegram_pro/main/install_gotelegram_bot.sh -o /tmp/install_gotelegram_bot.sh && sudo bash /tmp/install_gotelegram_bot.sh
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
При установке скрипт запросит **BOT_TOKEN** (получить у [@BotFather](https://t.me/BotFather)).
|
||||
|
||||
### Закрытый репозиторий (установка по ключу)
|
||||
|
||||
Для **приватного** репо используется клонирование по **SSH-ключу** или по **токену (PAT)**. Подробно: **[INSTALL_PRIVATE.md](../INSTALL_PRIVATE.md)** в корне репозитория.
|
||||
|
||||
Кратко:
|
||||
- **По SSH:** скопируйте `bootstrap_install.sh` на сервер, затем
|
||||
`GIT_REPO_SSH=git@github.com:USER/REPO.git sudo bash bootstrap_install.sh`
|
||||
- **По токену:**
|
||||
`GITHUB_TOKEN=ghp_xxx GIT_REPO_HTTPS=https://github.com/USER/REPO.git sudo -E bash bootstrap_install.sh`
|
||||
- Или клонируйте репо вручную и запустите:
|
||||
`sudo ./install_gotelegram_bot.sh`
|
||||
|
||||
### Локально (файлы уже рядом со скриптом)
|
||||
|
||||
2. Create .env file:
|
||||
```bash
|
||||
sudo ./install_gotelegram_bot.sh
|
||||
cp config.example.env .env
|
||||
# Edit .env and set your BOT_TOKEN
|
||||
nano .env
|
||||
```
|
||||
|
||||
## Конфигурация
|
||||
|
||||
Файл: `/opt/gotelegram-bot/.env`
|
||||
|
||||
- **BOT_TOKEN** — токен от @BotFather (обязательно).
|
||||
- **ALLOWED_IDS** — опционально. Список ID пользователей через запятую; если не задан, бот доступен всем.
|
||||
|
||||
После изменения `.env` перезапуск сервиса:
|
||||
|
||||
3. (Optional) Restrict access to specific users:
|
||||
```bash
|
||||
sudo systemctl restart gotelegram-bot
|
||||
# Edit .env and uncomment ALLOWED_IDS
|
||||
# ALLOWED_IDS=123456789,987654321
|
||||
```
|
||||
|
||||
## Требования на сервере
|
||||
|
||||
- Linux (systemd), Docker, Python 3.
|
||||
- Перед использованием бота на сервере должен быть установлен Docker (бот сам поднимает контейнер `nineseconds/mtg:2` по команде `/install`).
|
||||
|
||||
## Управление сервисом
|
||||
### Running the Bot
|
||||
|
||||
```bash
|
||||
sudo systemctl status gotelegram-bot
|
||||
sudo systemctl restart gotelegram-bot
|
||||
journalctl -u gotelegram-bot -f
|
||||
python3 bot.py
|
||||
```
|
||||
|
||||
For systemd service:
|
||||
|
||||
```bash
|
||||
[Unit]
|
||||
Description=GoTelegram Bot
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=gotelegram
|
||||
WorkingDirectory=/opt/gotelegram/bot
|
||||
ExecStart=/usr/bin/python3 /opt/gotelegram/bot/bot.py
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### .env Variables
|
||||
|
||||
- `BOT_TOKEN` - Telegram bot token (required)
|
||||
- `ALLOWED_IDS` - Comma-separated user IDs (optional, all users allowed if empty)
|
||||
|
||||
### System Paths
|
||||
|
||||
- `GOTELEGRAM_CONFIG` - `/opt/gotelegram/config.json`
|
||||
- `TELEMT_CONFIG` - `/etc/telemt/config.toml`
|
||||
- `TELEMT_SERVICE` - `telemt` (systemd service name)
|
||||
- `WEBSITE_ROOT` - `/var/www/gotelegram-site`
|
||||
- `BACKUP_DIR` - `/opt/gotelegram/backups`
|
||||
- `TEMPLATES_CATALOG` - `/opt/gotelegram/templates_catalog.json`
|
||||
|
||||
## Architecture
|
||||
|
||||
### Single File Design
|
||||
All functionality in one `bot.py` for simplicity and ease of deployment.
|
||||
|
||||
### Command Handlers
|
||||
- `/start` - Main menu
|
||||
- `/help` - Help text
|
||||
- `/status` - Quick status
|
||||
- `/logs` - Recent logs
|
||||
|
||||
### Callback Handlers
|
||||
Organized by feature:
|
||||
- Installation (quick/stealth modes)
|
||||
- Status monitoring
|
||||
- Backup/restore
|
||||
- SSL management
|
||||
- Updates
|
||||
- Removal
|
||||
|
||||
### Shell Integration
|
||||
Async subprocess wrapper:
|
||||
```python
|
||||
code, stdout, stderr = await sh("command", "arg1", "arg2")
|
||||
```
|
||||
|
||||
## Callback Data Convention
|
||||
|
||||
- `menu_*` - Menu items
|
||||
- `install_mode_*` - Install options
|
||||
- `quick_dom_*` - Domain selection
|
||||
- `stealth_cat_*` - Template categories
|
||||
- `stealth_tpl_*` - Template selection
|
||||
- `stealth_confirm_*` - Confirm installation
|
||||
- `backup_*` - Backup operations
|
||||
- `ssl_*` - SSL operations
|
||||
- `restore_backup_*` - Restore operations
|
||||
|
||||
## Credits
|
||||
|
||||
- **telemt** - MTProxy engine foundation
|
||||
- **HTML5UP** - Beautiful web templates
|
||||
- **Learning Zone** - Educational resources
|
||||
- **Start Bootstrap** - Bootstrap framework
|
||||
- **Community** - Your feedback and support
|
||||
|
||||
## License
|
||||
|
||||
GoTelegram v2.2 - Open source community project
|
||||
|
||||
370
install.sh
370
install.sh
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
# GoTelegram v2.2 — MTProxy на ядре telemt (Rust + Tokio)
|
||||
# GoTelegram v2.2.1 — MTProxy на ядре telemt (Rust + Tokio)
|
||||
# Anti-DPI • Fake TLS • TCP Splice • JA3/JA4 Resistance
|
||||
#
|
||||
# Установка:
|
||||
@@ -23,19 +23,26 @@ source "$LIB_DIR/backup.sh"
|
||||
|
||||
# ── Главное меню ─────────────────────────────────────────────────────────────
|
||||
show_main_menu() {
|
||||
local status
|
||||
status=$(telemt_status)
|
||||
local proxy_status bot_status
|
||||
proxy_status=$(telemt_status)
|
||||
bot_status=$(bot_service_status)
|
||||
|
||||
local status_badge
|
||||
case "$status" in
|
||||
running) status_badge="${GREEN}● Работает${NC}" ;;
|
||||
stopped) status_badge="${YELLOW}○ Остановлен${NC}" ;;
|
||||
*) status_badge="${RED}✗ Не установлен${NC}" ;;
|
||||
local proxy_badge bot_badge
|
||||
case "$proxy_status" in
|
||||
running) proxy_badge="${GREEN}● Работает${NC}" ;;
|
||||
stopped) proxy_badge="${YELLOW}○ Остановлен${NC}" ;;
|
||||
*) proxy_badge="${RED}✗ Не установлен${NC}" ;;
|
||||
esac
|
||||
case "$bot_status" in
|
||||
running) bot_badge="${GREEN}● Бот работает${NC}" ;;
|
||||
stopped) bot_badge="${YELLOW}○ Бот остановлен${NC}" ;;
|
||||
*) bot_badge="${DIM}нет${NC}" ;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}Главное меню${NC} │ ${status_badge}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
echo -e " ${BOLD}${WHITE}Главное меню${NC} │ Proxy: ${proxy_badge} │ ${bot_badge}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..60})${NC}"
|
||||
echo -e " ${DIM}── Прокси ──${NC}"
|
||||
echo -e " ${CYAN} 1)${NC} 🔧 Установить / Обновить прокси"
|
||||
echo -e " ${CYAN} 2)${NC} 📊 Статус"
|
||||
echo -e " ${CYAN} 3)${NC} 🔗 Ссылка для подключения"
|
||||
@@ -43,14 +50,17 @@ show_main_menu() {
|
||||
echo -e " ${CYAN} 5)${NC} 🔄 Перезапуск"
|
||||
echo -e " ${CYAN} 6)${NC} 📋 Логи"
|
||||
echo -e " ${CYAN} 7)${NC} 🎭 Сменить режим / шаблон"
|
||||
echo -e " ${DIM}── Управление ──${NC}"
|
||||
echo -e " ${CYAN} 8)${NC} 💾 Бекап конфигурации"
|
||||
echo -e " ${CYAN} 9)${NC} 📦 Восстановить из бекапа"
|
||||
echo -e " ${CYAN}10)${NC} ⬆️ Обновить telemt"
|
||||
echo -e " ${CYAN}11)${NC} 🌐 Управление сайтом (SSL)"
|
||||
echo -e " ${CYAN}12)${NC} 🗑 Удалить прокси"
|
||||
echo -e " ${CYAN}13)${NC} 🏷 Промо"
|
||||
echo -e " ${DIM}── Бот и прочее ──${NC}"
|
||||
echo -e " ${CYAN}12)${NC} 🤖 Telegram-бот"
|
||||
echo -e " ${CYAN}13)${NC} 🗑 Удалить всё"
|
||||
echo -e " ${CYAN}14)${NC} 🏷 Промо"
|
||||
echo -e " ${CYAN} 0)${NC} 🚪 Выход"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..60})${NC}"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
}
|
||||
|
||||
@@ -384,26 +394,337 @@ menu_website() {
|
||||
# ── Удаление ─────────────────────────────────────────────────────────────────
|
||||
menu_remove() {
|
||||
echo ""
|
||||
log_warning "Это удалит прокси и все настройки."
|
||||
if ! confirm "Вы уверены?"; then
|
||||
return
|
||||
fi
|
||||
echo -e " ${BOLD}${RED}🗑 Удаление GoTelegram${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
echo -e " ${CYAN}1)${NC} Удалить только прокси (telemt)"
|
||||
echo -e " ${CYAN}2)${NC} Удалить только Telegram-бота"
|
||||
echo -e " ${CYAN}3)${NC} Удалить всё (прокси + бот + настройки)"
|
||||
echo -e " ${CYAN}0)${NC} Назад"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r rm_choice
|
||||
|
||||
# Предлагаем бекап
|
||||
case "$rm_choice" in
|
||||
1)
|
||||
log_warning "Это удалит прокси и все его настройки."
|
||||
if ! confirm "Удалить прокси?"; then return; fi
|
||||
if confirm "Сделать бекап перед удалением?"; then
|
||||
interactive_backup
|
||||
fi
|
||||
|
||||
remove_telemt
|
||||
|
||||
local mode
|
||||
mode=$(config_get mode 2>/dev/null)
|
||||
if [ "$mode" = "stealth" ]; then
|
||||
remove_stealth_mode
|
||||
fi
|
||||
|
||||
rm -f "$GOTELEGRAM_CONFIG"
|
||||
log_success "GoTelegram полностью удалён"
|
||||
log_success "Прокси удалён"
|
||||
;;
|
||||
2)
|
||||
bot_remove
|
||||
;;
|
||||
3)
|
||||
log_warning "Это удалит ВСЁ: прокси, бот, сайт, настройки."
|
||||
if ! confirm "Вы точно уверены?"; then return; fi
|
||||
if confirm "Сделать бекап перед удалением?"; then
|
||||
interactive_backup
|
||||
fi
|
||||
# Прокси
|
||||
remove_telemt
|
||||
local mode
|
||||
mode=$(config_get mode 2>/dev/null)
|
||||
if [ "$mode" = "stealth" ]; then
|
||||
remove_stealth_mode
|
||||
fi
|
||||
rm -f "$GOTELEGRAM_CONFIG"
|
||||
# Бот
|
||||
if [ "$(bot_service_status)" != "not_installed" ]; then
|
||||
systemctl stop "$BOT_SERVICE" 2>/dev/null
|
||||
systemctl disable "$BOT_SERVICE" 2>/dev/null
|
||||
rm -f "/etc/systemd/system/${BOT_SERVICE}.service"
|
||||
systemctl daemon-reload
|
||||
rm -rf "$BOT_DIR"
|
||||
fi
|
||||
log_success "GoTelegram полностью удалён (прокси + бот)"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# ── Telegram-бот ────────────────────────────────────────────────────────────
|
||||
BOT_DIR="/opt/gotelegram-bot"
|
||||
BOT_SERVICE="gotelegram-bot"
|
||||
|
||||
bot_service_status() {
|
||||
if ! systemctl list-unit-files "$BOT_SERVICE.service" &>/dev/null 2>&1; then
|
||||
echo "not_installed"
|
||||
elif systemctl is-active "$BOT_SERVICE" &>/dev/null 2>&1; then
|
||||
echo "running"
|
||||
else
|
||||
echo "stopped"
|
||||
fi
|
||||
}
|
||||
|
||||
menu_bot() {
|
||||
local st
|
||||
st=$(bot_service_status)
|
||||
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}🤖 Telegram-бот${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
|
||||
case "$st" in
|
||||
running)
|
||||
echo -e " Статус: ${GREEN}● Работает${NC}"
|
||||
echo ""
|
||||
echo -e " ${CYAN}1)${NC} 📊 Статус бота"
|
||||
echo -e " ${CYAN}2)${NC} 📋 Логи бота"
|
||||
echo -e " ${CYAN}3)${NC} 🔄 Перезапустить бота"
|
||||
echo -e " ${CYAN}4)${NC} ⏹ Остановить бота"
|
||||
echo -e " ${CYAN}5)${NC} ⚙️ Настройки (.env)"
|
||||
echo -e " ${CYAN}6)${NC} 🗑 Удалить бота"
|
||||
;;
|
||||
stopped)
|
||||
echo -e " Статус: ${YELLOW}○ Остановлен${NC}"
|
||||
echo ""
|
||||
echo -e " ${CYAN}1)${NC} 📊 Статус бота"
|
||||
echo -e " ${CYAN}2)${NC} 📋 Логи бота"
|
||||
echo -e " ${CYAN}3)${NC} ▶️ Запустить бота"
|
||||
echo -e " ${CYAN}5)${NC} ⚙️ Настройки (.env)"
|
||||
echo -e " ${CYAN}6)${NC} 🗑 Удалить бота"
|
||||
;;
|
||||
*)
|
||||
echo -e " Статус: ${RED}✗ Не установлен${NC}"
|
||||
echo ""
|
||||
echo -e " ${DIM}Бот позволяет управлять прокси прямо из Telegram:${NC}"
|
||||
echo -e " ${DIM}статус, перезапуск, смена режима, бекап, QR-код.${NC}"
|
||||
echo ""
|
||||
echo -e " ${CYAN}1)${NC} 🔧 Установить бота"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo -e " ${CYAN}0)${NC} « Назад"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r ch
|
||||
|
||||
case "$st" in
|
||||
running)
|
||||
case "$ch" in
|
||||
1) bot_show_status ;;
|
||||
2) bot_show_logs ;;
|
||||
3) systemctl restart "$BOT_SERVICE" && log_success "Бот перезапущен" ;;
|
||||
4) systemctl stop "$BOT_SERVICE" && log_info "Бот остановлен" ;;
|
||||
5) bot_edit_config ;;
|
||||
6) bot_remove ;;
|
||||
esac
|
||||
;;
|
||||
stopped)
|
||||
case "$ch" in
|
||||
1) bot_show_status ;;
|
||||
2) bot_show_logs ;;
|
||||
3) systemctl start "$BOT_SERVICE" && log_success "Бот запущен" ;;
|
||||
5) bot_edit_config ;;
|
||||
6) bot_remove ;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
case "$ch" in
|
||||
1) bot_install ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
bot_install() {
|
||||
log_step "Установка Telegram-бота"
|
||||
|
||||
# Python
|
||||
if ! command -v python3 &>/dev/null; then
|
||||
log_info "Установка Python3..."
|
||||
if command -v apt-get &>/dev/null; then
|
||||
apt-get update -qq && apt-get install -y -qq python3 python3-pip python3-venv
|
||||
elif command -v dnf &>/dev/null; then
|
||||
dnf install -y -q python3 python3-pip
|
||||
elif command -v yum &>/dev/null; then
|
||||
yum install -y -q python3 python3-pip
|
||||
fi
|
||||
fi
|
||||
|
||||
# Копируем файлы бота
|
||||
mkdir -p "$BOT_DIR"
|
||||
if [ -f "$SCRIPT_DIR/gotelegram-bot/bot.py" ]; then
|
||||
cp "$SCRIPT_DIR/gotelegram-bot/bot.py" "$BOT_DIR/"
|
||||
cp "$SCRIPT_DIR/gotelegram-bot/requirements.txt" "$BOT_DIR/"
|
||||
[ -f "$SCRIPT_DIR/gotelegram-bot/config.example.env" ] && \
|
||||
cp "$SCRIPT_DIR/gotelegram-bot/config.example.env" "$BOT_DIR/"
|
||||
else
|
||||
log_error "Файлы бота не найдены в $SCRIPT_DIR/gotelegram-bot/"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Каталог шаблонов
|
||||
[ -f "$SCRIPT_DIR/templates_catalog.json" ] && \
|
||||
cp "$SCRIPT_DIR/templates_catalog.json" "$GOTELEGRAM_DIR/"
|
||||
|
||||
# Venv
|
||||
if [ ! -d "$BOT_DIR/venv" ]; then
|
||||
log_info "Создание виртуального окружения..."
|
||||
python3 -m venv "$BOT_DIR/venv"
|
||||
fi
|
||||
log_info "Установка зависимостей..."
|
||||
"$BOT_DIR/venv/bin/pip" install -r "$BOT_DIR/requirements.txt" -q
|
||||
|
||||
# Конфигурация
|
||||
if [ ! -f "$BOT_DIR/.env" ]; then
|
||||
echo ""
|
||||
echo -e " ${YELLOW}Введите BOT_TOKEN от @BotFather:${NC}"
|
||||
local token=""
|
||||
while [ -z "$token" ]; do
|
||||
echo -ne " ${WHITE}Token:${NC} "
|
||||
read -r token
|
||||
token=$(echo "$token" | tr -d '[:space:]')
|
||||
[ -z "$token" ] && log_error "Токен не может быть пустым"
|
||||
done
|
||||
|
||||
echo -ne " ${WHITE}ID администратора (Enter = доступ для всех):${NC} "
|
||||
read -r admin_id
|
||||
|
||||
{
|
||||
echo "BOT_TOKEN=$token"
|
||||
[ -n "$admin_id" ] && echo "ALLOWED_IDS=$admin_id"
|
||||
} > "$BOT_DIR/.env"
|
||||
|
||||
chmod 600 "$BOT_DIR/.env"
|
||||
log_success ".env создан"
|
||||
else
|
||||
log_info ".env уже существует, настройки сохранены"
|
||||
fi
|
||||
|
||||
# Systemd
|
||||
cat > "/etc/systemd/system/${BOT_SERVICE}.service" << SVCEOF
|
||||
[Unit]
|
||||
Description=GoTelegram v${GOTELEGRAM_VERSION} Telegram Bot
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=$BOT_DIR
|
||||
ExecStart=$BOT_DIR/venv/bin/python $BOT_DIR/bot.py
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
Environment=PATH=$BOT_DIR/venv/bin:/usr/bin
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
SVCEOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable "$BOT_SERVICE" &>/dev/null
|
||||
systemctl restart "$BOT_SERVICE" 2>/dev/null || systemctl start "$BOT_SERVICE"
|
||||
|
||||
echo ""
|
||||
log_success "Бот установлен и запущен!"
|
||||
echo -e " ${DIM}Проверка: systemctl status $BOT_SERVICE${NC}"
|
||||
echo -e " ${DIM}Логи: journalctl -u $BOT_SERVICE -f${NC}"
|
||||
}
|
||||
|
||||
bot_show_status() {
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}📊 Статус Telegram-бота${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
systemctl status "$BOT_SERVICE" --no-pager -l 2>/dev/null | head -15 | while IFS= read -r line; do
|
||||
echo " $line"
|
||||
done
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
|
||||
if [ -f "$BOT_DIR/.env" ]; then
|
||||
local has_token has_ids
|
||||
has_token=$(grep -c "BOT_TOKEN=" "$BOT_DIR/.env" 2>/dev/null || echo 0)
|
||||
has_ids=$(grep "ALLOWED_IDS=" "$BOT_DIR/.env" 2>/dev/null | cut -d= -f2)
|
||||
echo -e " Token: ${has_token:+${GREEN}✓ настроен${NC}}"
|
||||
echo -e " Доступ: ${has_ids:+ID: $has_ids}${has_ids:-${YELLOW}все пользователи${NC}}"
|
||||
fi
|
||||
}
|
||||
|
||||
bot_show_logs() {
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}📋 Логи бота (последние 30 строк):${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
journalctl -u "$BOT_SERVICE" --no-pager -n 30 2>/dev/null | while IFS= read -r line; do
|
||||
echo " $line"
|
||||
done
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
}
|
||||
|
||||
bot_edit_config() {
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}⚙️ Настройки бота${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
|
||||
if [ -f "$BOT_DIR/.env" ]; then
|
||||
echo -e " ${DIM}Текущий .env:${NC}"
|
||||
while IFS= read -r line; do
|
||||
# Маскируем токен для безопасности
|
||||
if [[ "$line" == BOT_TOKEN=* ]]; then
|
||||
local tok="${line#BOT_TOKEN=}"
|
||||
echo -e " BOT_TOKEN=${tok:0:10}...${tok: -5}"
|
||||
else
|
||||
echo " $line"
|
||||
fi
|
||||
done < "$BOT_DIR/.env"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e " ${CYAN}1)${NC} Сменить BOT_TOKEN"
|
||||
echo -e " ${CYAN}2)${NC} Изменить ALLOWED_IDS"
|
||||
echo -e " ${CYAN}0)${NC} Назад"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r ch
|
||||
|
||||
case "$ch" in
|
||||
1)
|
||||
echo -ne " ${WHITE}Новый BOT_TOKEN:${NC} "
|
||||
read -r new_token
|
||||
new_token=$(echo "$new_token" | tr -d '[:space:]')
|
||||
if [ -n "$new_token" ]; then
|
||||
sed -i "s|^BOT_TOKEN=.*|BOT_TOKEN=$new_token|" "$BOT_DIR/.env"
|
||||
systemctl restart "$BOT_SERVICE"
|
||||
log_success "Токен обновлён, бот перезапущен"
|
||||
else
|
||||
log_error "Пустой токен"
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
echo -ne " ${WHITE}ALLOWED_IDS (через запятую, пусто = все):${NC} "
|
||||
read -r new_ids
|
||||
new_ids=$(echo "$new_ids" | tr -d '[:space:]')
|
||||
if grep -q "^ALLOWED_IDS=" "$BOT_DIR/.env" 2>/dev/null; then
|
||||
if [ -n "$new_ids" ]; then
|
||||
sed -i "s|^ALLOWED_IDS=.*|ALLOWED_IDS=$new_ids|" "$BOT_DIR/.env"
|
||||
else
|
||||
sed -i '/^ALLOWED_IDS=/d' "$BOT_DIR/.env"
|
||||
fi
|
||||
else
|
||||
[ -n "$new_ids" ] && echo "ALLOWED_IDS=$new_ids" >> "$BOT_DIR/.env"
|
||||
fi
|
||||
systemctl restart "$BOT_SERVICE"
|
||||
log_success "Доступ обновлён, бот перезапущен"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
bot_remove() {
|
||||
echo ""
|
||||
log_warning "Это удалит Telegram-бота и все его настройки."
|
||||
if ! confirm "Удалить бота?"; then
|
||||
return
|
||||
fi
|
||||
|
||||
systemctl stop "$BOT_SERVICE" 2>/dev/null
|
||||
systemctl disable "$BOT_SERVICE" 2>/dev/null
|
||||
rm -f "/etc/systemd/system/${BOT_SERVICE}.service"
|
||||
systemctl daemon-reload
|
||||
rm -rf "$BOT_DIR"
|
||||
log_success "Бот полностью удалён"
|
||||
}
|
||||
|
||||
# ── Промо ────────────────────────────────────────────────────────────────────
|
||||
@@ -445,8 +766,9 @@ main() {
|
||||
9) interactive_restore ;;
|
||||
10) update_telemt ;;
|
||||
11) menu_website ;;
|
||||
12) menu_remove ;;
|
||||
13) menu_promo ;;
|
||||
12) menu_bot ;;
|
||||
13) menu_remove ;;
|
||||
14) menu_promo ;;
|
||||
0|q|exit) echo ""; log_info "До встречи! 👋"; exit 0 ;;
|
||||
*) log_error "Неверный выбор" ;;
|
||||
esac
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/bash
|
||||
# GoTelegram v2.2 — Установка Telegram-бота
|
||||
# GoTelegram v2.2.1 — Установка Telegram-бота
|
||||
# Создаёт venv, ставит зависимости, настраивает systemd
|
||||
|
||||
set -e
|
||||
@@ -19,7 +19,7 @@ if [ "$EUID" -ne 0 ]; then
|
||||
fi
|
||||
|
||||
echo -e "${CYAN}╔═══════════════════════════════════════════╗${NC}"
|
||||
echo -e "${CYAN}║${NC} ${GREEN}GoTelegram v2.2 — Установка бота${NC} ${CYAN}║${NC}"
|
||||
echo -e "${CYAN}║${NC} ${GREEN}GoTelegram v2.2.1 — Установка бота${NC} ${CYAN}║${NC}"
|
||||
echo -e "${CYAN}╚═══════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
|
||||
@@ -93,7 +93,7 @@ fi
|
||||
# ── Systemd ──────────────────────────────────────────────────────────────────
|
||||
cat > "/etc/systemd/system/${SERVICE_NAME}.service" << EOF
|
||||
[Unit]
|
||||
Description=GoTelegram v2.2 Telegram Bot
|
||||
Description=GoTelegram v2.2.1 Telegram Bot
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
|
||||
Reference in New Issue
Block a user