3.5 KiB
3.5 KiB
Telegram Minecraft Monitor Bot
Бот на aiogram который регулярно проверяет статус Minecraft сервера и:
- Отправляет уведомления в Telegram чат (онлайн/офлайн, изменения игроков).
- Записывает актуальное состояние в
status.json, чтобы данные можно было забирать на сайт.
Быстрый старт
- Установите зависимости:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
- Заполните
.env(смотрите пример в.env.example):
TELEGRAM_BOT_TOKEN=ваш_токен
TELEGRAM_CHAT_ID=чат_id_куда_слать_уведомления
MINECRAFT_HOST=example.org
MINECRAFT_PORT=25565
POLL_INTERVAL_SECONDS=30
STATUS_FILE_PATH=data/status.json
- Запустите бота:
python main.py
Запуск в Docker
- Собрать образ:
docker build -t monitor-bot .
- Запустить, передав переменные окружения:
docker run -d \
--name monitor-bot \
-e TELEGRAM_BOT_TOKEN=... \
-e TELEGRAM_CHAT_ID=... \
-e MINECRAFT_HOST=example.org \
-e MINECRAFT_PORT=25565 \
-e POLL_INTERVAL_SECONDS=30 \
-e STATUS_FILE_PATH=/data/status.json \
-v "$(pwd)/data:/data" \
monitor-bot
STATUS_FILE_PATH лучше указывать в смонтированную директорию (/data), чтобы JSON был доступен снаружи.
Что делает бот
- Каждые
POLL_INTERVAL_SECONDSсекунд опрашивает сервер Minecraft. - Пишет результат в JSON файл
STATUS_FILE_PATH, напримерdata/status.json:
{
"source": "monitor-bot",
"status": {
"online": true,
"motd": "Привет!",
"version": "1.20.4",
"latency_ms": 62.5,
"players_online": 3,
"players_max": 20,
"player_names": ["Steve", "Alex"],
"last_updated": "2024-01-01T12:00:00.000000+00:00"
}
}
- Следит за изменениями и шлет уведомления в чат: сервер упал/поднялся, кто зашел/вышел, текущее число игроков.
- Команда
/statusв чате выводит актуальную информацию (берется из файла, при его отсутствии запрашивается напрямую).
Использование данных на сайте
- Забирайте файл
STATUS_FILE_PATHлюбым удобным способом (например, отдавайте его веб-сервером или читайте напрямую из файловой системы) — структура стабильная. - Поле
last_updatedв формате ISO 8601 поможет показывать время обновления.
Настройки
- Все параметры задаются через переменные окружения (см.
.env.example). POLL_INTERVAL_SECONDS— частота опроса.STATUS_FILE_PATH— куда писать JSON. Скрипт сам создаст директорию, если ее нет.
Проверка
- Запустите бота и в Telegram отправьте
/start, затем/statusчтобы увидеть текущие данные. - В каталоге
STATUS_FILE_PATHдолжен появиться актуальныйstatus.json.