bedrock support

This commit is contained in:
2026-03-11 23:29:13 +00:00
parent cf3e2c8c78
commit 28be3105b6
7 changed files with 200 additions and 10 deletions
+4
View File
@@ -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)
+1
View File
@@ -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 |
+30
View File
@@ -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
View File
@@ -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
+123
View File
@@ -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
+4
View File
@@ -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
+20 -5
View File
@@ -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}")