Этот проект я изначально писал для себя и под свои рабочие привычки: хотелось иметь быстрый “пульт” к компьютеру/серверу из 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.
Внутри проект делится на три слоя расширения:
Модули бота (
moduls/)Плагины (
plugins/) — можно добавлять даже в EXE, без перекомпиляции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‑клавиатура живёт внизу и ведёт себя как постоянная панель управления. Для вещей вроде файлового менеджера это работает особенно хорошо: папки и файлы становятся кнопками, навигация предсказуемая.
Как попробовать
Если хочется просто протестировать:
Скачайте релиз с GitHub (последняя версия — 1.1.7).
Запустите программу, укажите токен бота и базовые настройки.
По желанию включите локальный Telegram Bot API режим (если нужен большой лимит на файлы).
Дальше можно подключать модули и плагины под себя.
Планы
Я не считаю архитектуру “законченным памятником”. В ближайших планах:
дальше дорабатывать модульность (в идеале — единый “хост” для разных типов модулей);
улучшать навигацию по меню, когда модулей/плагинов становится много;
продолжать шлифовать стабильность и сценарии работы “для админа”.
Связь
Если есть идеи, баг‑репорты или просто хочется обсудить:
Telegram: @zotovsmol
