Пошаговая инструкция по созданию Telegram‑бота для мониторинга сервера.
Шаг 1. Создание бота в Telegram
- Найдите в Telegram @BotFather и начните диалог.
- Отправьте команду /newbot.
- Укажите имя бота (например, Server Monitor Bot).
- Выберите username (должен заканчиваться на bot, например, my_server_monitor_bot).
- Сохраните API‑токен, который выдаст BotFather.
Шаг 2. Установка зависимостей
bash
pip install python-telegram-bot psutil
- python-telegram-bot — библиотека для работы с Telegram API.
- psutil — библиотека для сбора информации о системе.
Шаг 3. Структура проекта
server_monitor/
├── config.py
├── utils.py
└── bot.py
Шаг 4. Код бота
1. config.py — хранение токена:
python
BOT_TOKEN = "ваш_токен_от_BotFather"
2. utils.py — функции сбора данных:
python
import psutil
import subprocess
def get_cpu_load():
"""Возвращает загрузку CPU в процентах."""
return psutil.cpu_percent(interval=1)
def get_ram_usage():
"""Возвращает использование RAM в процентах и в ГБ."""
ram = psutil.virtual_memory()
used_gb = ram.used / (1024 ** 3)
total_gb = ram.total / (1024 ** 3)
percent = ram.percent
return f"{used_gb:.2f} GB / {total_gb:.2f} GB ({percent}%)"
def get_player_count():
"""
Возвращает количество игроков онлайн.
Замените команду на актуальную для вашего сервера.
Пример для TFS: grep "Player logged in" logs/server.log | wc -l
"""
try:
# Пример для игрового сервера с логами
result = subprocess.run(
["grep", "Player logged in", "/path/to/server/logs/server.log"],
capture_output=True, text=True
)
players = result.stdout.count("Player logged in")
return players
except Exception:
return "Не удалось определить"
3. bot.py — основной код бота:
python
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
from config import BOT_TOKEN
from utils import get_cpu_load, get_ram_usage, get_player_count
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
"🤖 Бот мониторинга сервера запущен!\n"
"Используйте команды:\n"
"/status — текущее состояние сервера\n"
"/players — количество игроков онлайн"
)
async def status(update: Update, context: ContextTypes.DEFAULT_TYPE):
cpu = get_cpu_load()
ram = get_ram_usage()
players = get_player_count()
message = (
f"🖥 **Состояние сервера**\n\n"
f"📊 **CPU**: {cpu}%\n"
f"🧠 **RAM**: {ram}\n"
f"👨👦👦 **Игроки онлайн**: {players}"
)
await update.message.reply_text(message, parse_mode='Markdown')
async def players(update: Update, context: ContextTypes.DEFAULT_TYPE):
players = get_player_count()
await update.message.reply_text(f"👨👦👦 Игроки онлайн: {players}")
def main():
app = Application.builder().token(BOT_TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("status", status))
app.add_handler(CommandHandler("players", players))
print("Бот запущен...")
app.run_polling()
if __name__ == "__main__":
main()
Шаг 5. Настройка запуска бота
Вариант 1. Ручной запуск
- Запустите скрипт:
bash
python bot.py
- Бот будет работать, пока активен терминал.
Вариант 2. Запуск как службы (systemd)
- Создайте файл службы:
bash
sudo nano /etc/systemd/system/server-monitor.service
- Вставьте содержимое:
ini
[Unit]
Description=Telegram Server Monitor Bot
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/path/to/your/bot
ExecStart=/usr/bin/python3 bot.py
Restart=always
[Install]
WantedBy=multi-user.target
- Активируйте и запустите:
bash
sudo systemctl daemon-reload
sudo systemctl enable server-monitor.service
sudo systemctl start server-monitor.service
- Проверьте статус:
bash
sudo systemctl status server-monitor.service
Шаг 6. Тестирование бота
- Найдите бота в Telegram по username.
- Отправьте /start.
- Протестируйте команды:
/status — покажет CPU, RAM и игроков;
/players — только количество игроков.
Дополнительные функции
1. Автоматические уведомления
Добавьте в bot.py перед main():
python
async def send_alert(context: ContextTypes.DEFAULT_TYPE, message: str):
chat_id = "ваш_chat_id" # ID чата для уведомлений
await context.bot.send_message(chat_id=chat_id, text=message)
# Пример проверки нагрузки CPU
async def check_cpu_alert(context: ContextTypes.DEFAULT_TYPE):
cpu = get_cpu_load()
if cpu > 90: # Порог 90 %
await send_alert(context, f"🚨 Высокая загрузка CPU: {cpu}%")
2. Интеграция с игровым сервером
Для TFS или другого игрового сервера:
- настройте логирование входов/выходов игроков;
- измените get_player_count() для чтения логов или API сервера.
3. Графики нагрузки
Используйте библиотеки matplotlib или plotly для генерации графиков CPU/RAM за период.
4. Расписание отчётов
Настройте отправку ежедневного отчёта в определённое время:
python
from datetime import time
def setup_daily_report(app):
app.job_queue.run_daily(
callback=send_daily_report,
time=time(hour=9, minute=0, tzinfo=pytz.timezone('Europe/Moscow'))
)
Чек‑лист настройки
- [ ] Создан бот через BotFather, сохранён токен.
- [ ] Установлены python-telegram-bot и psutil.
- [ ] Написаны функции сбора данных (utils.py).
- [ ] Реализованы команды /start, /status, /players.
- [ ] Бот протестирован вручную.
- [ ] Настроена служба systemd (для круглосуточной работы).
- [ ] Протестированы уведомления (если добавлены).
- [ ] Проверен доступ к логам игрового сервера.
- [ ] Добавлены пороги алертов (опционально).
- [ ] Настроено расписание отчётов (опционально).
Заключение
Готовый бот:
- отслеживает CPU и RAM в реальном времени;
- показывает количество игроков онлайн;
- работает круглосуточно как служба;
- легко расширяется (алерт‑система, графики, расписание);
- интегрируется с игровыми серверами через логи или API.