Releases: nerdycraft/NerpyBot
v0.7.0 — Web Dashboard & WoW Crafting Board
New Features
Web Dashboard
- Phase 1: REST API foundation (#283)
- Phase 2: Full CRUD, UI polish, shared component refactors (#312)
- Phase 3: Operator monitoring dashboard (#317)
- Dashboard i18n with EN/DE locales (#328)
- Self-contained local test mode (#331)
- Support mode guild state, redaction, and UX improvements (#330)
- Legal pages (ToS, Privacy Policy, Impressum) with DSGVO compliance (#333)
- Restructured sidebar nav by module with Server Admin group (#352)
- Operator commands panel (#360)
WoW
- Crafting order board: recipe cache, housing flow, localized names, profession filtering (#336)
- Virtual categories: PvP, Raid Prep, Armor, Weapons, Profession, Other (#354)
- Gate recipe cache swap on sync completeness (#351)
Bot
- Configurable bot display name via
bot.name/NERPYBOT_NAME(#342) - Alembic migrations integrated into bot startup (#313)
Performance
- In-memory
GuildConfigCacheto eliminate redundant DB queries (#359) - Fix N+1 queries in language-refresh helpers (#366)
Fixes
- JWT session fixation via crafted URL fragments (#335)
- JWT token extraction path after Vue Router redirect (#338)
load_strings()called before registering persistent views (#358)- Autodeleter resilience and DB connection stability (#308)
- Route Alembic logs through bot logging infrastructure (#315)
Refactor
v0.6.2
v0.6.2 — Autodeleter resilience & WoW crafter mention
Patch release with a moderation hotfix and a WoW quality-of-life improvement.
Bug Fixes
- Improve autodeleter resilience and DB connection stability (#308) — The autodeleter background loop now handles Discord rate limits (HTTP 429) and transient database connection errors without crashing. Stale connections are recycled automatically, and the loop backs off gracefully on repeated failures instead of silently dying.
Features
- Crafter mention in crafting order completion DM (#305) — When a crafting order is fulfilled, the completion DM now @-mentions the crafter so they get a notification. Adds a new
crafter_idcolumn to the crafting order model and a migration (008) to support this.
Upgrade Notes
Run alembic upgrade head after deploying to apply migration 008_add_crafting_order_cleanup. No config changes required.
Full Changelog: v0.6.1...v0.6.2
v0.6.1
v0.6.1 — PostgreSQL sequence fix
Patch release fixing UniqueViolation errors on PostgreSQL instances that were migrated from SQLite.
Bug Fixes
- Fix PostgreSQL sequence desync after SQLite migration (#299) — Adds migration
007that resets all integer primary key sequences to the actual max ID in each table. Instances that imported data via SQLite bypass (e.g. using SQLite's raw dump withoutINSERTthrough sequences) would getUniqueViolationon the next natural INSERT. The migration is a no-op on SQLite and on fresh PostgreSQL installs.
Upgrade Notes
Run alembic upgrade head after deploying. No config changes or restarts beyond the normal upgrade procedure.
Full Changelog: v0.6.0...v0.6.1
v0.6.0
v0.6.0 — Slash Commands, i18n, and Applications
The biggest release yet. Every command is now a slash command, every module speaks multiple languages, and a new application form system lets servers run custom workflows entirely within Discord.
New Features
Application Form System (#222, #247, #251, #252, #256, #258, #259)
- Full application workflow: configurable forms, DM-based answer collection, reviewer channels with approve/deny buttons
- Thread-based reviews: each submission opens a thread on the review embed and pings configured reviewer roles
- Multi-role support for manager and reviewer roles
- Modal and message-ref input for description fields
- Fully localized DMs, button labels, and review strings
Internationalization (#235–#247)
- Multilingual string templating system with YAML locale files
- Every module localized: error handler, admin, music, tagging, league, leavemsg, rolemanage, reactionrole, reminder, moderation, wow, and application
- Adding a language is one file — drop
lang_<code>.yaml, restart the bot. Missing keys fall back to English.
Music Module Redesign (#274)
- Interactive now-playing embed in the voice channel with play/pause/skip/stop buttons, updated in real-time
- Playlist CRUD: create, list, show, and delete named playlists
- Smart scheduling loop with daily/weekly/monthly recurrence and timezone support
/reminder editfor modifying existing reminders- DST-aware next-fire-time computation
WoW Crafting Order Board (#250)
- Guild members can post and browse crafting requests
- Paginated profession mapping with Cooking added (#255)
- Improved account deduplication via union-find clustering (#249)
Slash Command Migration (#182, #194)
- 100% slash commands — every command converted from prefix to app commands
- Prefix commands restricted to DMs (
!synconly, for operators) - Autocomplete on DB-backed parameters: tags, reminders, realms (#197)
Infrastructure and Operations
- Full
NERPYBOT_*env var config — all keys settable via environment, overridingconfig.yaml(#271) - Typer CLI with
-d/--verbosity/-c/--versionflags (#271) - Single-stack Docker Compose (#271)
- Dynamic versioning via hatch-vcs — version derived from git tags, no manual bumps (#279)
- Always-restart on crash, removed
--auto-restartflag (#273) - Weighted random activity rotation (#267)
- Runtime module disable for operators (#207)
- Error notification throttle with operator suppression (#202)
- Channel permission validation before saving configs (#193)
Architecture and Refactoring
- Dropped MySQL/MariaDB support — SQLite + PostgreSQL only; psycopg3 replaces psycopg2 (#248, #231, #232)
- Removed search, random, and fun modules and their dependencies (#198)
- Semantic exception hierarchy:
NerpyExceptionbase with typed subclasses (#225) NerpyBotCogbase class withregister_before_loop(#214)- Consolidated audio utilities with shared queue mixin and embed-based pagination (#197)
- Split Docker builder stages with per-target CI path filtering (#265)
- Split CI workflows for clearer PR checks (#204)
- Pre-commit hooks for ruff and prettier (#262)
- Removed cli.py, consolidated Alembic config (#217)
- Moderation converted to GroupCog (#219)
- TextInput.label migrated to discord.ui.Label wrapper (#264)
Bug Fixes
- Fix duplicate WoW mount notifications from faction variant ID churn (#189, #205)
- Fix YouTube bot-check bypass via iOS player client (#253)
- Fix naive datetime handling from SQLite with UTC normalization (#257)
- Fix thread cleanup when deleting messages (#260)
- Fix PostgreSQL CheckConstraint quoting for application module (#233, #234)
- Fix application apply button label deferred assignment (#263)
- Suppress aiohttp ws_connect timeout deprecation (#266)
- Guard error handler response when interaction is already done (#224)
- Fix flaky reminder test (#223)
- Fix string-quoted numeric Discord IDs in config (#188)
Dependency Updates
- discord.py 2.6.4 → 2.7.1
- psycopg2 → psycopg3 (psycopg)
- ruff 0.15.0 → 0.15.4
- Removed: igdb-api-v4, twitchAPI, mysql-connector
Breaking Changes
- All prefix commands removed — use slash commands (
/command). Only!syncremains for operators in DMs. - MySQL/MariaDB no longer supported — migrate to PostgreSQL or use SQLite.
- search, random, and fun modules removed — these are gone.
- psycopg3 required for PostgreSQL — psycopg2 is no longer a dependency.
NERPYBOT_*env vars overrideconfig.yaml— existing setups are unaffected unless conflicting env vars are set.
Full Changelog: v0.5.0...v0.6.0
v0.5.0
🚀 v0.5.0 — Major Feature Release
A significant release bringing 6 new modules, a comprehensive test suite, security hardening, and a modernized infrastructure stack. This is the largest update since the project's inception.
✨ New Features
New Modules
- Reaction Roles (
reactionrole) — Self-service role assignment via message reactions (#164) - Delegated Role Management (
rolemanagement) — Allow designated users to manage roles without full admin (#165) - Leave Messages (
leavemsg) — Configurable announcements when members leave a server (#158) - WoW Guild News Tracking (
wow guildnews) — Automatic posting of guild activity (achievements, boss kills, items) to a Discord channel (#170) - Bot-Moderator Role (
modrole) — Configurable moderator role for delegating bot management without Discord admin perms (#166) - Debug Logging Toggle — Runtime debug logging toggle and
-dflag for debug without SQLAlchemy noise (#167)
Enhancements
- WoW Armory — Added
languageparameter and DM support for armory lookups (#168) - Ephemeral Admin Responses — Admin command responses are now ephemeral (only visible to the invoker)
- DM Handling — Improved fallback for commands that can't send ephemeral messages in prefix contexts (
send_hidden_message) - Help Command — Fixed help probing side effects; check functions are now safe during
!help
🧪 Testing & Quality
- Comprehensive Test Suite — Added 148 unit tests with pytest + pytest-asyncio (#157)
- CI Pipeline — Added pytest execution and CodeQL security scanning to GitHub Actions (#154)
- Return Type Hints — Added type annotations across all command methods (#156)
- Code Readability — Extracted duplicated patterns into reusable utilities (#155)
🔒 Security
- Fixed URL parameter injection vulnerability in API calls (#153)
- Fixed credential exposure risk in error messages (#153)
- CodeQL scanning added to CI pipeline
🏗️ Infrastructure
- Docker Compose orchestration for easy deployment (#163)
- Python 3.14 — Upgraded from Python 3.12 to 3.14 (Alpine base image)
- discord.py 2.6.4 — Upgraded from 2.5.2
- yt-dlp — Replaced deprecated
youtube-dlwith actively maintainedyt-dlp - openweather-wrapper — Switched to dedicated library for weather API
- Ruff — Replaced flake8 + black with Ruff for linting and formatting
- Dependabot — Added Docker and GitHub Actions ecosystems to automated updates
- Comprehensive documentation — Per-module docs in
docs/directory
📦 Dependency Updates
- discord.py 2.5.2 → 2.6.4
- pytest 8.4.1 → 9.0.2
- pytest-cov 6.2.1 → 7.0.0
- matplotlib 3.10.3 → 3.10.8
- requests-cache 1.2.1 → 1.3.0
- humanize 4.12.3 → 4.15.0
- alembic 1.16.2 → 1.18.3
- ruff 0.14.14 → 0.15.0
- pillow 12.1.0 → 12.1.1
- pyyaml 6.0.2 → 6.0.3
- idna 3.10 → 3.11
- yt-dlp 2026.1.31 → 2026.2.4
⚠️ Breaking Changes
- Python ≥3.13 required — Minimum Python version raised from 3.12 to 3.13; Docker image now uses 3.14
- youtube-dl replaced with yt-dlp — If you have custom scripts referencing youtube-dl, update them
- Dependency version pins relaxed — Most dependencies no longer have upper-bound pins in
pyproject.toml; versions are locked viauv.lock
Full Changelog: v0.4.14...v0.5.0
v0.4.14
What's Changed
- F audio handling by @karaktaka in #126
- Manual sync command by @karaktaka in #127
- use different wow api lib by @karaktaka in #128
- Chore/update blizz api by @karaktaka in #129
- Chore/workflow improvement by @karaktaka in #130
Full Changelog: v0.4.13...v0.4.14
V0.4.13
v0.4.12
What's Changed
- F improvements by @karaktaka in #123
- add pynacl by @karaktaka in #124
Full Changelog: v0.4.11...v0.4.12
v0.4.11
What's Changed
- Bump requests from 2.31.0 to 2.32.0 by @dependabot in #110
- Bump pymysql from 1.1.0 to 1.1.1 by @dependabot in #111
- Bump setuptools from 69.5.1 to 70.0.0 by @dependabot in #114
- Bump certifi from 2024.2.2 to 2024.7.4 by @dependabot in #113
- Bump urllib3 from 2.2.1 to 2.2.2 by @dependabot in #112
- Bump aiohttp from 3.9.5 to 3.10.2 by @dependabot in #115
- Bump aiohttp from 3.10.2 to 3.10.11 by @dependabot in #116
- Update run config by @karaktaka in #117
- update aiohttp by @karaktaka in #118
- Bump requests from 2.32.3 to 2.32.4 by @dependabot in #119
- Bump urllib3 from 2.4.0 to 2.5.0 by @dependabot in #121
- Bump protobuf from 5.29.1 to 5.29.5 by @dependabot in #120
- F migrate to uv by @karaktaka in #122
Full Changelog: v0.4.10...v0.4.11
v0.4.10
What's Changed
- remove release by @karaktaka in #87
- Update build.yml by @karaktaka in #88
- Update build.yml by @karaktaka in #91
- Update database_migrations.Dockerfile by @karaktaka in #92
- update reminder by @karaktaka in #90
- Add useful logs by @karaktaka in #89
- F fix database migrations container by @karaktaka in #93
- F fix database migrations container by @karaktaka in #94
- Switch to Pipenv by @karaktaka in #97
- update github actions by @karaktaka in #98
- Updated Package Versions by @karaktaka in #99
- Update Dockerfile by @karaktaka in #101
- Bump idna from 3.6 to 3.7 by @dependabot in #102
- Bump aiohttp from 3.9.3 to 3.9.4 by @dependabot in #103
- Fix Models by @karaktaka in #104
- F database models by @karaktaka in #105
- Bump idna from 3.6 to 3.7 by @dependabot in #106
- Bump aiohttp from 3.9.3 to 3.9.4 by @dependabot in #107
- Break out branch by @karaktaka in #108
Full Changelog: v0.4.9...v0.4.10