Rewrite from TypeScript to Go

Complete rewrite of the Freebee Matrix bot as GogoBee using mautrix-go.

- E2EE with goolm (pure Go, no CGo/libolm) and cross-signing bootstrap
- 35+ plugins with dependency injection and ordered registration
- SQLite storage via modernc.org/sqlite (no CGo)
- Scheduler via robfig/cron for WOTD, holidays, birthdays, releases, etc.
- Optional LLM integration (Ollama) for sentiment, profanity, roasts, vibes
- Threaded trivia, three-tier profanity tracking, WOTD usage verification
- Multi-country holiday support with deduplication
- Quadratic XP curve, configurable bot display name, encrypted DMs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
prosolis
2026-03-08 18:25:18 -07:00
parent 07c8674fe0
commit ddb196aaad
91 changed files with 12865 additions and 13909 deletions

View File

@@ -1,57 +1,39 @@
# Matrix
MATRIX_HOMESERVER_URL=https://matrix.example.com
MATRIX_ACCESS_TOKEN=syt_your_token_here
MATRIX_BOT_USER_ID=@freebee:example.com
MATRIX_BOT_PASSWORD=
# ---- Matrix Connection ----
HOMESERVER_URL=https://matrix.example.com
BOT_USER_ID=@gogobee:example.com
BOT_PASSWORD=your_password_here
BOT_DISPLAY_NAME=GogoBee
# Which rooms the bot actively posts scheduled content to (comma-separated)
BOT_ROOMS=!roomid:example.com
# Which rooms the bot posts scheduled content to (comma-separated room IDs)
BROADCAST_ROOMS=!roomid:example.com
# Admins who can run admin-only commands
BOT_ADMIN_USERS=@yourmxid:example.com
# Admins who can run admin-only commands (comma-separated Matrix user IDs)
ADMIN_USERS=@yourmxid:example.com
# Runtime
BOT_PREFIX=!
# ---- Runtime ----
DATA_DIR=./data
LOG_LEVEL=info
# External APIs
# ---- External API Keys (all optional) ----
RAWG_API_KEY=
WORDNIK_API_KEY=
CALENDARIFIC_API_KEY=
ASIAN_HOLIDAY_COUNTRIES=JP,CN,KR,IN,TH,VN,TW,PH
HEBCAL_API_KEY=
HOLIDAY_COUNTRIES=US,GB,CA,AU,PT,IN,JP,DE,FR,BR,MX,IT,ES,KR,NL,SE,NO,IE,NZ,ZA,PH
OPENWEATHER_API_KEY=
FINNHUB_API_KEY=
BANDSINTOWN_API_KEY=
TMDB_API_KEY=
# ---- Self-Hosted Services (optional) ----
LIBRETRANSLATE_URL=
# Scheduler times (24h UTC)
SCHEDULE_HOLIDAYS_HOUR=7
SCHEDULE_HOLIDAYS_MINUTE=0
SCHEDULE_RELEASES_HOUR=19
SCHEDULE_RELEASES_MINUTE=0
# Feature flags
FEATURE_SHADE=false
FEATURE_URL_PREVIEW=true
# Crypto reset (set to true to wipe and re-establish E2EE keys on next startup)
CRYPTO_RESET=false
# LLM passive classifier (requires Ollama — leave blank to disable)
OLLAMA_HOST=
OLLAMA_MODEL=
LLM_SAMPLE_RATE=0.15
LLM_SAMPLE_RATE=0.15 # 0.0-1.0, fraction of non-keyword messages to classify (1.0 = all)
# Rate limits (calls per user per day, 0 = unlimited)
RATELIMIT_WEATHER=5
# ---- Feature Flags ----
FEATURE_URL_PREVIEW=
FEATURE_SHADE=
FEATURE_TRIVIA=true # set to "false" to disable trivia
# ---- Rate Limits (per user per day) ----
RATELIMIT_TRANSLATE=20
RATELIMIT_CONCERTS=10
# Bot default city for concert digest and location-based features
BOT_DEFAULT_CITY=
# Trivia
TRIVIA_TIMEOUT_SECONDS=20