Skip to content

Commit 745447e

Browse files
chore: modularize command categories
1 parent 70979ca commit 745447e

File tree

6 files changed

+1419
-4
lines changed

6 files changed

+1419
-4
lines changed

COG_MODULARIZATION.md

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# GitCord Cog Modularization
2+
3+
This document describes the modularization of the original `general.py` cog into separate, focused cog files for better organization and maintainability.
4+
5+
## Overview
6+
7+
The original `general.py` file contained 1196 lines with mixed functionality. It has been split into four focused cog files:
8+
9+
1. **`admin.py`** - Administrative Commands
10+
2. **`channels.py`** - Channel Management Commands
11+
3. **`utility.py`** - Basic Utility Commands
12+
4. **`help.py`** - Help System
13+
14+
## Cog Breakdown
15+
16+
### 1. Admin Cog (`admin.py`)
17+
**Purpose**: Administrative utility commands requiring elevated permissions.
18+
19+
**Commands**:
20+
- `!fetchurl <url>` (prefix) - Fetch and display text content from URLs
21+
- `/fetchurl <url>` (slash) - Slash command version of fetchurl
22+
- `!synccommands` (prefix) - Manually sync slash commands
23+
- `/synccommands` (slash) - Slash command version of synccommands
24+
25+
**Permissions**: Administrator level required for all commands.
26+
27+
**Error Handling**: Comprehensive error handlers for permission checks, network errors, and Discord API errors.
28+
29+
### 2. Channels Cog (`channels.py`)
30+
**Purpose**: Channel and category management commands.
31+
32+
**Commands**:
33+
- `!createchannel` (prefix) - Create a single channel from YAML configuration
34+
- `!createcategory` (prefix) - Create a category and its channels from YAML
35+
- `/createcategory [yaml_path]` (slash) - Slash command version with optional YAML path
36+
37+
**Permissions**: Manage Channels permission required.
38+
39+
**Features**:
40+
- YAML-based channel/category creation
41+
- Incremental updates for existing categories
42+
- Channel deletion logic via DeleteExtraChannelsView
43+
- Comprehensive error handling
44+
45+
### 3. Utility Cog (`utility.py`)
46+
**Purpose**: Basic utility commands for general use.
47+
48+
**Commands**:
49+
- `!hello` (prefix) - Simple greeting command
50+
- `!ping` (prefix) - Check bot latency
51+
- `/slashping` (slash) - Slash command latency check
52+
53+
**Permissions**: No special permissions required.
54+
55+
**Error Handling**: Basic error handling for utility commands.
56+
57+
### 4. Help Cog (`help.py`)
58+
**Purpose**: Help system and documentation links.
59+
60+
**Commands**:
61+
- `!help` (prefix) - Show help information and documentation links
62+
- `/help` (slash) - Slash command version of help
63+
64+
**Features**:
65+
- Comprehensive help content
66+
- Documentation links to GitHub Wiki
67+
- Quick links to repository, issues, roadmap
68+
- Security policy links
69+
70+
## File Structure
71+
72+
```
73+
src/gitcord/cogs/
74+
├── __init__.py
75+
├── admin.py # Administrative commands
76+
├── channels.py # Channel management
77+
├── utility.py # Basic utilities
78+
├── help.py # Help system
79+
└── general.py # Original file (can be removed)
80+
```
81+
82+
## Bot Integration
83+
84+
The `bot.py` file has been updated to load the new modularized cogs:
85+
86+
```python
87+
async def _load_cogs(self) -> None:
88+
"""Load all bot cogs."""
89+
# Load the modularized cogs
90+
await self.load_extension("gitcord.cogs.admin")
91+
await self.load_extension("gitcord.cogs.channels")
92+
await self.load_extension("gitcord.cogs.utility")
93+
await self.load_extension("gitcord.cogs.help")
94+
logger.info("Loaded all modularized cogs")
95+
```
96+
97+
## Benefits of Modularization
98+
99+
1. **Separation of Concerns**: Each cog has a specific purpose and responsibility
100+
2. **Maintainability**: Easier to find and modify specific functionality
101+
3. **Scalability**: New cogs can be added without affecting existing ones
102+
4. **Code Organization**: Related commands are grouped together
103+
5. **Testing**: Individual cogs can be tested in isolation
104+
6. **Documentation**: Each cog can have its own documentation
105+
106+
## Migration Notes
107+
108+
- All original functionality has been preserved
109+
- Command names and behavior remain the same
110+
- Error handling has been maintained
111+
- Permission requirements are unchanged
112+
- The original `general.py` file can be safely removed after testing
113+
114+
## Future Enhancements
115+
116+
- Each cog can be extended independently
117+
- New cogs can be added for additional functionality (e.g., `git.py`, `moderation.py`)
118+
- Cog-specific configuration can be implemented
119+
- Individual cog reloading can be added for development
120+
121+
## Testing
122+
123+
To test the modularization:
124+
125+
1. Ensure all cogs load without errors
126+
2. Verify all commands work as expected
127+
3. Check that error handling functions properly
128+
4. Confirm permission checks work correctly
129+
5. Test both prefix and slash command variants
130+
131+
The modularization maintains full backward compatibility while providing a cleaner, more maintainable codebase structure.

src/gitcord/bot.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,15 @@ async def setup_hook(self) -> None:
4444

4545
async def _load_cogs(self) -> None:
4646
"""Load all bot cogs."""
47-
# Load the general cog
48-
await self.load_extension("gitcord.cogs.general")
49-
logger.info("Loaded general cog")
47+
# Load the modularized cogs
48+
await self.load_extension("gitcord.cogs.admin")
49+
await self.load_extension("gitcord.cogs.channels")
50+
await self.load_extension("gitcord.cogs.utility")
51+
await self.load_extension("gitcord.cogs.help")
52+
logger.info("Loaded all modularized cogs")
5053

5154
# Add more cogs here as they are created
5255
# await self.load_extension("gitcord.cogs.git")
53-
# await self.load_extension("gitcord.cogs.admin")
5456

5557
async def on_command_error(self, context, error): # pylint: disable=arguments-differ
5658
"""Global command error handler."""

0 commit comments

Comments
 (0)