Overview
Fire is built on top of Discord.js and Discord Akairo, using a modular architecture with clear separation of concerns.Core Architecture
Fire Client (lib/Fire.ts)
TheFire class extends AkairoClient and serves as the main bot instance.
lib/Fire.ts:99-159
Key Components
Handlers
Fire uses several handlers to manage different aspects: CommandHandler (lib/Fire.ts:288-323)- Manages all bot commands
- Handles prefix resolution
- Manages cooldowns and permissions
- Supports both slash commands and text commands
lib/Fire.ts:288-322
- Manages background modules
- Handles module lifecycle (init/unload)
- Manages event listeners
- Handles Discord gateway events
- Command execution guards
- Pre-execution checks
Database Connection
PostgreSQL connection management (lib/Fire.ts:440-471):lib/Fire.ts:440-458
Interaction Handlers
Fire supports various interaction types:- Button Handlers: One-time and persistent button interactions
- Modal Handlers: Form submission handlers
- Dropdown Handlers: Select menu interactions
- Nonce Handlers: Gateway event correlation
Command Architecture
Command Base Class (lib/util/command.ts)
All commands extend theCommand class:
lib/util/command.ts:174-266
Command Lifecycle
- Registration: Commands auto-load from
src/commands/directories - Initialization:
init()called when loaded (lib/util/command.ts:288-300) - Execution: Either
exec()for text orrun()for slash commands - Unload:
unload()called when removed (lib/util/command.ts:302-314)
Slash Command Support
Commands can be registered as slash commands (lib/util/command.ts:365-416):lib/util/command.ts:365-393
Module Architecture
Module Base Class (lib/util/module.ts)
Modules handle background tasks and stateful operations:lib/util/module.ts:4-19
Module Examples
AetherStats Module (src/modules/aetherstats.ts:6-13)- Collects and sends statistics
- Periodic tasks via intervals
src/modules/aetherstats.ts:6-13
- Content filtering system
- Link detection and moderation
src/modules/filters.ts:37-60
Argument System
Custom Type Casters
Fire implements custom argument types (lib/Fire.ts:350-381):lib/Fire.ts:350-381
Slash Command Type Mapping
Type conversion for slash commands (lib/util/command.ts:47-88):lib/util/command.ts:47-88
Internationalization (i18n)
Fire uses i18next for multi-language support (lib/Fire.ts:411-424):lib/Fire.ts:411-424
Error Handling
Sentry Integration
Production error tracking (lib/Fire.ts:245-251):lib/Fire.ts:245-251
Build System
TypeScript Configuration
tsconfig.json:2-19
Build Scripts
package.json:14-20