From 23e122c08a0bc833c2b9d0e2af79c032d637b4fb Mon Sep 17 00:00:00 2001 From: Franz Rolfsvaag Date: Sun, 24 Aug 2025 15:27:10 +0200 Subject: [PATCH] 0.5.1.1.a1 - Major back-end changes - Moved most non-sensitive values to dynamic configurations module - Removed references to old variables naming scheme for certain settings - Essentially, most settings are now capable of being dynamically assigned, instead of fully static - Complete rework of the wrapper and compose infrastructure to allow dynamic data changes - New command: `/shaiadmin` - Admin-only (and approved users/roles) have access - `/shaiadmin set [setting] [value]` - Applies a new setting - Settings must be properly formatted, and invalid ones are rejected - `/shaiadmin unset [setting]` - Unsets/resets a setting to default - `/shaiadmin settings download` - Offers the current settings file for download. Useful for bulk editing. JSON formatted - `/shaiadmin settings upload [file].json` - Allows the uploading of a new settings file - This file is verified, tested, and processed before being applied --- .gitignore | 1 + assets/images/escort_logo.png | Bin 0 -> 49923 bytes assets/images/escort_logo.svg | 108 +++++++ assets/images/feydakin_logo.png | Bin 0 -> 54391 bytes assets/images/feydakin_logo.svg | 93 ++++++ assets/images/harvester_logo.png | Bin 0 -> 47385 bytes assets/images/harvester_logo.svg | 51 ++++ bot.py | 134 ++++----- modules/admin/__init__.py | 0 modules/admin/shaiadmin.py | 168 +++++++++++ modules/common/boot_notice.py | 24 +- modules/common/settings.py | 489 +++++++++++++++++++++++++++---- 12 files changed, 912 insertions(+), 156 deletions(-) create mode 100644 assets/images/escort_logo.png create mode 100644 assets/images/escort_logo.svg create mode 100644 assets/images/feydakin_logo.png create mode 100644 assets/images/feydakin_logo.svg create mode 100644 assets/images/harvester_logo.png create mode 100644 assets/images/harvester_logo.svg create mode 100644 modules/admin/__init__.py create mode 100644 modules/admin/shaiadmin.py diff --git a/.gitignore b/.gitignore index c233395..e7d3710 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ NOTES.md sanity/ .offline_data.json dev/.env.production +dev/portainer_config.png # Tools wrapper/ diff --git a/assets/images/escort_logo.png b/assets/images/escort_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c0b7718feab14b331b14584a3dfb9bb164d132 GIT binary patch literal 49923 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 + + + diff --git a/assets/images/feydakin_logo.png b/assets/images/feydakin_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d1c3145434c25fe793ecc3ada078d945b7680742 GIT binary patch literal 54391 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 y> + + + diff --git a/assets/images/harvester_logo.png b/assets/images/harvester_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e444fd5e938c582b211e576db4afb3ee41c5f0f2 GIT binary patch literal 47385 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≪xB9)#zF4JZVi+j)|1*gbq1LzMt+FG_4)^x3AG~L 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˟ZMzj + + + diff --git a/bot.py b/bot.py index b5f87cd..55314d1 100644 --- a/bot.py +++ b/bot.py @@ -9,10 +9,9 @@ from modules.common.boot_notice import post_boot_notice # Version consists of: # Major.Enhancement.Minor.Patch.Test (Test is alphanumeric; doesn’t trigger auto update) -VERSION = "0.4.2.1.a1" +VERSION = "0.5.1.1.a1" # ---------- Env loading ---------- - load_dotenv() def _get_env(name: str, default: str = "") -> str: @@ -20,11 +19,26 @@ def _get_env(name: str, default: str = "") -> str: return (v or "").strip().strip('"').strip("'") or default TOKEN = _get_env("DISCORD_TOKEN") -DATA_FILE = _get_env("SHAI_DATA") or _get_env("SHAI_DATA_FILE") or "/data/data.json" +DATA_FILE = _get_env("DATA_FILE") or "./data/data.json" print("[Config] DISCORD_TOKEN set:", bool(TOKEN)) print("[Config] DATA_FILE:", DATA_FILE) +# ---------- Ensure data path exists (fallback if not writable) ---------- +data_dir = os.path.dirname(DATA_FILE) or "." +try: + os.makedirs(data_dir, exist_ok=True) +except PermissionError: + fallback = "./data/data.json" + print(f"[Config] No permission to create '{data_dir}'. Falling back to {fallback}") + DATA_FILE = fallback + data_dir = os.path.dirname(DATA_FILE) + os.makedirs(data_dir, exist_ok=True) + +if not os.path.exists(DATA_FILE): + with open(DATA_FILE, "w", encoding="utf-8") as f: + f.write("{}") + # ---------- Discord intents ---------- intents = discord.Intents.default() @@ -52,13 +66,10 @@ bot.data_manager = DataManager(DATA_FILE) # ---------- Self-check: resolve from ENV first, then cfg_helper ---------- def _resolve_channel_id(c, key: str) -> int: - # 1) ENV always wins - env_key = f"SHAI_{key.upper()}" - raw = os.getenv(env_key, "").strip().strip('"').strip("'") - if raw.isdigit(): - return int(raw) - - # 2) Try cfg_helper (if it happens to know) + """ + Resolve channel IDs from the runtime settings store (cfg), with a final + fallback to legacy bot.config['DEFAULT'] if present. No SHAI_* env usage. + """ try: v = int(c.int(key, 0)) if v: @@ -66,9 +77,8 @@ def _resolve_channel_id(c, key: str) -> int: except Exception: pass - # 3) Last resort: legacy bot.config shapes try: - # bot.config like dict + # legacy DEFAULT mapping (ConfigParser-like or our shim) v = int(getattr(c, "get", lambda *_: 0)(key, 0)) if v: return v @@ -77,7 +87,6 @@ def _resolve_channel_id(c, key: str) -> int: return 0 - async def _guild_selfcheck(g: discord.Guild, c): problems = [] @@ -128,92 +137,47 @@ async def on_ready(): print("[SelfCheck] failed:", repr(e)) # ---------- Slash command scope & sync ---------- - # - # Toggle here (or set SHAI_SLASH_GUILD_ONLY=true/false): - guild_only = env_cfg.bool("slash_guild_only", True) - - # Choose target guilds for "instant" registration - target_gids = set() - for key in ("home_guild_id", "dev_guild_id"): - val = env_cfg.get(key) - if val: - try: - target_gids.add(int(val)) - except Exception: - pass - try: - if guild_only and target_gids: - print(f"[Slash] Mode: GUILD-ONLY to {sorted(target_gids)}") + # env_cfg already exists above in on_ready() + gid = env_cfg.int("home_guild_id", 0) - # Copy all currently-loaded global commands to each target guild - for gid in sorted(target_gids): - g = bot.get_guild(gid) - if not g: - print(f"[Slash] Guild {gid}: not in cache; skipping copy/sync.") - continue - bot.tree.copy_global_to(guild=g) - g_cmds = await bot.tree.sync(guild=g) - names = ", ".join(f"/{c.name}" for c in g_cmds) if g_cmds else "(none)" - print(f"[Slash] Synced {len(g_cmds)} commands to {g.name} ({g.id}): {names}") + if gid > 0: + print(f"[Slash] Mode: GUILD-ONLY → {gid}") - # Now remove global commands so only guild-scoped remain + guild_obj = discord.Object(id=gid) + + # Copy all currently-loaded global commands to HOME guild + bot.tree.copy_global_to(guild=guild_obj) + g_cmds = await bot.tree.sync(guild=guild_obj) + g_names = ", ".join(f"/{c.name}" for c in g_cmds) if g_cmds else "(none)" + print(f"[Slash] Synced {len(g_cmds)} commands to guild {gid}: {g_names}") + + # Clear global so only guild-scoped remain bot.tree.clear_commands(guild=None) - cleared = await bot.tree.sync() # push empty global set (purges old global copies) + cleared = await bot.tree.sync() # push empty global set print(f"[Slash] Cleared global commands (now {len(cleared)}).") - else: - print("[Slash] Mode: GLOBAL") - # Purge any old per-guild copies in target guilds (to avoid dupes), - # then sync globally once. - for gid in sorted(target_gids): - g = bot.get_guild(gid) - if not g: - print(f"[Slash] Guild {gid}: not in cache; skip purge.") - continue - bot.tree.clear_commands(guild=g) - await bot.tree.sync(guild=g) - print(f"[Slash] Purged guild-specific commands in {g.name} ({g.id}).") + # Debug: list actual state after sync + try: + global_cmds = await bot.tree.fetch_commands() + print(f"[Slash] Global commands ({len(global_cmds)}): {', '.join(f'/{c.name}' for c in global_cmds) or '(none)'}") + except Exception as e: + print("[Slash] Failed to fetch global commands:", repr(e)) + try: + g_cmds = await bot.tree.fetch_commands(guild=guild_obj) + print(f"[Slash] Guild {gid} commands ({len(g_cmds)}): {', '.join(f'/{c.name}' for c in g_cmds) or '(none)'}") + except Exception as e: + print(f"[Slash] Failed to fetch commands for guild {gid}:", repr(e)) + else: + print("[Slash] Mode: GLOBAL (HOME_GUILD_ID not set)") global_cmds = await bot.tree.sync() names = ", ".join(f"/{c.name}" for c in global_cmds) if global_cmds else "(none)" print(f"[Slash] Synced {len(global_cmds)} commands globally: {names}") - # --- Always print what actually exists after sync --- - def _fmt_cmds(cmds): - try: - return ", ".join(f"/{c.name}" for c in cmds) if cmds else "(none)" - except Exception: - return "(unreadable)" - - # Global list - try: - global_cmds = await bot.tree.fetch_commands() - print(f"[Slash] Global commands ({len(global_cmds)}): {_fmt_cmds(global_cmds)}") - except Exception as e: - print("[Slash] Failed to fetch global commands:", repr(e)) - - # Guild lists - for gid in sorted(target_gids): - g = bot.get_guild(gid) - if not g: - print(f"[Slash] Guild {gid}: not in cache; cannot fetch commands.") - continue - try: - g_cmds = await bot.tree.fetch_commands(guild=g) - print(f"[Slash] {g.name} ({g.id}) guild commands ({len(g_cmds)}): {_fmt_cmds(g_cmds)}") - except Exception as e: - print(f"[Slash] Failed to fetch commands for guild {gid}:", repr(e)) - except Exception as e: print("[Slash] Sync failed:", repr(e)) - # Post boot status message - try: - await post_boot_notice(bot) - except Exception as e: - print("[BootNotice] failed:", repr(e)) - # ---------- Auto-discover extensions ---------- modules_path = pathlib.Path(__file__).parent / "modules" diff --git a/modules/admin/__init__.py b/modules/admin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/modules/admin/shaiadmin.py b/modules/admin/shaiadmin.py new file mode 100644 index 0000000..f7c5b03 --- /dev/null +++ b/modules/admin/shaiadmin.py @@ -0,0 +1,168 @@ +# modules/admin/shaiadmin.py +import io +import json +from typing import Any, Dict, List + +import discord +from discord import app_commands +from discord.ext import commands + +from modules.common.settings import ( + cfg, SETTINGS_SCHEMA, settings_path, settings_get_all, + settings_set, settings_reset, settings_import_bulk, ValidationError, +) +from mod_perms import is_moderator_member # keep if you want mods as managers + +def _user_has_role_ids(member: discord.Member, role_ids: List[int]) -> bool: + if not isinstance(member, discord.Member) or not role_ids: + return False + rset = set(role_ids) + return any(r.id in rset for r in member.roles) + +async def _is_owner(bot: commands.Bot, user: discord.abc.User) -> bool: + try: + return await bot.is_owner(user) + except Exception: + return False + +def _get_admin_lists(bot: commands.Bot) -> Dict[str, List[int]]: + r = cfg(bot) + users, roles = [], [] + try: + users = json.loads(r.get("admin_user_ids", "[]")) + except Exception: + users = [] + try: + roles = json.loads(r.get("admin_role_ids", "[]")) + except Exception: + roles = [] + return {"users": users, "roles": roles} + +async def _check_admin(inter: discord.Interaction) -> bool: + bot: commands.Bot = inter.client # type: ignore + user = inter.user + if await _is_owner(bot, user): + return True + if isinstance(user, discord.Member): + lists = _get_admin_lists(bot) + if user.id in set(lists["users"]): + return True + if _user_has_role_ids(user, lists["roles"]): + return True + if is_moderator_member(user, bot): # optional; remove if not desired + return True + if not inter.response.is_done(): + await inter.response.send_message("You don’t have permission to use `/shaiadmin`.", ephemeral=True) + else: + await inter.followup.send("You don’t have permission to use `/shaiadmin`.", ephemeral=True) + return False + + +class ShaiAdminCog(commands.Cog): + """Runtime settings administration (file-backed).""" + + def __init__(self, bot: commands.Bot): + self.bot = bot + + # Guild-only group; prefix description with [ADMIN] + shaiadmin = app_commands.Group( + name="shaiadmin", + description="[ADMIN] Owner/approved-only settings manager.", + guild_only=True, + ) + + # ---- bound coroutine for autocomplete ---- + async def ac_setting_keys(self, interaction: discord.Interaction, current: str) -> List[app_commands.Choice[str]]: + cur = (current or "").lower() + keys = [k for k in sorted(SETTINGS_SCHEMA.keys()) if cur in k] + return [app_commands.Choice(name=k, value=k) for k in keys[:25]] + + # /shaiadmin set + @shaiadmin.command(name="set", description="[ADMIN] Set a setting (validated, persisted, applied).") + @app_commands.describe(setting_name="Which setting to change", value="New value (type depends on setting)") + @app_commands.autocomplete(setting_name=ac_setting_keys) + async def set_value(self, inter: discord.Interaction, setting_name: str, value: str): + if not await _check_admin(inter): + return + await inter.response.defer(ephemeral=True, thinking=True) + setting_name = setting_name.lower().strip() + try: + changed = settings_set(setting_name, value) + await inter.followup.send( + f"✅ `{setting_name}` updated and applied." if changed else "ℹ️ No change.", + ephemeral=True, + ) + except ValidationError as ve: + await inter.followup.send(f"❌ {ve}", ephemeral=True) + except Exception as e: + await inter.followup.send(f"❌ Failed to set `{setting_name}`: {e!r}", ephemeral=True) + + # /shaiadmin unset + @shaiadmin.command(name="unset", description="[ADMIN] Reset/unset a setting to its default.") + @app_commands.describe(setting_name="Which setting to reset") + @app_commands.autocomplete(setting_name=ac_setting_keys) + async def unset_value(self, inter: discord.Interaction, setting_name: str): + if not await _check_admin(inter): + return + await inter.response.defer(ephemeral=True, thinking=True) + setting_name = setting_name.lower().strip() + try: + settings_reset(setting_name) + await inter.followup.send(f"✅ `{setting_name}` reset to default and applied.", ephemeral=True) + except ValidationError as ve: + await inter.followup.send(f"❌ {ve}", ephemeral=True) + except Exception as e: + await inter.followup.send(f"❌ Failed to reset `{setting_name}`: {e!r}", ephemeral=True) + + # /shaiadmin settings (download/upload) + settings = app_commands.Group( + name="settings", + description="[ADMIN] Download or upload the full settings JSON.", + parent=shaiadmin, + guild_only=True, + ) + + @settings.command(name="download", description="[ADMIN] Download the current settings.json") + async def download(self, inter: discord.Interaction): + if not await _check_admin(inter): + return + await inter.response.defer(ephemeral=True, thinking=True) + data = settings_get_all() + buf = io.BytesIO(json.dumps(data, indent=2, ensure_ascii=False).encode("utf-8")) + buf.seek(0) + await inter.followup.send( + content=f"📦 Current settings from `{settings_path()}`", + file=discord.File(buf, filename="settings.json"), + ephemeral=True, + ) + + @settings.command(name="upload", description="[ADMIN] Upload and apply a settings.json") + @app_commands.describe(file="A JSON file exported by /shaiadmin settings download (or matching the schema).") + async def upload(self, inter: discord.Interaction, file: discord.Attachment): + if not await _check_admin(inter): + return + await inter.response.defer(ephemeral=True, thinking=True) + if not file or not file.filename.lower().endswith(".json"): + await inter.followup.send("Please attach a `.json` file.", ephemeral=True) + return + try: + raw = await file.read() + obj = json.loads(raw.decode("utf-8")) + except Exception: + await inter.followup.send("❌ Invalid JSON file.", ephemeral=True) + return + + try: + changed_keys = settings_import_bulk(obj) + await inter.followup.send( + f"✅ Uploaded and applied `{len(changed_keys)}` keys: {', '.join(sorted(changed_keys))}." + if changed_keys else "ℹ️ No changes detected.", + ephemeral=True, + ) + except ValidationError as ve: + await inter.followup.send(f"❌ {ve}", ephemeral=True) + except Exception as e: + await inter.followup.send(f"❌ Upload failed: {e!r}", ephemeral=True) + +async def setup(bot: commands.Bot): + await bot.add_cog(ShaiAdminCog(bot)) diff --git a/modules/common/boot_notice.py b/modules/common/boot_notice.py index 29fa1af..94d92e5 100644 --- a/modules/common/boot_notice.py +++ b/modules/common/boot_notice.py @@ -1,4 +1,3 @@ -# modules/common/boot_notice.py import os import re import time @@ -81,18 +80,18 @@ def _parse_repo_url(repo_url: str) -> tuple[str | None, str | None, str | None]: def _auth_headers_from_cfg(r): """ - Build Authorization header using SHAI_REPO_AHTOKEN (cfg: repo_ahtoken). - Value may be raw; we prefix 'token ' if needed. - Also supports SHAI_GITEA_TOKEN / SHAI_GITEA_USER as secondary. + Build Authorization header using repo auth tokens. + - Preferred: cfg('repo_ahtoken') (comes from settings.json or env REPO_AHTOKEN) + - Fallbacks: GITEA_TOKEN / GITEA_USER envs (non-SHAI) """ - ahtoken = r.get('repo_ahtoken', '').strip() # SHAI_REPO_AHTOKEN + ahtoken = r.get('repo_ahtoken', '').strip() # REPO_AHTOKEN via settings/env if ahtoken: if not ahtoken.lower().startswith('token '): ahtoken = f"token {ahtoken}" return {"Authorization": ahtoken} - tok = os.getenv("SHAI_GITEA_TOKEN", "").strip() - usr = os.getenv("SHAI_GITEA_USER", "").strip() + tok = os.getenv("GITEA_TOKEN", "").strip() + usr = os.getenv("GITEA_USER", "").strip() if tok and usr: import base64 b64 = base64.b64encode(f"{usr}:{tok}".encode()).decode() @@ -102,6 +101,7 @@ def _auth_headers_from_cfg(r): return {} async def _http_json(url: str, headers: dict, timeout_sec: int = 10): + import aiohttp timeout = aiohttp.ClientTimeout(total=timeout_sec) async with aiohttp.ClientSession(timeout=timeout, headers=headers or {}) as sess: async with sess.get(url) as resp: @@ -121,6 +121,7 @@ async def _fetch_latest_commit(api_base: str, owner: str, repo: str, branch: str /api/v1/repos/{owner}/{repo}/commits?sha=main&stat=false&verification=false&files=false&limit=1 If branch is falsy, omit 'sha' to use server default. """ + from urllib.parse import urlencode params = { "stat": "false", "verification": "false", @@ -181,7 +182,6 @@ async def post_boot_notice(bot): except Exception as e: print(f"[boot_notice] wait_until_ready failed: {e}") - for guild in bot.guilds: print(f' - {guild.name} (id: {guild.id})') @@ -201,9 +201,9 @@ async def post_boot_notice(bot): print(f"[boot_notice] channel id {modlog_channel_id} not found; skipping.") return - repo_url = r.get('repo_url', '') # SHAI_REPO_URL - branch = r.get('repo_branch', 'main') or None # SHAI_REPO_BRANCH (optional) - check_time_utc = r.get('check_time_utc', '') # SHAI_CHECK_TIME_UTC (optional) + repo_url = r.get('repo_url', '') + branch = r.get('repo_branch', 'main') or None + check_time_utc = r.get('check_time_utc', '') headers = _auth_headers_from_cfg(r) api_base = owner = repo = None @@ -254,7 +254,7 @@ async def post_boot_notice(bot): # Build + post status line status_line = _format_status_line(reason, prev_ver, curr_ver) - # NEW: If no version change (manual/scheduled), append the running version to the status line, + # If no version change (manual/scheduled), append the running version to the status line, # and DO NOT post the commit message separately. append_version_only = reason in ("manual", "scheduled") if append_version_only and curr_ver: diff --git a/modules/common/settings.py b/modules/common/settings.py index df2df78..c58ffe5 100644 --- a/modules/common/settings.py +++ b/modules/common/settings.py @@ -1,68 +1,453 @@ # modules/common/settings.py import os -from typing import Any, Dict, Iterable, Optional +import json +import shutil +import threading +import re +from datetime import datetime +from urllib.parse import urlparse +from typing import Any, Dict, Iterable, Optional, List +# ========================= +# Public API Exceptions +# ========================= + +class ValidationError(Exception): + pass + + +# ========================= +# Helpers +# ========================= def _clean(s: Optional[str]) -> str: s = (s or "").strip() - # strip accidental quotes Portainer sometimes adds if (s.startswith('"') and s.endswith('"')) or (s.startswith("'") and s.endswith("'")): s = s[1:-1].strip() return s +def _is_intish(x: Any) -> bool: + try: + int(str(x).strip()) + return True + except Exception: + return False -def _collect_shai_env() -> Dict[str, str]: - """ - Build a {key_without_prefix_lower: cleaned_value} mapping - from all environment variables that start with SHAI_. - """ - out: Dict[str, str] = {} - for k, v in os.environ.items(): - if not k.startswith("SHAI_"): - continue - key = k[5:].lower() # SHAI_MOD_CHANNEL_ID -> mod_channel_id - out[key] = _clean(v) - return out +def _to_bool(x: Any) -> bool: + s = str(x).strip().lower() + if s in ("1", "true", "yes", "on", "y", "t"): + return True + if s in ("0", "false", "no", "off", "n", "f"): + return False + raise ValidationError(f"Expected a boolean, got {x!r}") +def _to_int(x: Any) -> int: + if _is_intish(x): + return int(str(x).strip()) + raise ValidationError(f"Expected an integer, got {x!r}") + +def _to_float(x: Any) -> float: + try: + return float(str(x).strip()) + except Exception: + raise ValidationError(f"Expected a float, got {x!r}") + +def _to_str(x: Any) -> str: + return str(x) + +def _to_list_int(x: Any) -> List[int]: + if isinstance(x, list): + out = [] + for v in x: + if not _is_intish(v): + raise ValidationError(f"List must contain integers; got {v!r}") + out.append(int(v)) + return out + if isinstance(x, str): + toks = [t.strip() for t in x.split(",") if t.strip()] + try: + return [int(t) for t in toks] + except Exception: + raise ValidationError(f"Could not parse list of integers from {x!r}") + raise ValidationError(f"Expected a list of integers, got {type(x).__name__}") + +# ---- URL / Time / Date validators ---- + +def _to_url(x: Any) -> str: + s = str(x).strip() + if not s: + raise ValidationError("URL cannot be empty") + p = urlparse(s) + if p.scheme not in ("http", "https"): + raise ValidationError("URL must start with http:// or https://") + if not p.netloc: + raise ValidationError("URL missing host") + if not re.match(r"^([A-Za-z0-9\-.]+|\d{1,3}(?:\.\d{1,3}){3}|localhost)(:\d+)?$", p.netloc): + raise ValidationError("URL host looks invalid") + return s + +_TIME_24H_RE = re.compile(r"^(?P[01]?\d|2[0-3]):(?P[0-5]\d)(?::(?P[0-5]\d))?$") + +def _to_time_24h(x: Any) -> str: + s = str(x).strip() + m = _TIME_24H_RE.match(s) + if not m: + raise ValidationError("Time must be HH:MM or HH:MM:SS (24-hour)") + hh = int(m.group("h")) + mm = int(m.group("m")) + # canonical store as HH:MM + return f"{hh:02d}:{mm:02d}" + +def _expand_two_digit_year(two_digit: int, pivot_year: int) -> int: + # Map YY -> same century as pivot_year + base = pivot_year - (pivot_year % 100) + return base + two_digit + +def _to_date_ymd(x: Any, *, pivot_year: int | None = None) -> str: + s = str(x).strip() + if not s: + raise ValidationError("Date cannot be empty") + m = re.match(r"^(?P\d{2}|\d{4})-(?P\d{1,2})-(?P\d{1,2})$", s) + if not m: + raise ValidationError("Expected date format YYYY-MM-DD or YY-MM-DD") + y = m.group("y") + month = int(m.group("m")) + day = int(m.group("d")) + if len(y) == 2: + yy = int(y) + if pivot_year is not None: + year = _expand_two_digit_year(yy, pivot_year) + dt = datetime(year, month, day) + return dt.strftime("%Y-%m-%d") + else: + dt = datetime.strptime(s, "%y-%m-%d") + return dt.strftime("%Y-%m-%d") + year = int(y) + dt = datetime(year, month, day) + return dt.strftime("%Y-%m-%d") + +def _to_date_dmy(x: Any, *, pivot_year: int | None = None) -> str: + s = str(x).strip() + if not s: + raise ValidationError("Date cannot be empty") + m = re.match(r"^(?P\d{1,2})-(?P\d{1,2})-(?P\d{2}|\d{4})$", s) + if not m: + raise ValidationError("Expected date format DD-MM-YYYY or DD-MM-YY") + day = int(m.group("d")) + month = int(m.group("m")) + y = m.group("y") + if len(y) == 2: + yy = int(y) + if pivot_year is not None: + year = _expand_two_digit_year(yy, pivot_year) + dt = datetime(year, month, day) + return dt.strftime("%d-%m-%Y") + else: + dt = datetime.strptime(s, "%d-%m-%y") + return dt.strftime("%d-%m-%Y") + year = int(y) + dt = datetime(year, month, day) + return dt.strftime("%d-%m-%Y") + + +# ========================= +# Schema (non-sensitive, front-end editable) +# ========================= + +SETTINGS_SCHEMA: Dict[str, Dict[str, Any]] = { + # Channels (IDs) + "mod_channel_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Moderation command channel."}, + "modlog_channel_id": {"type": "int", "default": 0, "nonzero": True, "desc": "ModLog channel."}, + "pirates_list_channel_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Pirates list channel."}, + "dd_channel_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Deep Desert updates channel."}, + "report_channel_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Reports/approvals channel."}, + "userslist_channel_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Users list channel."}, + "trigger_channel_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Trigger channel for Auto VC."}, + + # Roles (IDs) + "rules_role_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Rules-agreed role ID."}, + "moderator_role_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Moderator role ID."}, + "intel_mod_role_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Intel mod role ID."}, + "full_access_role_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Full Access role ID."}, + "field_mod_role_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Field mod role ID."}, + "engagement_role_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Engagement role ID."}, + "admin_role_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Admin role ID."}, + + # Message IDs + "rules_message_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Rules message ID."}, + "engagement_message_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Engagement message ID."}, + "nickname_message_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Nickname message ID."}, + + # Emojis (IDs) + "emoji_carrier_crawler_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Custom emoji: carrier/crawler."}, + "emoji_melange_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Custom emoji: melange."}, + "emoji_sand_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Custom emoji: sand."}, + "emoji_harvester_crew": {"type": "int", "default": 0, "nonzero": True, "desc": "Custom emoji: harvester crew"}, + "emoji_escort_crew": {"type": "int", "default": 0, "nonzero": True, "desc": "Custom emoji: escort crew"}, + "emoji_fedaykin": {"type": "int", "default": 0, "nonzero": True, "desc": "Custom emoji: fedaykin - kill squad"}, + + # Auto-VC + "auto_vc_category_id": {"type": "int", "default": 0, "nonzero": True, "desc": "Category to host Auto-VCs."}, + "auto_vc_cleanup_delay": {"type": "int", "default": 30, "nonzero": True, "desc": "Seconds before empty Auto-VCs are cleaned up."}, + "vc_name_prefix": {"type": "str", "default": "DD Crew", "desc": "Auto-VC name prefix."}, + + # Pirates / threat model + "threat_group_threshold": {"type": "int", "default": 3, "desc": "Threshold for group classification."}, + "threat_min_samples_for_stats": {"type": "int", "default": 3, "desc": "Min samples for stats."}, + "threat_w_destruction": {"type": "float", "default": 0.40, "desc": "Weight: destruction."}, + "threat_w_group": {"type": "float", "default": 0.20, "desc": "Weight: group."}, + "threat_w_kill": {"type": "float", "default": 0.30, "desc": "Weight: kill."}, + "threat_w_skill": {"type": "float", "default": 0.10, "desc": "Weight: skill."}, + + # SpicePay + "spicepay_base_weight": {"type": "float", "default": 25.0, "desc": "Base weight."}, + "spicepay_carrier_bonus": {"type": "float", "default": 12.5, "desc": "Carrier bonus."}, + "spicepay_crawler_bonus": {"type": "float", "default": 12.5, "desc": "Crawler bonus."}, + "spicepay_lsr_cut_percent": {"type": "float", "default": 10.0, "desc": "SR cut percent."}, + + # Jobs / loops + "user_cards_cron_enabled": {"type": "bool", "default": True, "desc": "Enable user-cards cron."}, + "nick_nudge_loop_enabled": {"type": "bool", "default": False, "desc": "Enable nick-nudge loop."}, + + # Deep Desert fetcher + "dd_fetcher": {"type": "str", "default": "playwright", "allowed": ["playwright","requests"], "desc": "Fetcher backend."}, + "dd_pw_timeout_ms": {"type": "int", "default": 60000, "desc": "Playwright timeout (ms)."}, + "dd_pw_wait_ms": {"type": "int", "default": 0, "desc": "Extra wait after navigation (ms)."}, + + # Repo (non-secret) + "repo_url": {"type": "url", + "default": "https://git.rolfsvaag.no/frarol96/shaiwatcher", + "desc": "Repository URL."}, + "repo_branch": {"type": "str", "default": "main", "desc": "Repository branch."}, + "repo_rss": {"type": "url", + "default": "https://git.rolfsvaag.no/frarol96/shaiwatcher.rss", + "desc": "Repository RSS feed."}, + + # Admin allow-list for /shaiadmin (besides owner) + "admin_user_ids": {"type": "list[int]", "default": [], "desc": "User IDs allowed to use /shaiadmin."}, + "admin_role_ids": {"type": "list[int]", "default": [], "desc": "Role IDs allowed to use /shaiadmin."}, + + # Misc + "check_time_utc": {"type": "time_24h", "default": "03:00", "desc": "Daily check time (UTC HH:MM)"}, + "ignore_test_level": {"type": "int", "default": 0, "desc": "Test-level ignore flag."}, + "lang": {"type": "str", "default": "C.UTF-8", "desc": "Locale (if referenced)."}, + # Examples of date keys you may enable later: + # "feature_window_start": {"type": "date_ymd", "default": "", "allow_empty": True, "pivot_year": 2000, "desc": "Start date (YYYY-MM-DD or YY-MM-DD)."}, + # "event_date_dmy": {"type": "date_dmy", "default": "", "allow_empty": True, "pivot_year": 2000, "desc": "Event date (DD-MM-YYYY or DD-MM-YY)."}, +} + +# ========================= +# Env — ONLY the allowed set (plus legacy HOME_GUILD_ID alias) +# ========================= + +def _allowed_env_map() -> Dict[str, str]: + env: Dict[str, str] = {} + if os.getenv("DISCORD_TOKEN"): + env["discord_token"] = _clean(os.getenv("DISCORD_TOKEN")) + data_file = os.getenv("DATA_FILE") + if data_file: + env["data_file"] = _clean(data_file) + if os.getenv("DOCS_HOST_IP"): + env["docs_host_ip"] = _clean(os.getenv("DOCS_HOST_IP")) + if os.getenv("DOCS_HOST_PORT"): + env["docs_host_port"] = _clean(os.getenv("DOCS_HOST_PORT")) + if os.getenv("HOME_GUILD_ID"): + env["home_guild_id"] = _clean(os.getenv("HOME_GUILD_ID")) + if os.getenv("REPO_AHTOKEN"): + env["repo_ahtoken"] = _clean(os.getenv("REPO_AHTOKEN")) + return env + +# ========================= +# On-disk store + globals +# ========================= + +_SETTINGS_LOCK = threading.Lock() +_FILE_MAP: Dict[str, Any] = {} +_ENV_MAP: Dict[str, str] = {} +_SETTINGS_FILE: Optional[str] = None + +def settings_path() -> str: + """Place settings.json next to DATA_FILE if available; otherwise default to ./data/settings.json.""" + data_file = os.getenv("DATA_FILE") + if data_file: + base = os.path.dirname(data_file) or "." + return os.path.join(base, "settings.json") + return "./data/settings.json" + +def _ensure_loaded(): + global _SETTINGS_FILE, _FILE_MAP, _ENV_MAP + with _SETTINGS_LOCK: + if _SETTINGS_FILE is not None: + return + _SETTINGS_FILE = settings_path() + _ENV_MAP = _allowed_env_map() + + if os.path.exists(_SETTINGS_FILE): + try: + with open(_SETTINGS_FILE, "r", encoding="utf-8") as f: + _FILE_MAP = json.load(f) or {} + except Exception: + _FILE_MAP = {} + else: + _FILE_MAP = {} + _save_locked() + + changed = False + for key, meta in SETTINGS_SCHEMA.items(): + if key not in _FILE_MAP: + _FILE_MAP[key] = meta.get("default") + changed = True + if changed: + _save_locked() + +def _save_locked(): + global _SETTINGS_FILE, _FILE_MAP + path = _SETTINGS_FILE or settings_path() + os.makedirs(os.path.dirname(path) or ".", exist_ok=True) + tmp = path + ".tmp" + with open(tmp, "w", encoding="utf-8") as f: + json.dump(_FILE_MAP, f, indent=2, ensure_ascii=False) + if os.path.exists(path): + try: + shutil.copy2(path, path + ".bak") + except Exception: + pass + os.replace(tmp, path) + +def settings_get_all() -> Dict[str, Any]: + _ensure_loaded() + with _SETTINGS_LOCK: + return dict(_FILE_MAP) + +def _cast_value(name: str, raw: Any, *, enforce_nonzero: bool = True) -> Any: + meta = SETTINGS_SCHEMA.get(name) + if not meta: + raise ValidationError(f"Unknown setting: {name}") + + allow_empty = bool(meta.get("allow_empty", False)) + t = meta.get("type") + + if t in ("str", "url", "time_24h", "date_ymd", "date_dmy"): + s = str(raw).strip() + if s == "" and allow_empty: + val = "" + else: + if t == "str": + val = _to_str(raw) + elif t == "url": + val = _to_url(raw) + elif t == "time_24h": + val = _to_time_24h(raw) + elif t == "date_ymd": + val = _to_date_ymd(raw, pivot_year=meta.get("pivot_year")) + elif t == "date_dmy": + val = _to_date_dmy(raw, pivot_year=meta.get("pivot_year")) + elif t == "bool": + val = _to_bool(raw) + elif t == "int": + val = _to_int(raw) + elif t == "float": + val = _to_float(raw) + elif t == "list[int]": + val = _to_list_int(raw) + else: + raise ValidationError(f"Unsupported type for {name}: {t}") + + # enum constraint (always enforced) + if "allowed" in meta: + allowed = meta["allowed"] + if val not in allowed: + raise ValidationError(f"`{name}` must be one of {allowed}, got {val!r}") + + # nonzero constraint (skippable for bulk uploads) + if enforce_nonzero and meta.get("nonzero") and isinstance(val, int) and val == 0: + raise ValidationError(f"`{name}` must be a non-zero integer.") + + return val + +def settings_set(name: str, raw_value: Any) -> bool: + _ensure_loaded() + with _SETTINGS_LOCK: + name = name.lower().strip() + if name not in SETTINGS_SCHEMA: + raise ValidationError(f"Unknown setting: {name}") + new_val = _cast_value(name, raw_value) + old_val = _FILE_MAP.get(name, SETTINGS_SCHEMA[name].get("default")) + if old_val == new_val: + return False + _FILE_MAP[name] = new_val + _save_locked() + return True + +def settings_reset(name: str) -> None: + _ensure_loaded() + with _SETTINGS_LOCK: + name = name.lower().strip() + if name not in SETTINGS_SCHEMA: + raise ValidationError(f"Unknown setting: {name}") + _FILE_MAP[name] = SETTINGS_SCHEMA[name].get("default") + _save_locked() + +def settings_import_bulk(obj: Dict[str, Any]) -> List[str]: + _ensure_loaded() + if not isinstance(obj, dict): + raise ValidationError("Uploaded JSON must be an object/dict at the top level.") + new_map: Dict[str, Any] = dict(_FILE_MAP) + changed: List[str] = [] + for k, v in obj.items(): + if k not in SETTINGS_SCHEMA: + raise ValidationError(f"Unknown setting in upload: {k}") + # Allow 0 for keys marked nonzero during bulk import (treating as 'unset' sentinel) + new_val = _cast_value(k, v, enforce_nonzero=False) + if new_map.get(k) != new_val: + new_map[k] = new_val + changed.append(k) + with _SETTINGS_LOCK: + if changed: + _FILE_MAP.update({k: new_map[k] for k in changed}) + _save_locked() + return changed + +# ========================= +# Unified read view (keeps cfg(bot) contract) +# ========================= class ConfigView: """ - Unified config view. - - Primary: SHAI_* envs (prefix removed, lowercased keys) - - Secondary: bot.config['DEFAULT'] (if present) - - Helpers: get/int/bool/float/list - - Can mirror values back into os.environ as SHAI_* (opt-in) + Reads: + - Schema-managed keys from settings.json + - Env: discord_token, data_file, docs_host_ip, docs_host_port, home_guild_id + - Fallback to bot.config['DEFAULT'] for anything else (legacy) + Helpers: get/int/bool/float/list, to_dict() """ - def __init__(self, bot=None, *, mirror_to_env: bool = False): - self._env_map = _collect_shai_env() - - # Optional: also look into bot.config['DEFAULT'] as a fallback - self._default: Dict[str, Any] = {} + def __init__(self, bot=None): + _ensure_loaded() + self._env_map = dict(_ENV_MAP) try: self._default = (getattr(bot, "config", {}) or {}).get("DEFAULT", {}) or {} except Exception: self._default = {} - if mirror_to_env: - # Ensure os.environ has SHAI_* for everything we know (don’t clobber existing non-empty) - for k, v in self._env_map.items(): - env_key = f"SHAI_{k.upper()}" - if not os.environ.get(env_key): - os.environ[env_key] = v + def _effective_map(self) -> Dict[str, str]: + merged: Dict[str, str] = {} + # defaults first + for k in getattr(self._default, "keys", lambda: [])(): + merged[k] = _clean(str(self._default.get(k, ""))) + # env overlay + for k, v in self._env_map.items(): + merged[k] = _clean(v) + # schema values overlay defaults + for k, meta in SETTINGS_SCHEMA.items(): + v = _FILE_MAP.get(k, meta.get("default")) + if isinstance(v, (list, dict)): + merged[k] = json.dumps(v, ensure_ascii=False) + else: + merged[k] = _clean(str(v)) + return merged - # ---- core accessors ---- def get(self, key: str, default: str = "") -> str: - key = key.lower() - if key in self._env_map: - v = _clean(self._env_map[key]) - return v if v != "" else default - - # Fallback to DEFAULT mapping (ConfigParser-like or our shim) - try: - v = self._default.get(key, "") - except Exception: - v = "" - v = _clean(str(v)) + m = self._effective_map() + v = _clean(m.get(key.lower(), "")) return v if v != "" else default def int(self, key: str, default: int = 0) -> int: @@ -97,23 +482,9 @@ class ConfigView: parts = [p.strip() for p in s.split(sep)] return [p for p in parts if p] - # expose the resolved map if you ever want to dump it for debug def to_dict(self) -> Dict[str, str]: - d = dict(self._env_map) - # Include defaults that aren’t already in env_map - for k in getattr(self._default, "keys", lambda: [])(): - d.setdefault(k, _clean(str(self._default.get(k, "")))) - return d + return dict(self._effective_map()) -def cfg(bot=None, *, mirror_to_env: bool = False) -> ConfigView: - """ - Usage in cogs: - r = cfg(bot) - trigger_id = r.int('trigger_channel_id', 0) - prefix = r.get('vc_name_prefix', 'Room') - - If you want to also ensure SHAI_* are present in os.environ at runtime: - r = cfg(bot, mirror_to_env=True) - """ - return ConfigView(bot, mirror_to_env=mirror_to_env) +def cfg(bot=None) -> ConfigView: + return ConfigView(bot)