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Для серверов без постоянного использования GUI (например, Dell Server) настроено интерактивное меню выбора режима работы, которое запускается строго в момент авторизации пользователя в первой текстовой консоли. Это защищает ресурсы сервера: графическая оболочка (GDM3) не запустится автоматически, пока пользователь сам не выберет этот вариант после ввода логина и пароля.
- Скрипт выбора (
~/start_choice.sh): При запуске проверяет, находится ли пользователь на физическом мониторе в первой виртуальной консоли (TTY1) и не запущен ли дисплейный сервер. Если условия совпадают, выводится меню. - Механизм автозапуска: Вызов скрипта интегрирован в конфигурационный файл bash-оболочки пользователя, благодаря чему он срабатывает автоматически сразу после успешного логина.
Включать и выключать это меню можно индивидуально для любого пользователя в системе.
- Перенесите
start_choice.shв доступное место (например,/usr/local/bin/или оставьте в домашней директории). - Откройте
.bashrcнужного пользователя:nano ~/.bashrc - Прокрутите файл в самый конец и добавьте строку вызова скрипта:
# Запуск интерактивного меню выбора режима (только для TTY1) ~/start_choice.sh
- Сохраните файл (
Ctrl+O,Enter) и выйдите (Ctrl+X).
- Откройте
.bashrcэтого пользователя:nano ~/.bashrc - Найдите в самом конце строку
~/start_choice.shи закомментируйте её (поставьте#в начале строки) или удалите:# ~/start_choice.sh - Сохраните изменения. При следующей авторизации меню беспокоить не будет.
- Локальный вход через 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.
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.
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 botsstart_choice.sh— a boot menu displayed at TTY1 login on displayless servers
| 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 |
- Linux with systemd
- Python 3 (stdlib only, zero dependencies)
- root/sudo (for service management)
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# 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.shFor 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.
- 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.
You can enable or disable this menu individually for any user on the system.
- Move
start_choice.shto an accessible location (e.g.,/usr/local/bin/or keep it in the user's home directory). - Open
.bashrcfor the target user:nano ~/.bashrc - Scroll to the very end and add the script call:
# Interactive boot menu (TTY1 only) ~/start_choice.sh
- Save the file (
Ctrl+O,Enter) and exit (Ctrl+X).
- Open
.bashrcfor that user:nano ~/.bashrc - Find the
~/start_choice.shline at the end and comment it out (add#at the beginning) or remove it:# ~/start_choice.sh - Save changes. The menu will no longer appear on the next login.
- 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).
Bot-Control/
├── start_choice.sh # Boot menu (Bash)
├── README.md
└── BOTS/
└── botctl.py # TUI + CLI manager (Python 3)
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.
MIT