243 lines
6.6 KiB
Markdown
243 lines
6.6 KiB
Markdown
# Minecraft Update Bot 🎮
|
|
|
|
Automatically detects new Minecraft releases and posts them to a subreddit.
|
|
|
|
## Features
|
|
|
|
- ✅ Checks Minecraft launcher manifest for new releases
|
|
- ✅ Posts to Reddit whenever a new version is detected
|
|
- ✅ Tracks posted versions to avoid duplicates
|
|
- ✅ Runs continuously with configurable check interval
|
|
- ✅ Supports multiple release types (releases, snapshots, etc.)
|
|
- ✅ **Bedrock Edition support** - Detects Windows Bedrock releases
|
|
- ✅ Docker & Docker Compose ready
|
|
- ✅ **Customizable post templates via subreddit wiki**
|
|
- ✅ **Different post formats for different release types**
|
|
- ✅ **Auto-update notifications** - Gets alerted when new bot versions are available
|
|
|
|
## Quick Start - Docker (Recommended)
|
|
|
|
```bash
|
|
# Copy and edit environment file
|
|
copy .env.example .env
|
|
# Edit .env with your Reddit credentials
|
|
|
|
# Start the bot
|
|
docker-compose up -d
|
|
|
|
# View logs
|
|
docker-compose logs -f
|
|
```
|
|
|
|
See [DOCKER.md](DOCKER.md) for detailed Docker setup instructions.
|
|
|
|
## Customizing Posts with Wiki Configuration
|
|
|
|
The bot loads post templates from your subreddit's wiki page `minecraft_update_bot`. This allows you to:
|
|
- Create different post formats for releases vs. snapshots
|
|
- Customize titles and bodies without restarting
|
|
- Support legacy version types with custom messages
|
|
|
|
**Quick Setup:**
|
|
1. Create a wiki page named `minecraft_update_bot` on your subreddit
|
|
2. Add YAML configuration with your templates (see example below)
|
|
3. Bot auto-loads every 30 minutes
|
|
|
|
**Simple Example:**
|
|
```yaml
|
|
release:
|
|
title: "Minecraft {version} Released!"
|
|
body: |
|
|
# Minecraft {version}
|
|
Available now! Get it at [minecraft.net](https://minecraft.net)
|
|
**Released:** {release_date}
|
|
|
|
snapshot:
|
|
title: "Minecraft {version} Snapshot"
|
|
body: |
|
|
# New Snapshot Available
|
|
Test {version} before the official release!
|
|
```
|
|
|
|
👉 See [WIKI_CONFIG.md](WIKI_CONFIG.md) for complete setup and examples.
|
|
|
|
## Bedrock Edition Support
|
|
|
|
The bot can track **Minecraft Bedrock Edition (Windows)** releases in addition to Java Edition.
|
|
|
|
**To enable Bedrock tracking:**
|
|
|
|
1. **With Docker:** Add to your `.env` file:
|
|
```
|
|
CHECK_BEDROCK=true
|
|
```
|
|
|
|
2. **Manual:** Set environment variable before running:
|
|
```bash
|
|
set CHECK_BEDROCK=true
|
|
python main.py
|
|
```
|
|
|
|
3. **Configure Bedrock posts** in your wiki page (optional):
|
|
```yaml
|
|
bedrock-windows:
|
|
title: "Minecraft Bedrock {version} Available (Windows)"
|
|
body: |
|
|
# Bedrock Edition {version}
|
|
Download from the Microsoft Store
|
|
**Released:** {release_date}
|
|
```
|
|
|
|
The bot will now check for both Java and Bedrock releases every cycle, posting about each separately.
|
|
|
|
## Manual Setup
|
|
|
|
### 1. Install Dependencies
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 2. Create Reddit Application
|
|
|
|
1. Go to [https://www.reddit.com/prefs/apps](https://www.reddit.com/prefs/apps)
|
|
2. Click "Create an app" or "Create another app"
|
|
3. Fill in the form:
|
|
- **Name:** MinecraftUpdateBot
|
|
- **App type:** Script
|
|
- **Redirect URI:** http://localhost:8080
|
|
4. Copy the credentials
|
|
|
|
### 3. Configure the Bot
|
|
|
|
Edit `config.py` and fill in your credentials:
|
|
|
|
```python
|
|
REDDIT_CLIENT_ID = "YOUR_CLIENT_ID" # From app page
|
|
REDDIT_CLIENT_SECRET = "YOUR_CLIENT_SECRET" # From app page
|
|
REDDIT_USERNAME = "YOUR_USERNAME" # Your Reddit username
|
|
REDDIT_PASSWORD = "YOUR_PASSWORD" # Your Reddit password
|
|
SUBREDDIT = "YOUR_SUBREDDIT" # Subreddit to post to
|
|
```
|
|
|
|
Or use environment variables (Docker-friendly):
|
|
|
|
```bash
|
|
set REDDIT_CLIENT_ID=your_client_id
|
|
set REDDIT_CLIENT_SECRET=your_client_secret
|
|
set REDDIT_USERNAME=your_username
|
|
set REDDIT_PASSWORD=your_password
|
|
set SUBREDDIT=your_subreddit
|
|
python main.py
|
|
```
|
|
|
|
### 4. Customize (Optional)
|
|
|
|
In `config.py`:
|
|
- **RELEASE_TYPES:** Change `["release"]` to include snapshots or other types
|
|
- Options: `"release"`, `"snapshot"`, `"old_beta"`, `"old_alpha"`
|
|
- **CHECK_INTERVAL:** How often to check for updates (in seconds)
|
|
- Default: 3600 (1 hour)
|
|
- **POST_TEMPLATE:** Customize the post format
|
|
|
|
Examples:
|
|
```python
|
|
# Check for both releases and snapshots
|
|
RELEASE_TYPES = ["release", "snapshot"]
|
|
|
|
# Check every 30 minutes
|
|
CHECK_INTERVAL = 1800
|
|
|
|
# Check every 10 minutes (for testing)
|
|
CHECK_INTERVAL = 600
|
|
```
|
|
|
|
### 5. Run the Bot
|
|
|
|
```bash
|
|
python main.py
|
|
```
|
|
|
|
You should see output like:
|
|
```
|
|
[BOT] Starting Minecraft Update Bot...
|
|
[BOT] ✓ Successfully connected to Reddit
|
|
[BOT] Started update checker (checking every 3600 seconds)
|
|
[BOT] ✓ Bot is running
|
|
```
|
|
|
|
## Automatic Update Notifications
|
|
|
|
The bot includes an update checker that periodically polls for new versions and notifies your subreddit's modteam via modmail when updates are available.
|
|
|
|
**How it works:**
|
|
- Checks `https://updts.slfhstd.uk` every hour for new versions
|
|
- Sends modmail to your subreddit's modteam if an update is found
|
|
- Limits notifications to once per 24 hours to avoid spam
|
|
- No configuration needed - it runs automatically!
|
|
|
|
**What you'll see:**
|
|
```
|
|
[UPDATE_CHECKER] Started for MinecraftUpdateBot v1.0
|
|
[UPDATE_CHECKER] Update found: 1.0 -> 1.1
|
|
[UPDATE_CHECKER] Sent update notification to r/your_subreddit
|
|
```
|
|
|
|
The modteam will receive a message with the new version number and changelog link.
|
|
|
|
## How It Works
|
|
|
|
1. **Initialization:** Bot connects to Reddit and loads posted versions from `DB/posted_versions.json`
|
|
2. **Check Loop:** Every CHECK_INTERVAL seconds, it:
|
|
- Fetches the latest Minecraft versions from Mojang's launcher manifest
|
|
- Checks if any are new (not in `DB/posted_versions.json`)
|
|
- Posts to subreddit if new versions found
|
|
- Saves the posted version IDs
|
|
3. **Background:** Runs in background thread, checking continuously
|
|
|
|
## Database
|
|
|
|
Posted versions are stored in `DB/posted_versions.json`:
|
|
|
|
```json
|
|
{
|
|
"posted": [
|
|
"1.20.1",
|
|
"1.21",
|
|
"1.21.1"
|
|
]
|
|
}
|
|
```
|
|
|
|
To reset (post all new versions again), delete or clear this file.
|
|
|
|
## Troubleshooting
|
|
|
|
### Connection Issues
|
|
- Check your credentials in `config.py` or environment variables
|
|
- Verify your Reddit app is configured correctly
|
|
- Make sure your Reddit account can post to the subreddit
|
|
|
|
### "No New Releases"
|
|
- The bot only posts once per version
|
|
- Check `DB/posted_versions.json` to see what's been posted
|
|
- Delete a version from the file to repost it
|
|
|
|
### Test with Snapshots
|
|
Change `RELEASE_TYPES = ["snapshot"]` and `CHECK_INTERVAL = 60` to test quickly.
|
|
|
|
## Files
|
|
|
|
- `main.py` - Main bot script
|
|
- `config.py` - Configuration
|
|
- `minecraft_checker.py` - Fetches version data from Mojang
|
|
- `test_setup.py` - Validates your setup
|
|
- `Dockerfile` - Docker image definition
|
|
- `docker-compose.yml` - Docker Compose configuration
|
|
- `DB/` - Database folder (created automatically)
|
|
- `requirements.txt` - Python dependencies
|
|
|
|
## License
|
|
|
|
MIT
|