Files
discord-quest/main.py
Yorgei fee8ab1a0c init
2026-01-13 17:52:57 +10:00

93 lines
3.4 KiB
Python

import requests
import re
import os
import subprocess
import sys
# Configuration
URL = "https://gist.githubusercontent.com/aamiaa/204cd9d42013ded9faf646fae7f89fbb/raw"
OUTPUT_FILENAME = "discord-quest.js"
REPO_REMOTE = "origin" # Change if your remote is named differently
REPO_BRANCH = "main" # Change if your branch is named differently
def fetch_and_extract():
print(f"Fetching content from {URL}...")
try:
response = requests.get(URL)
response.raise_for_status()
content = response.text
except Exception as e:
print(f"Error downloading content: {e}")
sys.exit(1)
# Regex to find markdown code blocks (``` ... ```)
# This looks for blocks optionally specified as javascript/js
code_blocks = re.findall(r'```(?:javascript|js)?\s*(.*?)```', content, re.DOTALL)
if not code_blocks:
print("No code blocks found in the fetched text.")
sys.exit(1)
# Heuristic: Find the block that looks like the actual script.
# Based on the known content, the script usually contains 'webpackChunkdiscord_app'
# If we can't find that specific keyword, we default to the longest block.
target_code = None
for block in code_blocks:
if "webpackChunkdiscord_app" in block:
target_code = block
break
if not target_code:
print("Could not identify the specific Discord script block. Using the longest code block found.")
target_code = max(code_blocks, key=len)
return target_code.strip()
def has_changes(filename):
# Check if the file is modified in git
result = subprocess.run(["git", "status", "--porcelain", filename], capture_output=True, text=True)
return bool(result.stdout.strip())
def git_commit_and_push(filename):
try:
print("Changes detected. Committing...")
subprocess.run(["git", "add", filename], check=True)
subprocess.run(["git", "commit", "-m", "Update discord-quest.js from upstream gist"], check=True)
print("Pushing to Gitea...")
subprocess.run(["git", "push", REPO_REMOTE, REPO_BRANCH], check=True)
print("Successfully pushed changes.")
except subprocess.CalledProcessError as e:
print(f"Git operation failed: {e}")
sys.exit(1)
def main():
# 1. Extract new code
new_code = fetch_and_extract()
# 2. Read existing file to compare (avoids git modifying timestamp if identical)
if os.path.exists(OUTPUT_FILENAME):
with open(OUTPUT_FILENAME, 'r', encoding='utf-8') as f:
current_code = f.read().strip()
else:
current_code = None
# 3. Write file only if content is different
if new_code != current_code:
print(f"Updating {OUTPUT_FILENAME}...")
with open(OUTPUT_FILENAME, 'w', encoding='utf-8') as f:
f.write(new_code + '\n') # Add newline at end of file
else:
print("No changes in content detected. Exiting.")
sys.exit(0)
# 4. Check Git status and Push (skip in CI - workflow handles it)
if os.getenv("CI") or os.getenv("GITHUB_ACTIONS") or os.getenv("GITEA_ACTIONS"):
print("Running in CI environment. Skipping git operations - workflow will handle commit/push.")
elif has_changes(OUTPUT_FILENAME):
git_commit_and_push(OUTPUT_FILENAME)
else:
print("File updated but git status shows no changes (clean).")
if __name__ == "__main__":
main()