Separate bot filter settings

This commit is contained in:
rajchales-monito
2026-07-30 13:57:13 +02:00
parent a0bef3baa3
commit 377a7eda98
2 changed files with 25 additions and 12 deletions
+10 -4
View File
@@ -183,8 +183,6 @@
<fieldset class="effect-settings presence-settings">
<legend>Signalizace navstevniku</legend>
<p class="ai-help">Zelena znamena aktivni. Po necinosti se prepne na oranzovou a po dalsim limitu na sedou.</p>
<label class="setting-switch full-row">Skryt boty <input id="hideBotsToggle" type="checkbox"></label>
<label class="setting-switch full-row">Hromadny bot filtr <input id="clusterBotFilterEnabled" type="checkbox"></label>
<div class="settings-top-row">
<label>Zelena do
<span class="seconds-field"><input id="presenceActiveSeconds" type="number" min="10" max="3600" step="5"><span>s</span></span>
@@ -193,6 +191,14 @@
<span class="seconds-field"><input id="presenceOfflineSeconds" type="number" min="20" max="7200" step="5"><span>s</span></span>
</label>
</div>
<small id="presenceStatus" class="full-row">Oranzova je cas mezi zelenou a sedou.</small>
<button id="savePresenceSettings" class="full-row" type="button">Ulozit signalizaci</button>
</fieldset>
<fieldset class="effect-settings bot-filter-settings">
<legend>Bot filtr</legend>
<p class="ai-help">Filtr skryje roboticke navstevy jen v BO panelu. Web ani chat zakaznikum neblokuje.</p>
<label class="setting-switch full-row">Skryt boty <input id="hideBotsToggle" type="checkbox"></label>
<label class="setting-switch full-row">Hromadny bot filtr <input id="clusterBotFilterEnabled" type="checkbox"></label>
<div class="settings-top-row">
<label>Pocet navstev
<input id="clusterBotCount" type="number" min="3" max="500" step="1">
@@ -201,8 +207,8 @@
<span class="seconds-field"><input id="clusterBotWindowSeconds" type="number" min="10" max="3600" step="10"><span>s</span></span>
</label>
</div>
<small id="presenceStatus" class="full-row">Oranzova je cas mezi zelenou a sedou.</small>
<button id="savePresenceSettings" class="full-row" type="button">Ulozit signalizaci</button>
<small id="botFilterStatus" class="full-row">Hromadny filtr: stejna IP, zeme, zarizeni a direct vstup.</small>
<button id="saveBotFilterSettings" class="full-row" type="button">Ulozit bot filtr</button>
</fieldset>
<fieldset class="effect-settings sound-settings">
<legend>BO zvuk</legend>
+15 -8
View File
@@ -78,6 +78,7 @@ $("#clusterBotFilterEnabled").addEventListener("change", markPresenceSettingsDir
$("#clusterBotCount").addEventListener("input", markPresenceSettingsDirty);
$("#clusterBotWindowSeconds").addEventListener("input", markPresenceSettingsDirty);
$("#savePresenceSettings").addEventListener("click", savePresenceSettings);
$("#saveBotFilterSettings").addEventListener("click", savePresenceSettings);
$("#adminSoundToggle").addEventListener("click", () => {
setAdminSoundMuted(!state.soundMuted);
});
@@ -772,12 +773,14 @@ function renderPresenceSettings(settings) {
$("#clusterBotFilterEnabled").checked = normalized.clusterBotFilterEnabled;
$("#clusterBotCount").value = normalized.clusterBotCount;
$("#clusterBotWindowSeconds").value = normalized.clusterBotWindowSeconds;
setPresenceStatus(presenceStatusText(normalized, "Oranzova"));
setPresenceStatus(`Oranzova: ${normalized.activeSeconds}-${normalized.offlineSeconds} s necinosti.`);
setBotFilterStatus(botFilterStatusText(normalized));
}
function markPresenceSettingsDirty() {
const normalized = currentPresenceSettingsFromForm();
setPresenceStatus(presenceStatusText(normalized, "Neulozeno. Oranzova"));
setPresenceStatus(`Neulozeno. Oranzova bude ${normalized.activeSeconds}-${normalized.offlineSeconds} s.`);
setBotFilterStatus(`Neulozeno. ${botFilterStatusText(normalized)}`);
}
async function savePresenceSettings() {
@@ -790,7 +793,8 @@ async function savePresenceSettings() {
renderPresenceSettings(state.site.settings.adminPresence || normalized);
state.visitorRenderKey = "";
await Promise.all([loadConversations(), loadVisitors()]);
setPresenceStatus(presenceStatusText(normalized, "Ulozeno. Oranzova"));
setPresenceStatus(`Ulozeno. Oranzova: ${normalized.activeSeconds}-${normalized.offlineSeconds} s necinosti.`);
setBotFilterStatus(`Ulozeno. ${botFilterStatusText(normalized)}`);
}
function normalizePresenceSettings(value = {}) {
@@ -815,11 +819,10 @@ function currentPresenceSettingsFromForm() {
});
}
function presenceStatusText(settings, prefix) {
const cluster = settings.clusterBotFilterEnabled
? ` Hromadny filtr: ${settings.clusterBotCount} navstev / ${settings.clusterBotWindowSeconds} s.`
: " Hromadny filtr vypnuty.";
return `${prefix}: ${settings.activeSeconds}-${settings.offlineSeconds} s necinosti.${cluster}`;
function botFilterStatusText(settings) {
return settings.clusterBotFilterEnabled
? `Hromadny filtr: ${settings.clusterBotCount} navstev / ${settings.clusterBotWindowSeconds} s.`
: "Hromadny filtr vypnuty.";
}
function clampNumber(value, min, max, fallback) {
@@ -832,6 +835,10 @@ function setPresenceStatus(message) {
$("#presenceStatus").textContent = message;
}
function setBotFilterStatus(message) {
$("#botFilterStatus").textContent = message;
}
function renderTelegramSettings(settings) {
$("#telegramEnabled").checked = Boolean(settings.enabled);
$("#telegramOperatorName").value = settings.operatorName || "Alex";