Skip to content

About

TUI manager for bot-* systemd services + boot menu for headless Linux servers

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bot-Control

TUI-менеджер ботов на базе systemd + загрузочное меню для headless-сервера.

AI-generated project — этот проект был полностью написан с помощью ИИ (opencode / big-pickle). Весь код, документация и структура сгенерированы нейросетью.


Описание

Набор инструментов для управления процессами ботов (Telegram, Discord и т.д.) как systemd-сервисами на Linux-сервере без графического интерфейса.

  • botctl.py — полноценное TUI-приложение на Python (curses) для создания, запуска, остановки, настройки и мониторинга ботов
  • start_choice.sh — загрузочное меню, показываемое при входе в TTY1 на сервере без дисплея

Возможности

Функция Горячая клавиша Описание
Список всех ботов — Таблица с именем, статусом, автозапуском и описанием
Запуск / Остановка Enter / Space Переключение состояния сервиса
Автозапуск вкл/выкл E systemctl enable / disable
Просмотр логов L Последние 300 строк из journalctl
Описание бота I Редактор заметок (Markdown, /etc/mybots/notes/)
Создать нового бота N Пошаговый мастер с генерацией unit-файла
Adopt существующего A Взять любой systemd-сервис и превратить в bot-*
Удалить бота X / Del Остановка, отключение, удаление unit-файла
Обновить список R Перечитать сервисы из systemd
CLI-отчёт --report Цветной статус для SSH/скриптов

Требования

  • Linux с systemd
  • Python 3 (только stdlib, без зависимостей)
  • root/sudo (для управления сервисами)

Установка

# Клонировать репозиторий
git clone https://github.com/Stexible/bot-control.git
cd Bot-Control

# (Опционально) Создать симлинк для удобства
sudo ln -s "$(pwd)/BOTS/botctl.py" /usr/local/bin/botctl

Использование

# TUI-менеджер (нужен root)
sudo python3 BOTS/botctl.py
# или через симлинк:
sudo botctl

# CLI-отчёт (работает без root)
python3 BOTS/botctl.py --report
python3 BOTS/botctl.py --report --no-color

# Загрузочное меню (при входе на TTY1 без $DISPLAY)
./start_choice.sh

Интерактивное управление при авторизации (TTY1)

Для серверов без постоянного использования GUI (например, Dell Server) настроено интерактивное меню выбора режима работы, которое запускается строго в момент авторизации пользователя в первой текстовой консоли. Это защищает ресурсы сервера: графическая оболочка (GDM3) не запустится автоматически, пока пользователь сам не выберет этот вариант после ввода логина и пароля.

Как это реализовано

  • Скрипт выбора (~/start_choice.sh): При запуске проверяет, находится ли пользователь на физическом мониторе в первой виртуальной консоли (TTY1) и не запущен ли дисплейный сервер. Если условия совпадают, выводится меню.
  • Механизм автозапуска: Вызов скрипта интегрирован в конфигурационный файл bash-оболочки пользователя, благодаря чему он срабатывает автоматически сразу после успешного логина.

Настройка для конкретного пользователя

Включать и выключать это меню можно индивидуально для любого пользователя в системе.

Включение меню

  1. Перенесите start_choice.sh в доступное место (например, /usr/local/bin/ или оставьте в домашней директории).
  2. Откройте .bashrc нужного пользователя:
    nano ~/.bashrc
  3. Прокрутите файл в самый конец и добавьте строку вызова скрипта:
    # Запуск интерактивного меню выбора режима (только для TTY1)
    ~/start_choice.sh
  4. Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X).

Отключение меню

  1. Откройте .bashrc этого пользователя:
    nano ~/.bashrc
  2. Найдите в самом конце строку ~/start_choice.sh и закомментируйте её (поставьте # в начале строки) или удалите:
    # ~/start_choice.sh
  3. Сохраните изменения. При следующей авторизации меню беспокоить не будет.

Поведение системы

  • Локальный вход через TTY1 (после ввода пароля): система выводит меню — запуск GUI, работа в консоли (с выводом статуса ботов), перезагрузка или выключение.
  • Удалённый доступ (SSH) / GUI-терминал: скрипт распознаёт, что это не физический TTY1, и вместо меню просто выводит актуальный статус ботов (botctl.py --report).

Структура

Bot-Control/
├── start_choice.sh       # Загрузочное меню (Bash)
├── README.md
└── BOTS/
    └── botctl.py         # TUI + CLI менеджер (Python 3)

Как это работает

botctl.py управляет systemd-сервисами с префиксом bot- (например, bot-telegram.service). Все сервисы группируются в bots.target. Заметки для каждого бота хранятся в /etc/mybots/notes/<имя>.md.


Bot-Control

TUI service manager for bots based on systemd + boot menu for headless servers.

AI-generated project — this project was fully written with the help of AI (opencode / big-pickle). All code, documentation, and structure were generated by a neural network.


Description

A toolkit for managing bot processes (Telegram, Discord, etc.) as systemd services on a headless Linux server.

  • botctl.py — a full-featured TUI application built with Python curses for creating, starting, stopping, configuring, and monitoring bots
  • start_choice.sh — a boot menu displayed at TTY1 login on displayless servers

Features

Feature Hotkey Description
List all bots — Table with name, status, auto-start, and description
Start / Stop Enter / Space Toggle service state
Toggle auto-start E systemctl enable / disable
View logs L Last 300 lines from journalctl
Bot description I Markdown notes editor (/etc/mybots/notes/)
Create new bot N Step-by-step wizard with unit file generation
Adopt existing A Take any systemd service and turn it into a bot-* service
Delete bot X / Del Stop, disable, and remove unit file
Refresh list R Re-read services from systemd
CLI report --report Colored status for SSH / scripts

Requirements

  • Linux with systemd
  • Python 3 (stdlib only, zero dependencies)
  • root/sudo (for service management)

Installation

git clone https://github.com/Stexible/bot-control.git
cd Bot-Control

# (Optional) Create a symlink for convenience
sudo ln -s "$(pwd)/BOTS/botctl.py" /usr/local/bin/botctl

Usage

# TUI manager (requires root)
sudo python3 BOTS/botctl.py
# or via symlink:
sudo botctl

# CLI status report (works without root)
python3 BOTS/botctl.py --report
python3 BOTS/botctl.py --report --no-color

# Boot menu (on TTY1 with no $DISPLAY)
./start_choice.sh

Interactive boot menu (TTY1)

For servers without constant GUI usage (e.g., Dell Server), an interactive mode-selection menu is configured to launch strictly at user login on the first text console. This protects server resources: the graphical shell (GDM3) will not start automatically until the user explicitly chooses that option after entering their username and password.

How it works

  • Selection script (~/start_choice.sh): On launch, it checks whether the user is on the physical monitor in the first virtual console (TTY1) and whether the display server is running. If conditions are met, the menu is displayed.
  • Auto-start mechanism: The script call is integrated into the user's bash shell configuration file, so it triggers automatically right after a successful login.

Setup for a specific user

You can enable or disable this menu individually for any user on the system.

Enabling the menu

  1. Move start_choice.sh to an accessible location (e.g., /usr/local/bin/ or keep it in the user's home directory).
  2. Open .bashrc for the target user:
    nano ~/.bashrc
  3. Scroll to the very end and add the script call:
    # Interactive boot menu (TTY1 only)
    ~/start_choice.sh
  4. Save the file (Ctrl+O, Enter) and exit (Ctrl+X).

Disabling the menu

  1. Open .bashrc for that user:
    nano ~/.bashrc
  2. Find the ~/start_choice.sh line at the end and comment it out (add # at the beginning) or remove it:
    # ~/start_choice.sh
  3. Save changes. The menu will no longer appear on the next login.

System behavior

  • Local login via TTY1 (after entering the password): the system displays the menu — launch GUI, work in console (with bot status overview), reboot, or shutdown.
  • Remote access (SSH) / GUI terminal: the script detects that this is not a physical TTY1 and, instead of the menu, simply prints the current bot status (botctl.py --report).

Structure

Bot-Control/
├── start_choice.sh       # Boot menu (Bash)
├── README.md
└── BOTS/
    └── botctl.py         # TUI + CLI manager (Python 3)

How it works

botctl.py manages systemd services with the bot- prefix (e.g., bot-telegram.service). All services are grouped under bots.target. Notes for each bot are stored in /etc/mybots/notes/<name>.md.

License

MIT

About

TUI manager for bot-* systemd services + boot menu for headless Linux servers

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages