Skip to content
This repository was archived by the owner on Feb 16, 2026. It is now read-only.

PashaHatsune/MSWT

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MSWT — Telegram-бот для управления вашими сервисами.

⚠️ | Установите pyenv, перед использованием MSWT.

Эта версия переписана с использованием: uv, aiogram и .env для удобства конфигурации.


📦 Рекомендованная версия Python

3.10.16


🚀 Установка и настройка

1. Установите uv

pip install uv

2. Создайте виртуальное окружение

uv venv

3. Активируйте виртуальное окружение

source .venv/bin/activate

⚙ Конфигурация

Перед запуском заполните файл .env Пример настроек можно найти в .env-example.


▶ Запуск бота

uv run -m src.bot

🤖 Команды бота

  • /start или /help — показать краткое меню.
  • /info — сводка по CPU/RAM/ROM/OS и версии бота.
  • /sh <команда или путь> — выполнить команду; если указан путь к файлу, бот отправит файл. Работает и как reply на сообщение с командой. Таймаут выполнения — 60 секунд.
  • /bots — запустить все скрипты из ./sh-module, имя которых оканчивается на -start.sh (автостарт).
  • /startsh <file.sh> — запустить скрипт из ./sh-module с логированием в ./sh-module/logs/*.log. Без аргумента покажет список .sh.
  • /stopsh <file.sh> — остановить процесс скрипта и отключить его авто-рестарт.
  • /logs <file.sh> — получить лог выбранного скрипта или список доступных логов/скриптов.
  • /restart — выполнить restart-daemon.sh (перезапуск systemd-юнитов).
  • /stop — перезагрузить сервер через sudo reboot (осторожно!).

Задачи (TASK's)

В боте есть механизм для запуска тасков — фоновых задач, которые выполняет бот. Например, можно делать регулярные бэкапы базы данных и отправлять их вам в Телеграм.

Как добавить свою задачу [пример]

  1. Создайте файл с задачей в папке src/bot/handlers/tasks. Например: BackupBD.py.

  2. В этом файле создайте асинхронную функцию с именем start_task, которая принимает один аргумент — объект бота bot типа Bot из aiogram.

from aiogram import Bot
import asyncio

async def start_task(bot: Bot) -> None:
    while True:
        try:
            # Здесь логика вашей задачи, например бэкап базы
            await run_mongodump(...)
        except Exception as e:
            # Обработка ошибок
            print(f"Ошибка в задаче: {e}")
        await asyncio.sleep(10000)  # пауза перед следующим запуском
  1. При старте бота автоматически найдутся все такие задачи и будут запущены параллельно.

Сервисы

После первого запуска бота в корне проекта автоматически создаётся папка sh-module. В эту папку нужно помещать ваши .sh-скрипты (юниты).

Важно: Имя файла должно заканчиваться на -start.sh, например: МоёНазвание-start.sh. Если в названии отсутствует суффикс -start.sh, бот не сможет обнаружить и запустить ваш юнит.

Запуски через /startsh автоматически логируются в ./sh-module/logs и отслеживаются вотчдогом: при падении скрипт будет перезапущен (ограниченное число попыток). Остановить процесс и снять его с авто-рестарта можно через /stopsh.


Пример простого юнита — hello-start.sh:

#!/bin/bash
echo 'Привет, мир!'

Пример для запуска telegram-бота:

#!/bin/bash
cd /home/miku/dev/MSWT
source .venv/bin/activate
uv run bot.py

🛠 Автоматический запуск с systemd

Для того, чтобы бот запускался автоматически при старте системы, создайте systemd unit-файл.

Пример mswt.service (в пространстве пользователя):

[Service]
ExecStart=/ПУТЬ_К_MSWT/start-server.sh
RestartSec=10
Restart=always
Type=simple

[Install]
WantedBy=default.target

Важные шаги:

  1. Дайте права на выполнение скриптам:
chmod +x /ПУТЬ_К_MSWT/restart-daemon.sh
chmod +x /ПУТЬ_К_MSWT/start-server.sh
  1. Скопируйте unit-файл в systemd:
sudo cp mswt.service /home/user/.config/systemd/user/
  1. Перезагрузите конфигурацию systemd:
sudo systemctl --user daemon-reload
  1. Включите и сразу запустите сервис:
sudo systemctl --user enable mswt.service --now

Как пользоваться /sh

  • Формат: /sh <команда> или реплай на сообщение с командой.
  • Если нужен вывод sudo, передавайте пароль через stdin:
echo "my_password" | sudo -S pacman -Syu
  • Если команда пишет слишком много, бот отправит вывод отдельным файлом.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 99.4%
  • Shell 0.6%