Add comprehensive Support cog that automatically disables and replaces Red's built-in contact and dm commands with enhanced, feature-rich versions. Features: - Command override mechanism (disables core commands on load, restores on unload) - Multi-category support system with dedicated channels - Custom emojis, greetings, and descriptions per category - User blocking/unblocking system - Comprehensive logging to dedicated log channel - Anonymous mode for staff replies - Enhanced embed formatting - Category selection dropdown UI - Staff control buttons (Close Thread, Block User) - Reply modal for staff responses - Background thread cleanup task Commands: - [p]contact - Enhanced contact command (DM only) - [p]dm - Enhanced DM command with logging - [p]supportset - 15 admin configuration commands Documentation: - README.md - Full documentation (7.9K) - QUICKSTART.md - Quick setup guide (2.5K) - EXAMPLES.md - Configuration examples (8.1K) - TECHNICAL.md - Technical docs (8.6K) - CHANGELOG.md - Version history - test_override.py - Override mechanism reference Technical: - 625 lines of code - 33 async functions - Full type hints - Config-based data storage - Red 3.5.0+ compatible - Follows NexusCore patterns Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
3.9 KiB
3.9 KiB
Changelog
All notable changes to the Support cog will be documented in this file.
[1.0.0] - 2026-06-12
Initial Release
Core Features
- ✅ Replaces Red's built-in
contactcommand with enhanced version - ✅ Replaces Red's built-in
dmcommand with enhanced version - ✅ Automatic command override system (disables core commands on load)
- ✅ Automatic restoration (re-enables core commands on unload)
Category System
- Multiple support categories with dedicated channels
- Custom emojis per category
- Custom descriptions per category
- Custom greetings per category
- Category selection dropdown UI
- Default category setting
- Optional/required category selection
User Features
[p]contact <message>- Send messages to staff from DMs- Category selection (if multiple categories configured)
- Custom greeting messages
- Block status checking
- Last contact tracking
Staff Features
[p]dm <user> <message>- Enhanced DM system- Rich user information in messages (roles, join date, ID)
- Embed formatting for professional appearance
- Anonymous mode support
- Logging to dedicated log channel
Admin Commands
[p]supportset enable/disable- Toggle system[p]supportset addcategory- Create categories[p]supportset removecategory- Remove categories[p]supportset setemoji- Set category emojis[p]supportset setgreeting- Set category greetings[p]supportset defaultcategory- Set default category[p]supportset logchannel- Configure logging[p]supportset anonymous- Toggle anonymous mode[p]supportset requirecategory- Require category selection[p]supportset embed- Toggle embed formatting[p]supportset showinfo- Toggle author info display[p]supportset list- View all settings[p]supportset block/unblock- User blocking
UI Components
- Category selection dropdown with emojis and descriptions
- Support control buttons (Close Thread, Block User)
- Reply modal for staff responses
- Persistent views with custom IDs
Configuration
- Per-guild settings
- Per-user settings (blocked status, preferences)
- Active thread tracking
- Comprehensive logging system
Technical
- Full async/await implementation
- Background thread cleanup task
- Config-based data storage
- Type hints throughout
- Error handling for all Discord API calls
- Permission validation
- Red 3.5.0+ compatibility
Documentation
- README.md - Full documentation
- QUICKSTART.md - Quick setup guide
- EXAMPLES.md - Configuration examples
- TECHNICAL.md - Technical documentation
- CHANGELOG.md - Version history
Command Override Implementation
The cog uses a clean override mechanism:
async def _disable_core_commands(self):
"""Disable Red's built-in contact and dm commands."""
core_cog = self.bot.get_cog("Core")
commands_to_disable = ["contact", "dm"]
for cmd_name in commands_to_disable:
cmd = self.bot.get_command(cmd_name)
if cmd and cmd.cog_name == "Core":
cmd.enabled = False
Known Limitations
- Users must be in the server to use contact (by design)
- DMs must be enabled for user to receive replies
- Maximum 25 categories (Discord dropdown limit)
- Thread cleanup runs every 5 minutes (configurable in code)
Future Considerations
Potential features for future versions:
- Rate limiting
- Priority queues
- Auto-responses
- Ticket numbers
- Transcript generation
- Staff assignments
- Analytics
Version Numbering
This project follows Semantic Versioning:
- MAJOR version for incompatible API changes
- MINOR version for new functionality in a backward compatible manner
- PATCH version for backward compatible bug fixes
Release Notes Format
Each version includes:
- Added - New features
- Changed - Changes to existing functionality
- Deprecated - Soon-to-be removed features
- Removed - Removed features
- Fixed - Bug fixes
- Security - Security vulnerability fixes