{% extends 'base.html' %} {% block title %}SYSOP Settings{% endblock %} {% block content %}

Station identity: {{ g.station.name }} - [{{ g.station.callsign }}]

LANDING PAGE MESSAGE
ASCII BANNER
FILE ARCHIVE POLICY

MANAGE STATION ANNOUNCEMENTS

MANAGE GAMES AND APPS

These controls save independently so an error in another station setting cannot prevent an access change.

Registration mode
SINGLE-USE INVITATIONS

Generate an unpredictable invitation code and link. The complete secret is shown only once; this list keeps only a non-secret identifier and redemption status.

{% for invite in invitations %}
INV-{{ '%04d'|format(invite.id) }} / …{{ invite.code_hint }}CREATED {{ invite.created_at }}{% if invite.creator_callsign %} BY {{ invite.creator_username }} - [{{ invite.creator_callsign }}]{% endif %}
{% if invite.used_at %}USED{% if invite.used_callsign %} / {{ invite.used_username }} - [{{ invite.used_callsign }}]{% endif %} {% elif invite.revoked_at %}REVOKED {% else %} ACTIVE
{% endif %}
{% else %}

No invitations have been generated.

{% endfor %}

Profile posts, comments, and reactions are hidden and blocked while disabled. Existing content is kept.

Videos stay in station data when this module is disabled. Community allows member uploads and comments. Curated allows station uploads only and hides authors and comments.

{% if g.station.videos_enabled %}

Member video libraries use the station default unless a user has an override. Station videos do not count toward a member quota.

{% for user in users %}
{% endfor %}

Upload a station video

These videos show the station name as author and never allow comments.

{% endif %}

One station-wide board. Disabling it hides the service and preserves all threads and images in station data.

Place .zim files in {{ config.KIWIX_DATA_DIR }}. This folder is separate from station data. The WIKI reader is included with StationNet.

Enable either experience independently. Disabling a mode preserves its world, characters, and history and safely relocates affected players.

The station rotates at midnight in the configured timezone. Changes apply to future rotations; an already generated day remains immutable.

CURRENT: {{ current_daily.day_key }} / {{ current_daily.status|upper }}{% if current_daily.theme_id %} / {{ current_daily.theme_id }}@{{ current_daily.theme_version }}{% endif %}

{% if current_daily.error_message %}

{{ current_daily.error_message }}

{% endif %}
Eligible themes {% for theme in mud_daily_themes %}{% else %}

No valid themes are installed.

{% endfor %}
{% if current_daily.status == 'failed' %}
{% endif %}
Generation diagnostics

Daily failures

{% for failure in daily_failures %}

{{ failure.day_key }} — {{ failure.error_message }} {{ failure.generated_at }}

{% else %}

No daily rotation failures recorded.

{% endfor %}

Generator failures

{% for failure in generation_failures %}

{{ failure.theme_id or 'unknown' }}@{{ failure.theme_version or '?' }} — {{ failure.message }} {{ failure.created_at }}

{% else %}

No generator failures recorded.

{% endfor %}

Quotas are available for administration regardless of your personal broadcast permissions. Blank user overrides inherit the station default.

{% for user in users %}
{% endfor %}

Set each band's purpose, limits, and future transmission capabilities. These capabilities do not restrict normal tuning.

{% for band in bands %}
BAND {{ '%02d'|format(loop.index) }}
{% endfor %}

One reserved hosted-programming frequency per operator. Assignments remain idle until a broadcast begins.

MANAGE AUTOMATED BROADCASTS

{% for user in users %} {% set live = broadcast_sessions.get(user.id) %}

{{ user.callsign }} / {{ user.username }}

{% if live %}

{{ live.status|upper }} / {{ live.playlist_name }} / {{ live.track_name }} / {{ live.frequency }} MHz{% if live.indefinite %} / INDEFINITE{% endif %}

{% endif %}
{% endfor %}

Within a group, frequency rules override ranges, and ranges override bands. Across a user's groups: DENIED overrides FULL, FULL overrides LISTEN, and an absent rule is UNSET. HOST BROADCASTS is a separate group capability; a host still needs effective FULL access. MODERATE IMAGEBOARD grants pin, lock, and delete controls while the imageboard is enabled. SYSOPs always have these controls.

{% for group in groups %}

{{ group.name }}

{% if group.is_default %}PERMANENT / EVERY ACCOUNT{% endif %}
{% if not group.is_default %}
{% endif %}
{% for rule in rules_by_group[group.id] %}
{{ rule.scope_type|upper }} / {% if rule.scope_type=='band' %}{{ rule.band_name }}{% elif rule.scope_type=='frequency' %}{{ format_frequency(rule.start_khz) }} MHz{% else %}{{ format_frequency(rule.start_khz) }}–{{ format_frequency(rule.end_khz) }} MHz{% endif %} {{ rule.permission }}
{% else %}

No rules. This group currently contributes UNSET everywhere.

{% endfor %}
{% endfor %}
{% for user in users %}

{{ user.callsign }} / {{ user.username }}

{% for group in groups if not group.is_default %} {% endfor %}
Hosted broadcasting: {{ 'AUTHORIZED' if broadcast_hosts[user.id] else 'NOT AUTHORIZED' }} {% for band in bands %}{{ band.name }}: {{ effective[user.id][band.id] }}{% endfor %}
{% endfor %}
{% endblock %}