Этот проект я изначально писал для себя и под свои рабочие привычки: хотелось иметь быстрый “пульт” к компьютеру/серверу из Telegram, где всё управляется кнопками, без постоянного ввода команд.
Потом стало понятно, что штука может пригодиться и другим людям, поэтому я решил выложить её в открытый доступ.

Репозиторий на GitHub:
https://github.com/andreykadelite/AutoCraft-Bot

Последняя версия на GitHub на момент публикации: v1.1.7.

Если интересно, как всё начиналось и к чему я пришёл по ходу разработки, у меня уже выходили две статьи на Хабре:

Ниже я расскажу именно про архитектуру и модульность: что где лежит, как подключается, и почему в проекте можно расширяться без переписывания ядра.


Зачем и кому это может быть полезно

AutoCraft‑Bot удобен, если у вас Windows‑машина (ПК или сервер), и вы хотите:

  • быстро посмотреть состояние системы (сеть/диски/службы/процессы);

  • управлять задачами “в пару кликов”;

  • получать и отправлять файлы через Telegram;

  • расширять функционал без превращения проекта в монолит.

Я отдельно думал про доступность: мне важно, чтобы управление было комфортным со скринридером, поэтому многие вещи сделаны через reply‑клавиатуру (кнопки внизу, рядом �� полем ввода), а не через “найди нужную кнопку в истории сообщений”.


Что умеет бот

Функциональность у меня распределена по модулям. Из того, что обычно используют чаще всего:

  • Файловый менеджер в Telegram на reply‑кнопках: диски, папки, пагинация, выделение, копировать/вырезать/вставить, переименовать, удалить, скачать файл в Telegram.

  • Отправка и приём файлов (в том числе массовая отправка из отдельной папки).

  • Заметки с навигацией стрелками/кнопками.

  • Скриншоты.

  • Сеть (информация/диагностика).

  • Процессы и службы Windows (просмотр и управление).

  • PowerShell/консольные действия (в рамках отдельных модулей и режимов).

  • Громкость и мультимедиа‑кнопки (там, где это уместно).

  • Менеджер плагинов: установка (в том числе ZIP), удаление, резервные копии, автозапуск.

  • GUI на PyQt5 для настройки и локального Telegram Bot API сервера.

Это не “одно огромное меню на тысячу кнопок”, а набор включаемых блоков.


Общая схема проекта

Точка входа: bot-ok.py.

Внутри проект делится на три слоя расширения:

  1. Модули бота (moduls/)

  2. Плагины (plugins/) — можно добавлять даже в EXE, без перекомпиляции

  3. GUI‑модули (gui_win/) — отдельные окна PyQt5, которые подхватываются динамически

Примерная структура:

bot-ok.py                        # точка входа
gui.py                           # основной GUI
gui_serverapi.py                 # GUI настройки локального Bot API сервера

moduls/                          # Telegram-модули (aiogram)
  Moduls_manager_sys_ext.py      # автозагрузка модулей

menu_registry/                   # реестры меню (главное/утилиты/настройки/дополнительно)

plugins/                         # плагины (каждый плагин — отдельная папка)

gui_win/                         # окна GUI (подхват через модуль загрузки)

Pythonextrbot.py                 # распаковка Python.zip → ./python (для плагинов/venv)
serverextrbot.py                 # распаковка serverapibot.zip → ./serverapibot (локальный Bot API)

Модули: как подключаются без правок ядра

Основной принцип простой: ядро знает только “контракт”, а конкретные модули подцепляются автоматически.

За это отвечает moduls/Moduls_manager_sys_ext.py:

  • он сканирует папку moduls/;

  • делит модули на startrun* и nostartrun*:

    • startrun* грузятся сразу,

    • nostartrun* подключаются после авторизации;

  • у модуля вызывается register_handlers(dp), если функция есть.

Такой подход удобен тем, что новый модуль обычно выглядит как “один файл + регистрация хэндлеров”, и ядро при этом трогать не нужно.


Динамические меню: чтобы кнопки не превратились в хаос

Чтобы меню не было захардкожено, у меня есть отдельные реестры в папке menu_registry/:

  • главное меню,

  • “Дополнительно”,

  • “Утилиты”,

  • “Настройки”.

Модуль может сам зарегистрировать пункт меню, и он появится в клавиатуре автоматически.
Плюс есть настройка видимости пунктов (через config.ini), чтобы можно было спрятать то, чем не пользуешься.


Плагины: можно расширять даже EXE без перекомпиляции

Это часть, которую я считаю особенно важной.

Плагины лежат в папке plugins/. Каждый плагин — отдельная папка с файлами и метаданными (например MyPlugin.json).
При старте бот может:

  • увидеть новый плагин;

  • подготовить для него окружение;

  • поставить зависимости;

  • подключить код плагина.

Главная идея: в EXE можно добавлять плагины без перекомпиляции.
То есть вы собрали программу один раз, а дальше просто докидываете папку плагина в plugins/, и функциональность расширяется.

При этом у каждого плагина может быть своё окружение и зависимости — чтобы не превращать установку в “поставь всё сразу глобально”.


GUI на PyQt5 и интерфейсные модули

У проекта есть GUI (PyQt5): он нужен для настроек, логов и некоторых сервисных вещей (в том числе для управления локальным Telegram Bot API сервером).

Отдельно мне нравится, что GUI‑окна тоже можно делать модульно: в gui_win/ лежат отдельные окна, и у меня есть механизм, который подхватывает их без ручного перечисления в одном месте.


Локальный Telegram Bot API и файлы до 2 ГБ

Проект может работать со стандартным Bot API, а может с локальным сервером telegram-bot-api.

Практическая разница для меня важная: при локальном Bot API в боте выставлен лимит на файлы до 2 ГБ, что удобно для больших архивов, логов или бэкапов.
Если подключаться к обычному “облачному” Bot API, ограничение ниже (в моём коде это сделано как 50 МБ для безопасности и предсказуемости).

Локальный режим у меня не “ручной ад”: в сборке нужные компоненты распаковываются автоматически (в том числе Python и папка с сервером).


Почему в интерфейсе много reply‑кнопок

Большинство ботов делают интерфейсы через inline‑кнопки под сообщениями. Это удобно, но когда у вас много текста в чате или вы работаете со скринридером, “найти нужное сообщение и в нём нужные кнопки” может быть менее комфортно.

Reply‑клавиатура живёт внизу и ведёт себя как постоянная панель управления. Для вещей вроде файлового менеджера это работает особенно хорошо: папки и файлы становятся кнопками, навигация предсказуемая.


Как попробовать

Если хочется просто протестировать:

  1. Скачайте релиз с GitHub (последняя версия — 1.1.7).

  2. Запустите программу, укажите токен бота и базовые настройки.

  3. По желанию включите локальный Telegram Bot API режим (если нужен большой лимит на файлы).

Дальше можно подключать модули и плагины под себя.


Планы

Я не считаю архитектуру “законченным памятником”. В ближайших планах:

  • дальше дорабатывать модульность (в идеале — единый “хост” для разных типов модулей);

  • улучшать навигацию по меню, когда модулей/плагинов становится много;

  • продолжать шлифовать стабильность и сценарии работы “для админа”.


Связь

Если есть идеи, баг‑репорты или просто хочется обсудить:
Telegram: @zotovsmol