git / moonbite-network / docs/forum/RUNBOOK.md · raw

# Running the MoonBite forumHow the discussion board runs day to day: what's automatic, what needs aperson, and how to switch each part on. Everything here is honest by design:posts by the project are always labelled, and nothing pretends to be acommunity member.## What runs by itself`forum_bot.py`, run every 15 minutes by cron, posts as the verified**MoonBite** account:| When (UTC) | Post | Label ||---|---|---|| Daily, a set minute between 06:00 and 09:00 | Network report for the previous day (blocks, block time, hashrate, supply, wait-per-block table) | Verified moderator · Automated || Every 10,000 blocks | "Block N reached" | Verified moderator · Automated || Monday, between 09:00 and 18:00 | Show your rig | Verified moderator · Automated || Thursday, between 09:00 and 18:00 | Hot take (from `forum_prompts.py`) | Verified moderator · Automated || Saturday, between 09:00 and 18:00 | Predictions, plus last week's real numbers as a reply | Verified moderator · Automated || Whenever you schedule it | Your own posts from the queue file | Verified moderator |Each post gets its own minute inside its window, fixed by hashing the post'skey, so times differ from day to day and week to week. `python forum_bot.py --slots`shows today's times. Numbers always come from the node; if it's down, nothingis posted.The board also guards itself on every post:- refuses anything that looks like a seed phrase (12+ BIP39 words) or a private key,  and tells the poster to move their coins- refuses more than 5 links per post- refuses the same thread twice within an hour, and copy-pasted replies- reserves "MoonBite", "admin", "moderator", "official", "verified" and similar names## What needs a person (you or a real moderator)Daily, about 15 minutes:1. Open **/discussions/mod**. Clear every report: Remove or Keep it.2. Answer everything under "Waiting for a first reply". The target is 100% of   threads answered within 24 hours. This number matters more than any other.3. Reply to at least one thread as yourself. Tick "Post as MoonBite (verified   moderator)" only when speaking for the project.Weekly:- Check the desk's numbers (people posting, threads, replies vs last week).  Real growth looks like your plan: up, a small dip, up again.- Post a build log (what changed this week) in your own words.- Edit `forum_prompts.py` if the hot takes run dry.## Switching it on (server)1. Set the moderator key (long and random; keep it in a password manager):   ```bash   python -c "import secrets; print(secrets.token_urlsafe(32))"   ```   Put it in the web app's environment as `MOONBITE_FORUM_MOD_KEY`, restart, and   log in at `/discussions/mod`. Without the key, the desk is off (404).2. Optional links shown on /community and the forum sidebar:   `MOONBITE_DISCORD_URL`, `MOONBITE_BITCOINTALK_URL` (https only).3. Cron, with the same environment as the web app (node RPC + `MOONBITE_FORUM_DB`):   ```bash   */15 * * * * cd /srv/moonbite-network && .venv/bin/python forum_bot.py >> /var/log/moonbite-forum-bot.log 2>&1   ```   Check first with `python forum_bot.py --dry-run`.## Scheduling your own postsPut them in `forum_queue.json` (path override: `MOONBITE_FORUM_QUEUE`). Each ispublished once, at its time, as the verified account, with no "Automated" tagbecause you wrote it:```json[  {"key": "ama", "publish_at": "2026-10-25T10:20:00Z", "category": "general",   "title": "Ask us anything, including the hard stuff", "body": "...", "pin": true},  {"key": "ama-2", "publish_at": "2026-10-26T15:05:00Z", "reply_to": "ama", "body": "..."}]```A post that still contains `[NEEDS FOUNDER INPUT ...]` is held, never posted.The launch thread draft is `docs/forum/ask-anything-draft.md`. Resolve itsmarkers, then move each part into the queue on separate days.## Lines not to cross- No accounts that pretend to be community members. Only real people get the  verified badge.- Never remove the "Automated" tag from scheduled posts.- Never delete criticism because it's critical. Remove only spam, scams, abuse  and leaked secrets, and say so in the thread if it was a judgement call.