Go to file
Mathew Sir Guest the best bb7325008b docs: replace stale argparse usage dump with Click command reference
The Usage section showed the old argparse `./smileyface.py -h` output
(underscored command names, 'optional arguments', a stray 'Invalid
command' line) from before the Click rewrite. Replace it with the
actual Click command list - server build/deploy commands and the
scrape subgroup - plus a note on env/.env configuration.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 00:19:30 -06:00
.gitea/workflows ci: run pytest via uv run so the matrix interpreter is honored 2026-05-31 00:04:34 -06:00
docs/superpowers/plans docs: add Python version support matrix implementation plan 2026-05-30 22:29:41 -06:00
smileyface compat: fall back to importlib_resources backport on Python 3.8 2026-05-30 22:37:08 -06:00
tests test: guard import smoke test against vacuous pass on empty walk 2026-05-30 23:36:52 -06:00
.env.example refactor: replace configobj spec with pydantic-settings and Click CLI 2026-05-30 19:43:38 -06:00
.flake8 build: poetry and some cleanup 2024-08-02 05:48:05 -06:00
.gitignore chore: ignore spurious uv.lock (project uses poetry.lock) 2026-05-30 22:42:37 -06:00
.pre-commit-config.yaml build: migrate to Poetry and Python 3.13 2026-05-30 19:43:32 -06:00
.python-version build: migrate to Poetry and Python 3.13 2026-05-30 19:43:32 -06:00
CLAUDE.md ci: run pytest via uv run so the matrix interpreter is honored 2026-05-31 00:04:34 -06:00
edit-config-windows.ps1 fixed config path for windows 2021-08-18 21:47:27 -06:00
edit-config.sh first py impl of redirect lines, misc improvements 2020-02-24 03:16:20 -07:00
LICENSE-MIT build: poetry and some cleanup 2024-08-02 05:48:05 -06:00
noxfile.py build: add nox matrix runner for the Python version smoke suite 2026-05-30 22:36:41 -06:00
poetry.lock build: lock in Python 3.8+ support (classifiers, black targets) 2026-05-30 22:48:26 -06:00
pyproject.toml build: lock in Python 3.8+ support (classifiers, black targets) 2026-05-30 22:48:26 -06:00
README.md docs: replace stale argparse usage dump with Click command reference 2026-05-31 00:19:30 -06:00
smileyface.py build: refactor black and isort 2024-08-02 05:51:33 -06:00

SmileyFace UT Server Tool

See official website, https://zavage-software.com/portfolio/smileyface for instructions.

Dependencies

Installation

Activate your desired python environment, then:

poetry install

Supported Python Versions

SmileyFace is tested against CPython 3.8 3.13. The supported range is enforced by a smoke-test matrix.

To run the matrix locally (requires uv):

uv python install 3.8 3.9 3.10 3.11 3.12 3.13
uv run --with nox nox -s tests

Usage

SmileyFace exposes a Click CLI. List all commands and options with:

python smileyface.py --help

Show help for a specific command:

python smileyface.py generate-instance --help

Server build & deploy commands:

oneclickdeploy          Generate instance, upload redirects, and upload server.
generate-instance       Build local server instance from current configuration.
upload-redirects        Upload paks to the redirect server.
upload-server           Upload game files to the hub server.
clean-instance          Delete the generated instance on the local machine.
create-directories      Create required directories for maps, mutators, and config.
download-linux-server   Download the latest Linux UT4 Server from Epic.
download-logs           Download the logs from the target hub.
start-server            Start the UT4 server.
stop-server             Stop the UT4 server.
restart-server          Restart the UT4 server.

Content-scraping commands (under the scrape subgroup):

scrape ut4pugs          Check ut4pugs.us for latest content.
scrape utcc             Check utcc.unrealpugs.com for latest content.
scrape create-db-table  Create database tables.
scrape load-md5s        Load MD5 checksums from local pak files.
scrape print-invalid    Print pak files that failed validation.

Configuration is read from SMILEYFACE_-prefixed environment variables or a .env file; see .env.example for the full list.

Contact