Full implementation from spec: ZNC/IRC client with TLS, Ollama LLM backend, per-user SQLite conversation memory, and Flask web admin portal with 7 pages. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
2.2 KiB
HTML
63 lines
2.2 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Dashboard — IRC Bot Portal{% endblock %}
|
|
{% block content %}
|
|
<h1>Dashboard</h1>
|
|
|
|
<div class="cards">
|
|
<div class="card">
|
|
<div class="card-label">Bot Status</div>
|
|
<div class="card-value status-{{ 'online' if pid_exists else 'offline' }}">
|
|
{{ 'Running' if pid_exists else 'Stopped' }}
|
|
</div>
|
|
</div>
|
|
<div class="card">
|
|
<div class="card-label">Nick</div>
|
|
<div class="card-value">{{ cfg.get('bot_nick', 'avcbot') }}</div>
|
|
</div>
|
|
<div class="card">
|
|
<div class="card-label">Ollama Model</div>
|
|
<div class="card-value">{{ cfg.get('ollama_model', '—') }}</div>
|
|
</div>
|
|
<div class="card">
|
|
<div class="card-label">Channels</div>
|
|
<div class="card-value">{{ cfg.get('channels', [])|length }}</div>
|
|
</div>
|
|
<div class="card">
|
|
<div class="card-label">Memory</div>
|
|
<div class="card-value">{{ 'Enabled' if cfg.get('memory_enabled', True) else 'Disabled' }}</div>
|
|
</div>
|
|
<div class="card">
|
|
<div class="card-label">Reload Socket</div>
|
|
<div class="card-value status-{{ 'online' if sock_exists else 'offline' }}">
|
|
{{ 'Available' if sock_exists else 'Not available' }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<h2>Connection</h2>
|
|
<table class="info-table">
|
|
<tr><td>ZNC Host</td><td>{{ cfg.get('znc_host', 'ham.activeblue.net') }}</td></tr>
|
|
<tr><td>Ollama</td><td>{{ cfg.get('ollama_host', '—') }}:{{ cfg.get('ollama_port', '—') }}</td></tr>
|
|
<tr><td>Joined Channels</td><td>{{ cfg.get('channels', [])|join(', ') or '—' }}</td></tr>
|
|
<tr><td>Trigger on Nick</td><td>{{ 'Yes' if cfg.get('trigger_on_nick') else 'No' }}</td></tr>
|
|
<tr><td>Trigger Prefix</td><td>{{ cfg.get('trigger_prefix') or '—' }}</td></tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<h2>Quick Actions</h2>
|
|
<div class="actions">
|
|
<form method="post" action="{{ url_for('action_reconnect') }}">
|
|
<button class="btn btn-secondary">Reconnect</button>
|
|
</form>
|
|
<form method="post" action="{{ url_for('action_reload') }}">
|
|
<button class="btn btn-secondary">Reload Config</button>
|
|
</form>
|
|
<form method="post" action="{{ url_for('action_clear_log') }}">
|
|
<button class="btn btn-danger">Clear Log</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|