aboutsummaryrefslogtreecommitdiffstats
path: root/app.py
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2026-06-22 21:07:34 -0700
committerPinapelz <yukais@pinapelz.com>2026-07-10 20:52:54 -0700
commit1b7e178bfada80cd8c4141697d783a82497a3e64 (patch)
tree41753520a5774b0d689622499a1d329e71b28013 /app.py
parent178c77b59a36132f6ba3e460ed1eb054e780752d (diff)
add AFK member tracker
Diffstat (limited to 'app.py')
-rw-r--r--app.py37
1 files changed, 25 insertions, 12 deletions
diff --git a/app.py b/app.py
index 197b5fd..d8879e1 100644
--- a/app.py
+++ b/app.py
@@ -105,10 +105,17 @@ def build_context():
api_ping = round((time.perf_counter() - start_time) * 1000)
raw_channels = ts_data.get("channels") or []
+ afk_count = None
for channel in raw_channels:
- channel["channel_name"] = channel.get("channel_name").replace("[Cspacer]", "")
+ original_name = channel.get("channel_name", "")
+ channel["is_spacer"] = "[Cspacer]" in original_name and "AFK" not in original_name
+ if "AFK" in original_name:
+ afk_count = channel.get("total_clients", None)
+ channel["channel_name"] = original_name.replace("[Cspacer]", "")
raw_clients = ts_data.get("clients") or []
is_online = bool(raw_channels)
+ if afk_count is not None:
+ afk_count = int(afk_count) - 1
channels = sort_ts_channels(raw_channels, 0)
@@ -133,14 +140,23 @@ def build_context():
"medium_stars": generate_stars(50, 0.6),
"large_stars": generate_stars(15, 0.8),
"total_real_clients": total_real_clients,
+ "afk_count": afk_count,
}
FRAGMENT_TEMPLATE = """
{% if is_online %}
- <div class="stat-item">
- <span class="stat-label">Users Online</span>
- <span class="stat-value">{{ total_real_clients }}</span>
+ <div class="server-stats">
+ <div class="stat-item">
+ <span class="stat-label">Users Online</span>
+ <span class="stat-value">{{ total_real_clients }}</span>
+ </div>
+ {% if afk_count is not none %}
+ <div class="stat-item">
+ <span class="stat-label">AFK Users</span>
+ <span class="stat-value">{{ afk_count }}</span>
+ </div>
+ {% endif %}
</div>
<div class="channel-list">
{% for channel in channels %}
@@ -149,7 +165,6 @@ FRAGMENT_TEMPLATE = """
{% set channel_clients = clients_by_channel.get(cid, []) %}
{% set bg_img = config.channel_banners.get(c_name, config.generic_images.get('background', '')) %}
{% set icon_img = config.channel_icons.get(c_name, config.generic_images.get('icon', '')) %}
- {% set max_clients = channel.get('channel_maxclients') %}
{% if bg_img %}
{% set bg_style = "background-image: linear-gradient(90deg, rgba(9, 18, 32, 0.96) 0%, rgba(9, 18, 32, 0.78) 45%, rgba(9, 18, 32, 0.94) 100%), url('" ~ safe_url(bg_img) ~ "');" %}
@@ -157,6 +172,7 @@ FRAGMENT_TEMPLATE = """
{% set bg_style = "" %}
{% endif %}
+ {% if not channel.is_spacer %}
<article class="channel">
<header class="channel-header" style="{{ bg_style }}">
<div class="channel-title-group">
@@ -166,15 +182,12 @@ FRAGMENT_TEMPLATE = """
<h2>{{ c_name }}</h2>
</div>
{# Only show client count for non-spacer channels #}
- {% if '[spacer' not in c_name %}
- <span class="channel-meta">
- {{ channel_clients|length }} / {{ '∞' if max_clients == -1 or max_clients == '-1' else max_clients }}
- </span>
- {% endif %}
+ <span class="channel-meta">
+ {{ channel_clients|length }}
+ </span>
</header>
{# Only show client list for non-spacer channels #}
- {% if '[spacer' not in c_name|lower and '[cspacer' not in c_name|lower and channel_clients %}
<ul class="client-list">
{% for client in channel_clients %}
<li class="client">
@@ -194,8 +207,8 @@ FRAGMENT_TEMPLATE = """
</li>
{% endfor %}
</ul>
- {% endif %}
</article>
+ {% endif %}
{% endfor %}
</div>
{% else %}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage