Live Minecraft server status — updated every 10 seconds
What is this?
A lightweight Python Discord bot that pings your Minecraft server every 10 seconds and keeps a single embed message updated with live info. No dashboard, no web panel, no bloat. Open config.py, fill in your values, run it.
On restart it automatically picks up the same Discord message instead of spamming a new one every time — no more cluttered channels.
Features
- Live status embed — updates every 10 seconds, same message every time
- Player count with a visual progress bar and percentage
- Ping display with smoothing — spikes get filtered out automatically
- Server version (works with Velocity, Paper, Spigot, etc.)
- MOTD shown at the bottom of the embed, color codes stripped
- Online / Offline states with different colored embeds and clear messaging
- Auto-saves the message ID — survives restarts without creating new messages
- Same-machine hosting support — set a separate internal ping host (127.0.0.1) so the displayed ping is accurate when bot and server share a VPS
- Simple config — everything in one config.py file, no .env, no extra dependencies
What the embed shows
/
Online / Offline title
Players — count + visual bar (e.g. ▰▰▰▱▱▱▱▱▱▱ 30%)
Ping — smoothed value + quality label (Excellent / Good / Fair / High)
Version — auto-detected from the server handshake
Address — your public domain or IP
Online now — player list (if your server sends it)
MOTD — displayed at the bottom, § color codes removed
Requirements
- Python 3.10 or newer
- A Discord bot token (free — discord.com/developers)
- A Java Edition Minecraft server
Setup — 3 steps
1. Install dependencies
Code:
pip install -r requirements.txt
2. Open config.py and fill in your values
Code:
TOKEN = "your_bot_token_here"
CHANNEL_ID = 0 # right-click channel → Copy ID
MC_HOST = "mc.yourserver.net"
SERVER_NAME = "My Minecraft Server"
3. Run it
Code:
python bot.py
Same-machine hosting (optional)
If the bot runs on the same VPS as your Minecraft server, set MC_PING_HOST to "127.0.0.1" in config.py. This avoids public routing and gives you a stable, accurate ping. The embed still shows your public domain — it only changes what the bot pings internally.
File structure
Code:
statusbot/
├── bot.py ← Discord client and update loop
├── mc_status.py ← Minecraft server pinging + ping smoothing
├── embeds.py ← Embed builder (online/offline layouts)
├── config.py ← All settings, edit this
└── equirements.txt
[HR][/HR]
Running 24/7
[SPOILER=Linux — systemd service]
Create /etc/systemd/system/mcstatusbot.service:
[CODE][Unit]
Description=MC Status Bot
After=network.target
[Service]
WorkingDirectory=/path/to/statusbot
ExecStart=/usr/bin/python3 bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Code:
sudo systemctl enable mcstatusbot
sudo systemctl start mcstatusbot
Run python bot.py in a terminal, or add a Task Scheduler job pointing to your Python executable and bot.py to have it start automatically on boot.
Support
Check the console output first — the bot logs every update tick with the server state, player count, and ping. Errors (wrong token, wrong channel ID, unreachable server) are printed clearly with a description of what's wrong.
If you run into anything feel free to open a conversation here on Discord: iamneonn https://discord.gg/PEpDJ26eKu
