Moderation & logging:
- cleanban now collects all messages before banning and attaches them as a
.txt audit log file via the member_ban log channel
- purgememberall restricted to server owner only (nuke protection)
- unban, lock, unlock, spam ban-button, and manual infraction deletes all
now write to the DB infractions table and post to the mod log
- new log types (channel_lock, infraction_modify, cleanban) added and seeded
to route to the main mod log channel (982644273960873994)
Bug fixes:
- unban: mod log no longer fires on failure (missing return added)
- mute: fixed DB connection leaks and silent unmute failures in
schedule_unmute and check_mutes (try/finally + proper error logging)
- suggest: fixed AttributeError crash when original_embed is None and
IndexError risk on set_field_at calls without field count guards
- ban/cleanban: removed isinstance(user, discord.User) guard that silently
prevented DMs from ever being sent to in-server members
- cleanban: wrapped collect_status.delete() in try/except
- commands/infractions: fixed DB connection leak with try/finally
- events/botban: silent ban failure now logs error instead of swallowing it
Minesweeper:
- track detonated_cell on mine hit; show 💥 on the clicked mine and 💣
on all others when the board is revealed on loss
Emote credits:
- new /emote_credits_pending command: shows the user their own unreviewed
submissions; admins can pass all:True to see the full pending queue
Code quality:
- comprehensive docstrings and inline comments added across all cogs,
events, commands, utils, and supporting modules
ping protect: use pronoun roles in disabled-ping replies
chore: remove stray =5.0 file, clean up constants
emote credits:
- Add /emote_credits_resolve — scans credits where artist starts with
"@", fuzzes against guild members (username, global_name,
display_name), rewrites matches as <@id> mentions; reports resolved
vs not-found in chunked ephemeral output
ping protect:
- Add _get_subject_pronoun() — reads pronoun roles (he/him, she/her,
it/its) to return the correct subject pronoun
- Add _get_verb() — returns "has" or "have" to match
- Reply now reads e.g. "She has pings disabled" instead of always
"they have pings disabled"
chore:
- Delete =5.0 (stray file from unquoted pip install shell redirect)
- Remove unused ARG channel ID constants from utils/constants.py