Added all of the existing code
This commit is contained in:
217
README.md
Normal file
217
README.md
Normal file
@@ -0,0 +1,217 @@
|
||||
# TechIRCd
|
||||
|
||||
A modern, high-performance IRC server written in Go with comprehensive RFC compliance and advanced features.
|
||||
|
||||
## Features
|
||||
|
||||
### 🚀 **Core IRC Protocol**
|
||||
- Full RFC 2812 compliance (Internet Relay Chat: Client Protocol)
|
||||
- User registration and authentication
|
||||
- Channel management with comprehensive modes
|
||||
- Private messaging and notices
|
||||
- **Ultra-flexible WHOIS system** with granular privacy controls
|
||||
- WHO and NAMES commands
|
||||
- Ping/Pong keepalive mechanism
|
||||
|
||||
### 🔍 **Revolutionary WHOIS System**
|
||||
- **Granular Privacy Controls**: Configure exactly what information is visible to everyone, operators, or only the user themselves
|
||||
- **User Modes Visibility**: Control who can see user modes (+i, +w, +s, etc.)
|
||||
- **SSL Status Display**: Show secure connection status
|
||||
- **Idle Time & Signon Time**: Configurable time information
|
||||
- **Real Host vs Masked Host**: Smart hostname display based on permissions
|
||||
- **Channel Privacy**: Hide secret/private channels with fine-grained control
|
||||
- **Operator Information**: Show operator class and privileges
|
||||
- **Services Integration**: Account name display for services
|
||||
- **Client Information**: Show IRC client details
|
||||
- **Custom Fields**: Add your own WHOIS fields
|
||||
- See [WHOIS Configuration Guide](docs/WHOIS_CONFIGURATION.md) for details
|
||||
|
||||
### 👑 **Advanced Channel Management**
|
||||
- **Operator Hierarchy**: Owners (~), Operators (@), Half-ops (%), Voice (+)
|
||||
- **Channel Modes**:
|
||||
- `+m` (moderated) - Only voiced users can speak
|
||||
- `+n` (no external messages)
|
||||
- `+t` (topic protection)
|
||||
- `+i` (invite only)
|
||||
- `+s` (secret channel)
|
||||
- `+p` (private channel)
|
||||
- `+k` (channel key/password)
|
||||
- `+l` (user limit)
|
||||
- `+b` (ban list)
|
||||
- **Extended Ban System**: Support for quiet mode (`~q:mask`) and other extended ban types
|
||||
|
||||
### 🔐 **IRC Operator Features**
|
||||
- Comprehensive operator authentication system
|
||||
- **Hierarchical Operator Classes** with rank-based permissions and inheritance
|
||||
- **Completely Customizable Rank Names** (Gaming, Corporate, Fantasy themes, etc.)
|
||||
- **Server Notice Masks (SNOmasks)**:
|
||||
- `+c` (connection notices)
|
||||
- `+k` (kill notices)
|
||||
- +o (oper notices)
|
||||
- +x (ban/quiet notices)
|
||||
- +f (flood notices)
|
||||
- +n (nick change notices)
|
||||
- +s (server notices)
|
||||
- +d (debug notices)
|
||||
- Operator commands:
|
||||
- KILL - Disconnect users
|
||||
- GLOBALNOTICE - Send notices to all users
|
||||
- OPERWALL - Send messages to all operators
|
||||
- WALLOPS - Send wallops messages
|
||||
- REHASH - Reload configuration
|
||||
- TRACE - Network trace information
|
||||
- GODMODE - Toggle ultimate channel override powers
|
||||
- STEALTH - Toggle invisibility to regular users
|
||||
- Services/admin commands:
|
||||
- CHGHOST - Change user's hostname
|
||||
- SVSNICK - Services force nickname change
|
||||
- SVSMODE - Services force mode change
|
||||
- SAMODE - Services admin mode change
|
||||
- SANICK - Services admin nickname change
|
||||
- SAKICK - Services admin kick
|
||||
- SAPART - Services admin part
|
||||
- SAJOIN - Services admin join
|
||||
- GLINE - Global network ban
|
||||
- ZLINE - IP address ban
|
||||
- KLINE - Local server ban
|
||||
- SHUN - Services shun (silent ignore)
|
||||
|
||||
### 👤 **User Modes**
|
||||
- `+i` (invisible) - Hide from WHO listings
|
||||
- `+w` (wallops) - Receive wallops messages
|
||||
- `+s` (server notices) - Receive server notices (opers only)
|
||||
- `+o` (operator) - IRC operator status
|
||||
- `+x` (host masking) - Hide real hostname
|
||||
- `+B` (bot) - Mark as a bot
|
||||
- `+z` (SSL) - Connected via SSL/TLS
|
||||
- `+r` (registered) - Registered with services
|
||||
|
||||
### 🛡️ **Security & Stability**
|
||||
- Advanced flood protection with operator exemption
|
||||
- Connection timeout management
|
||||
- Input validation and sanitization
|
||||
- Panic recovery and error handling
|
||||
- Resource monitoring and health checks
|
||||
- Graceful shutdown capabilities
|
||||
|
||||
### ⚡ **Unique Features (Not Found in Other IRCds)**
|
||||
|
||||
#### 🌟 **God Mode (+G)**
|
||||
- **Ultimate Channel Override**: Join any channel regardless of bans, limits, keys, or invite-only mode
|
||||
- **Kick Immunity**: Cannot be kicked by any user
|
||||
- **Mode Override**: Set any channel mode without operator privileges
|
||||
- **Complete Bypass**: Ignore all channel restrictions and limitations
|
||||
|
||||
#### 👻 **Stealth Mode (+S)**
|
||||
- **User Invisibility**: Completely hidden from regular users in WHO, NAMES, and WHOIS
|
||||
- **Operator Visibility**: Other operators can still see stealth users
|
||||
- **Covert Monitoring**: Watch channels without being detected
|
||||
- **Security Operations**: Investigate issues invisibly
|
||||
|
||||
#### 🎨 **Customizable Rank Names**
|
||||
- **Gaming Themes**: Cadet → Sergeant → Lieutenant → Captain → General
|
||||
- **Corporate Themes**: Intern → Associate → Manager → Director → CEO
|
||||
- **Fantasy Themes**: Apprentice → Guardian → Knight → Lord → King
|
||||
- **Unlimited Creativity**: Create any rank system you can imagine
|
||||
|
||||
#### 🔍 **Revolutionary WHOIS**
|
||||
- **Granular Privacy**: 15+ configurable information types
|
||||
- **Three-Tier Permissions**: Everyone/Operators/Self visibility controls
|
||||
- **Custom Fields**: Add your own WHOIS information
|
||||
- **Complete Flexibility**: Control every aspect of user information display
|
||||
|
||||
### 📊 **Monitoring & Logging**
|
||||
- Real-time health monitoring
|
||||
- Memory usage tracking
|
||||
- Goroutine count monitoring
|
||||
- Performance metrics logging
|
||||
- Configurable log levels and rotation
|
||||
- Private messaging
|
||||
- WHO/WHOIS commands
|
||||
- Configurable server settings
|
||||
- Extensible architecture
|
||||
- Ping/Pong keep-alive mechanism
|
||||
- Graceful shutdown handling
|
||||
|
||||
## Requirements
|
||||
|
||||
- Go 1.21 or higher
|
||||
|
||||
## Building
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
go mod tidy
|
||||
|
||||
# Build the server
|
||||
go run tools/build.go -build
|
||||
|
||||
# Or use the traditional method
|
||||
go build -o techircd
|
||||
```
|
||||
|
||||
## Build Options
|
||||
|
||||
The `tools/build.go` script provides several build options:
|
||||
|
||||
```bash
|
||||
# Build and run
|
||||
go run tools/build.go -run
|
||||
|
||||
# Run tests
|
||||
go run tools/build.go -test
|
||||
|
||||
# Format code
|
||||
go run tools/build.go -fmt
|
||||
|
||||
# Cross-platform builds
|
||||
go run tools/build.go -build-all
|
||||
|
||||
# Optimized release build
|
||||
go run tools/build.go -release
|
||||
|
||||
# Clean build artifacts
|
||||
go run tools/build.go -clean
|
||||
|
||||
# Show all options
|
||||
go run tools/build.go -help
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
./techircd
|
||||
```
|
||||
|
||||
The server will start on localhost:6667 by default. You can configure the host and port in `config.go`.
|
||||
|
||||
## Configuration
|
||||
|
||||
Edit `config.go` to customize:
|
||||
- Server host and port
|
||||
- Server name and description
|
||||
- Maximum connections
|
||||
- Ping timeout
|
||||
- Message of the Day (MOTD)
|
||||
|
||||
## Connecting
|
||||
|
||||
You can connect using any IRC client:
|
||||
```
|
||||
/server localhost 6667
|
||||
```
|
||||
|
||||
Or use the included test client:
|
||||
```bash
|
||||
go run test_client.go
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
- `main.go` - Entry point and server initialization
|
||||
- `server.go` - Main IRC server implementation with concurrent connection handling
|
||||
- `client.go` - Client connection handling and state management
|
||||
- `channel.go` - Channel management with thread-safe operations
|
||||
- `commands.go` - IRC command implementations (NICK, USER, JOIN, PART, etc.)
|
||||
- `config.go` - Server configuration structure
|
||||
- `test_client.go` - Simple test client for development
|
||||
Reference in New Issue
Block a user