Skip to content
This repository was archived by the owner on Apr 6, 2026. It is now read-only.

Releases: nerdycraft/NerpyBot

v0.7.0 — Web Dashboard & WoW Crafting Board

19 Mar 18:38
3e2f132

Choose a tag to compare

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 GuildConfigCache to 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

  • Bot modules restructured to mirror dashboard sidebar (#357)
  • Casual gaming tone across all locale strings (#350)

v0.6.2

10 Mar 10:30
1061767

Choose a tag to compare

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_id column 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

08 Mar 11:01
99d9737

Choose a tag to compare

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 007 that 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 without INSERT through sequences) would get UniqueViolation on 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

05 Mar 13:14
2d75996

Choose a tag to compare

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

Reminder Rewrite (#199, #209)

  • Smart scheduling loop with daily/weekly/monthly recurrence and timezone support
  • /reminder edit for 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 (!sync only, for operators)
  • Autocomplete on DB-backed parameters: tags, reminders, realms (#197)

Infrastructure and Operations

  • Full NERPYBOT_* env var config — all keys settable via environment, overriding config.yaml (#271)
  • Typer CLI with -d/--verbosity/-c/--version flags (#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-restart flag (#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: NerpyException base with typed subclasses (#225)
  • NerpyBotCog base class with register_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 !sync remains 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 override config.yaml — existing setups are unaffected unless conflicting env vars are set.

Full Changelog: v0.5.0...v0.6.0

v0.5.0

14 Feb 22:22

Choose a tag to compare

🚀 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 -d flag for debug without SQLAlchemy noise (#167)

Enhancements

  • WoW Armory — Added language parameter 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-dl with actively maintained yt-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 via uv.lock

Full Changelog: v0.4.14...v0.5.0

v0.4.14

01 Aug 12:47

Choose a tag to compare

What's Changed

Full Changelog: v0.4.13...v0.4.14

V0.4.13

05 Jul 19:34
c2e699d

Choose a tag to compare

What's Changed

Full Changelog: v0.4.12...v0.4.13

v0.4.12

05 Jul 18:51
ea874de

Choose a tag to compare

What's Changed

Full Changelog: v0.4.11...v0.4.12

v0.4.11

05 Jul 13:04
32b7055

Choose a tag to compare

What's Changed

Full Changelog: v0.4.10...v0.4.11

v0.4.10

06 May 10:23
5ae19e5

Choose a tag to compare

What's Changed

Full Changelog: v0.4.9...v0.4.10