NadekoBot 7.1

What changed in NadekoBot 7.1: 24 releases, 20 Mar 2026 to 17 Apr 2026. In total 31 added, 33 changed, 45 fixed, 5 removed.

Added

  • .waifulb alias for .wlb (waifu leaderboard)
  • useembed config option for AI agent to control whether responses are sent as embeds or plain text

Changed

  • AI agent messages that exceed Discord character limits are now split across multiple messages at word boundaries, instead of being truncated
  • Currency drops (plant/pick) now display the pick instructions on a new blockquoted line for better readability

Fixed

  • .config aiagent enabled true no longer reverts to false when AI credentials are not set; a warning is logged instead
  • "Waifu lb seen" quest objective now correctly tracks the waifu leaderboard command

Added

  • User-level DM notification system with .notify command - users can toggle individual notification types on/off via interactive buttons
  • Club application accepted DM notification when your application is approved
  • .queuefind (.qfind, .qf) command to search the music queue by track title, shows up to 10 matches with queue positions

Changed

Fixed

  • Various URL validation and input sanitization fixes
  • Animal race refund, giveaway winner selection, transaction cleanup
  • yt-dlp process handling and connection pooling
  • Command handler config now applies without restart
  • ConsoleOutputType.None now actually suppresses logs
  • Music queue track links now display correctly as clickable links in .lq, .np, and other music commands
For self-hosters (3)
  • Lock-free copy-on-write for custom behaviors on message hot path
  • Nullable annotations on command handler and behavior interfaces
  • Use ArgumentList for yt-dlp/ffmpeg/ffprobe process calls

Changed

  • Add 15s timeout for RSS feed fetching
  • .wlist now shows buy price and total backed separately
  • Voice XP batch allocation cleanup

Fixed

  • Web search, club icons, radio resolver protection
  • Encode user input in Osu, weather, movie, dictionary API queries
  • Sanitize shell-relevant characters in yt-dlp arguments
  • Enforce file extension whitelist in local track resolver
  • pg to sqlite migration
  • Permission checker failure
  • Guild perm checks
  • TicTacToe race condition
For self-hosters (1)
  • Use IHttpClientFactory for radio resolver

Changed

  • Local music track enqueue no longer spawns ffprobe per file; duration is resolved lazily when the track plays and cached in memory

Removed

  • PostgreSQL and MySQL database support. Existing PostgreSQL data is automatically migrated to SQLite on first startup after update

Added

  • Brave Search provider for .search and .image commands (set webSearchEngine: Brave or imgSearchEngine: Brave in searches.yml, requires braveSearchApiKey in creds.yml)
  • DuckDuckGo scrape search provider for .search and .image commands (set webSearchEngine: DuckDuckGo or imgSearchEngine: DuckDuckGo in searches.yml, no API key needed)
  • Bunch of ai agent stuff
    • Custom HTTP headers support in AI agent config (e.g. X-OpenRouter-Title)
    • models fallback list of models - model takes precedence
  • Per-server AI agent skills: named, toggleable instruction slots that guide agent behavior
    • .agentskilladd, .agentskillremove, .agentskilltoggle, .agentskilllist (admin-only)
  • .patrons owner-only command to list all active patrons grouped by tier
  • .honeypot now supports punishment modes: .honeypot ban for permanent ban, .honeypot softban (default) for ban + unban
  • .credsreload owner command to hot-reload credentials from data/creds.yml
  • AI agent can now ask clarifying questions before acting (ask_user tool)
  • .log AvatarUpdated, .log UsernameUpdated, .log NicknameUpdated for fine-grained control over user update logging
    • Existing UserUpdated subscribers are auto-migrated to all three new types
    • UserUpdated renamed to RolesUpdated (now only logs role changes)

Changed

  • Improved userrole command descriptions

Fixed

  • .config command could not get or set any camelCase properties (e.g. webEngine, imgEngine, ytProvider)
  • AI agent channel history no longer breaks when messages contain Discord emojis, mentions, or other angle-bracket markup
  • Music queue and now-playing embeds no longer break when video titles contain markdown characters (*, _, ~, etc.)
For self-hosters (1)
  • Removed unused file watcher on creds.yml

Added

  • .log Honeypot to toggle honeypot logging to a specific channel
    • Honeypot bans/unbans no longer trigger UserBanned/UserUnbanned events for .log

Removed

  • Removed the manager purchase buy window restriction (managers can now be purchased at any time during a cycle since payouts use cycle-start snapshots)
For self-hosters (2)
  • Replaced LogSetting wide table with LogChannel and LogIgnore tables
  • Added [PatronOnly] attribute to require active patron status, shown with a heart icon in .cmds and as a requirement in .h
    • No commands are patron only right now

Added

  • .logignore now accepts category channels - all channels within an ignored category are excluded from logging

Changed

  • .reroe parameter order changed to match .reroa convention: messageId, emote, role (was messageId, role, emote)
  • Expressions with a - response and reactions set will now react to the trigger message instead of being fully suppressed

Fixed

  • Fixed .reroe not working with sqlite

Added

  • New data/utility.yml config file with configurable per-server limits for repeaters, scheduled commands, and live channels
  • Added .xpt command - text-based embed alternative to .xp image card
  • Added .reroe command to change the emote for an existing reaction role entry

Changed

  • .rerorm now accepts an optional role to remove a specific role's entries from a reaction role message (with paginated selection when multiple emotes map to the same role)

Fixed

  • Fixed XP formula defaulting to (0, 0) instead of (9, 27)
For self-hosters (2)
  • Reworked config system: .Data now returns a volatile reference (zero allocations) instead of cloning on every read. Writes use Lock + atomic swap. Removed [Cloneable] and ICloneable<T> from all config types. Fixed double-publish bug in SetSetting.
  • Removed expression tree traversal and PropertyInfo reflection from AddParsedProp. All config property access now uses direct static lambdas.

Added

Changed

  • Console log messages now say "intercepted" instead of "blocked" for early command interception
  • .exo now requires confirmation before toggling expression override mode, as it is a potentially highly destructive action
  • All confirmation prompts now use interactive buttons instead of typing yes/no
  • Owner DM forwarding is now always on. Each owner individually opts out via .fw. Removed .fwtoall.
  • .fwtoch now notifies all non-opted-out owners when channel forwarding is enabled

Changed

  • global only: Ai agent is now owner + patron (still alpha)

Fixed

  • Fixed initial database creation broken in the last patch
For self-hosters (3)
  • Upped to .net9
  • Replaced all object lock fields with System.Threading.Lock for ~25% faster locking
  • Eliminated allocating string normalization (ToLower/ToUpper) in type readers, config service, and command lookup by using case-insensitive comparers

Added

  • .exo / .exoverride - toggle expression override mode per server. When enabled, adding an expression with a trigger that already exists will replace the old one(s) instead of creating a duplicate.
  • .exs added - searches for expressions based on trigger or content

Changed

  • .exe will now accept either a trigger or id
    • if there are multiple expressions with the same trigger you will get a paginated prompt to pick which one to edit
  • Old .exs (show) was renamed to .exp (print).
    • .exs is now search.

Fixed

  • .inrole now works with multi-word role names without having to add double quotes

Changed

  • .exd will now accept either a trigger or id
    • if there are multiple expressions with the same trigger you will get a paginated prompt to pick which one to delete

Fixed

  • .onnx embedding for ai agent will be properly cached and won't re-do it every startup unless commands changed
  • Invidious playlist loading now uses the correct API endpoint
  • Fixed Invidious search queries with special characters

Added

  • Fish items can now have level req.
  • .xpformula / .xpf - configure the per-guild XP leveling curve (a = slope, c = base cost)

Changed

  • Music will start playing faster
  • Music now uses high resolution timers on all 3 platforms (meaning less lag and less cpu usage)
  • Fishing spot coins are now used with .fiuse like other items and give you a random biome

Fixed

  • Ai agent will now auto-disable if no api key is provided

Removed

  • .fishpch removed

Added

  • Audio file caching system saves opus data to disk, config max cache size in data/music.yml
  • Opus passthrough when available

Changed

  • Music quality presets simplified High / Medium only.

Fixed

  • Voice gateway reconnect loop spamming logs
  • Hangman message never reposting

Fixed

  • Dragging the bot to a different music channel while music is playing will now correctly keep the music going

Changed

  • Increased RSS feed error threshold before auto-removal from 100 to 500
  • RSS feed fetcher now sends a modern browser User-Agent header to avoid blocks from Reddit and Cloudflare-protected sites

Fixed

  • More music/voice edge-case fixes
  • Fixed RSS feeds being silently deleted when the bot was kicked from a guild that shared a feed URL with other guilds
  • Fixed RSS feed error counter being incremented on Discord send failures instead of only on fetch failures
  • RSS feeds now send a notification to the channel when a feed is auto-removed due to repeated failures

Fixed

  • Music fixes, logging
  • Fixed AI command search crashing on startup on some systems due to ONNX runtime thread affinity errors

Added

  • .ncnuke owner-only command to reset all pixels owned by a specified user
  • .shardstats now also show uptime over last 1 hour

Changed

  • .ncpixel now shows the pixel owner's name and ID

Fixed

  • Fixed music going silent when someone joins/leaves the voice channel.

Removed

  • GrpcApi removed. Bloat.
For self-hosters (1)
  • Fixed build warnings

Added

  • New AI agent system - beta, owner only for now (replaces chatterbot/cleverbot/nadeko ai)
  • .notify now supports fishcurrency event to track when users fish out currency

Changed

  • Reorganized Administration module to fix .cmds admin exceeding discord's 25-option limit
  • gptApiKey in creds.yml renamed to aiApiKey (auto-migrated on startup)
  • Patrons now get 3 waifu actions per cycle (hug/kiss/pat/nom)

Fixed

  • Fixed .masskick actually banning users instead of kicking them
  • Fixed some waifu console errors
  • Countless command strings fixed

Removed

  • Chatterbot/cleverbot and old nadekoAi have been removed in favor of the new ai agent system