Files
monitor-bot/README.md
2025-12-14 22:49:48 +02:00

81 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Telegram Minecraft Monitor Bot
Бот на `aiogram`, що регулярно перевіряє статус Minecraft сервера і:
- Надсилає сповіщення в Telegram чат (онлайн/офлайн).
- Записує актуальний стан у `status.json`, щоб дані можна було підхопити на сайт.
## Швидкий старт
1) Встановіть залежності:
```bash
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```
2) Заповніть `.env` (див. приклад у `.env.example`):
```
TELEGRAM_BOT_TOKEN=ваш_токен
TELEGRAM_CHAT_ID=chat_id_куди_слати_сповіщення
MINECRAFT_HOST=example.org
MINECRAFT_PORT=25565
POLL_INTERVAL_SECONDS=30
STATUS_FILE_PATH=data/status.json
```
3) Запустіть бота:
```bash
python main.py
```
## Запуск у Docker
1) Зібрати образ:
```bash
docker build -t monitor-bot .
```
2) Запустити, передавши змінні оточення:
```bash
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`:
```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`.