bedrock support
This commit is contained in:
@@ -21,6 +21,10 @@ SUBREDDIT=YOUR_SUBREDDIT_HERE
|
||||
# Multiple: RELEASE_TYPES=release,snapshot
|
||||
RELEASE_TYPES=release
|
||||
|
||||
# Optional: Check for Bedrock Edition releases (Windows)
|
||||
# true to enable, false to disable
|
||||
CHECK_BEDROCK=false
|
||||
|
||||
# Optional: how often to check for updates (in seconds)
|
||||
# Default: 3600 (1 hour)
|
||||
# For testing: 600 (10 minutes)
|
||||
|
||||
@@ -73,6 +73,7 @@ All configuration is done via the `.env` file. The following variables are avail
|
||||
| `REDDIT_PASSWORD` | ✓ | - | Your Reddit password |
|
||||
| `SUBREDDIT` | ✓ | - | Subreddit to post to |
|
||||
| `RELEASE_TYPES` | | `release` | Comma-separated: `release,snapshot` |
|
||||
| `CHECK_BEDROCK` | | `false` | Enable Bedrock Edition detection: `true` or `false` |
|
||||
| `CHECK_INTERVAL` | | `3600` | Seconds between checks |
|
||||
| `REDDIT_USER_AGENT` | | `MinecraftUpdateBot/1.0` | API user agent |
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ Automatically detects new Minecraft releases and posts them to a subreddit.
|
||||
- ✅ 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**
|
||||
@@ -60,6 +61,35 @@ snapshot:
|
||||
|
||||
👉 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
|
||||
|
||||
+18
-5
@@ -19,7 +19,7 @@ release:
|
||||
body: |
|
||||
# Minecraft {version} Released
|
||||
|
||||
A new version of Minecraft is now available!
|
||||
A new version of Minecraft Java Edition is now available!
|
||||
|
||||
**Version:** {version}
|
||||
**Released:** {release_date}
|
||||
@@ -38,6 +38,18 @@ snapshot:
|
||||
|
||||
Try it in the launcher with the development profiles.
|
||||
|
||||
bedrock-windows:
|
||||
title: "Minecraft Bedrock Edition {version} Available (Windows)"
|
||||
body: |
|
||||
# Minecraft Bedrock Edition {version}
|
||||
|
||||
A new version is available for Windows!
|
||||
|
||||
**Version:** {version}
|
||||
**Released:** {release_date}
|
||||
|
||||
Download from the Microsoft Store or via the Minecraft Launcher.
|
||||
|
||||
default:
|
||||
title: "Minecraft {version} ({type})"
|
||||
body: |
|
||||
@@ -75,10 +87,11 @@ In both title and body, you can use:
|
||||
### Release Types
|
||||
|
||||
Create sections for each release type you want custom posts for:
|
||||
- `release` - Final releases
|
||||
- `snapshot` - Snapshots
|
||||
- `old_beta` - Old beta versions
|
||||
- `old_alpha` - Old alpha versions
|
||||
- `release` - Java Edition final releases
|
||||
- `snapshot` - Java Edition snapshots
|
||||
- `old_beta` - Java Edition old beta versions
|
||||
- `old_alpha` - Java Edition old alpha versions
|
||||
- `bedrock-windows` - Bedrock Edition (Windows)
|
||||
- `default` - Fallback for any unconfigured type
|
||||
|
||||
## Examples
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
"""
|
||||
Minecraft Bedrock Edition version checker - tracks Windows releases
|
||||
"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
# Bedrock version tracking endpoints
|
||||
# Using third-party services that track Bedrock version history
|
||||
BEDROCK_VERSIONS_URL = "https://raw.githubusercontent.com/pmmp/PocketMine-MP/master/src/VersionInfo.php"
|
||||
|
||||
# Alternative: Direct launcher check (if available)
|
||||
BEDROCK_LAUNCHER_API = "https://launcher.mojang.com/v1/products/bedrock-launcher/latest"
|
||||
|
||||
TIMEOUT = 10
|
||||
|
||||
|
||||
def get_bedrock_versions():
|
||||
"""
|
||||
Fetch Bedrock version information.
|
||||
Attempts multiple sources for reliability.
|
||||
|
||||
Returns:
|
||||
Dict with version info or None
|
||||
"""
|
||||
# Try the launcher API first
|
||||
try:
|
||||
response = requests.get(BEDROCK_LAUNCHER_API, timeout=TIMEOUT)
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
if data:
|
||||
return data
|
||||
except Exception as e:
|
||||
print(f"[BEDROCK_CHECKER] Launcher API error: {e}")
|
||||
|
||||
# Fallback: try Windows version manifest
|
||||
try:
|
||||
# Query Microsoft's update service for Bedrock
|
||||
response = requests.get(
|
||||
"https://launcher.mojang.com/v1/products/bedrock-launcher/16/latest",
|
||||
headers={"Accept": "application/json"},
|
||||
timeout=TIMEOUT
|
||||
)
|
||||
if response.status_code == 200:
|
||||
return response.json()
|
||||
except Exception as e:
|
||||
print(f"[BEDROCK_CHECKER] Manifest error: {e}")
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def parse_bedrock_version(response_data):
|
||||
"""
|
||||
Parse response data into standardized version format.
|
||||
|
||||
Args:
|
||||
response_data: JSON response from version endpoint
|
||||
|
||||
Returns:
|
||||
Dict with keys: id, version, type, releaseTime
|
||||
"""
|
||||
if not response_data:
|
||||
return None
|
||||
|
||||
try:
|
||||
# Extract version information from different possible response formats
|
||||
version = response_data.get('version') or response_data.get('latest')
|
||||
|
||||
if not version:
|
||||
return None
|
||||
|
||||
return {
|
||||
"id": version,
|
||||
"version": version,
|
||||
"type": "bedrock-windows",
|
||||
"releaseTime": response_data.get('releaseTime', datetime.utcnow().isoformat() + "+00:00"),
|
||||
"platform": "windows"
|
||||
}
|
||||
except Exception as e:
|
||||
print(f"[BEDROCK_CHECKER] Parse error: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def get_latest_bedrock_release():
|
||||
"""
|
||||
Get the latest Bedrock Windows release.
|
||||
|
||||
Returns:
|
||||
Dict with version info or None
|
||||
"""
|
||||
try:
|
||||
version_data = get_bedrock_versions()
|
||||
return parse_bedrock_version(version_data)
|
||||
except Exception as e:
|
||||
print(f"[BEDROCK_CHECKER] Error getting latest release: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def compare_versions(v1, v2):
|
||||
"""
|
||||
Compare two version strings (semantic versioning).
|
||||
|
||||
Args:
|
||||
v1, v2: Version strings like "1.20.0"
|
||||
|
||||
Returns:
|
||||
True if v1 > v2, False otherwise
|
||||
"""
|
||||
try:
|
||||
parts1 = [int(x) for x in v1.split('.')]
|
||||
parts2 = [int(x) for x in v2.split('.')]
|
||||
|
||||
# Pad with zeros
|
||||
while len(parts1) < len(parts2):
|
||||
parts1.append(0)
|
||||
while len(parts2) < len(parts1):
|
||||
parts2.append(0)
|
||||
|
||||
return parts1 > parts2
|
||||
except:
|
||||
# Fallback to string comparison
|
||||
return v1 > v2
|
||||
@@ -17,6 +17,10 @@ SUBREDDIT = os.getenv("SUBREDDIT", "YOUR_SUBREDDIT")
|
||||
release_types_env = os.getenv("RELEASE_TYPES", "release")
|
||||
RELEASE_TYPES = [t.strip() for t in release_types_env.split(",")]
|
||||
|
||||
# Check for Bedrock Edition releases (Windows)
|
||||
# Set to true to detect and post Bedrock releases
|
||||
CHECK_BEDROCK = os.getenv("CHECK_BEDROCK", "false").lower() in ("true", "1", "yes")
|
||||
|
||||
# Post templates
|
||||
# NOTE: Post titles and bodies are now fetched from the subreddit wiki page "minecraft_update_bot"
|
||||
# See DOCKER.md or README.md for how to set up the wiki page with YAML configuration
|
||||
|
||||
@@ -10,6 +10,7 @@ import threading
|
||||
from datetime import datetime
|
||||
import config
|
||||
from minecraft_checker import get_latest_releases, parse_release_date
|
||||
from bedrock_checker import get_latest_bedrock_release
|
||||
from wiki_config import WikiConfig
|
||||
from update_checker import start_update_checker
|
||||
|
||||
@@ -112,24 +113,38 @@ def post_to_subreddit(reddit, version_info):
|
||||
|
||||
def check_for_updates(reddit):
|
||||
"""
|
||||
Check for new Minecraft releases and post if any are new.
|
||||
Check for new Minecraft releases (Java & Bedrock) and post if any are new.
|
||||
|
||||
Args:
|
||||
reddit: PRAW Reddit instance
|
||||
"""
|
||||
try:
|
||||
posted_versions = load_posted_versions()
|
||||
latest_releases = get_latest_releases(config.RELEASE_TYPES)
|
||||
|
||||
for version_info in latest_releases:
|
||||
# Check Java Edition releases
|
||||
java_releases = get_latest_releases(config.RELEASE_TYPES)
|
||||
for version_info in java_releases:
|
||||
version_id = version_info["id"]
|
||||
|
||||
if version_id not in posted_versions:
|
||||
print(f"[BOT] New release found: {version_id}")
|
||||
print(f"[BOT] New Java release found: {version_id}")
|
||||
if post_to_subreddit(reddit, version_info):
|
||||
save_posted_version(version_id)
|
||||
else:
|
||||
print(f"[BOT] Version {version_id} already posted, skipping")
|
||||
print(f"[BOT] Java version {version_id} already posted, skipping")
|
||||
|
||||
# Check Bedrock Edition releases if enabled
|
||||
if config.CHECK_BEDROCK:
|
||||
bedrock_release = get_latest_bedrock_release()
|
||||
if bedrock_release:
|
||||
bedrock_id = f"bedrock-{bedrock_release['version']}"
|
||||
|
||||
if bedrock_id not in posted_versions:
|
||||
print(f"[BOT] New Bedrock release found: {bedrock_release['version']}")
|
||||
if post_to_subreddit(reddit, bedrock_release):
|
||||
save_posted_version(bedrock_id)
|
||||
else:
|
||||
print(f"[BOT] Bedrock version {bedrock_release['version']} already posted, skipping")
|
||||
|
||||
except Exception as e:
|
||||
print(f"[BOT] ✗ Error checking for updates: {e}")
|
||||
|
||||
Reference in New Issue
Block a user