Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/devjhoan/absolet/llms.txt

Use this file to discover all available pages before exploring further.

Absolet is a self-hosted, general-purpose Discord bot designed for community server owners who want full control over their bot’s data, features, and behavior. Rather than inviting a third-party service, you run Absolet on your own infrastructure — giving you complete ownership of your configuration, your database, and every interaction your members have with it. Built on TypeScript and discord.js v14, it ships with a broad feature set out of the box while remaining straightforward to configure through two YAML files.

Features

Absolet covers the most common needs of an active Discord community. Each feature area is independently configurable and can be enabled or disabled per-command in config/commands.yml.

🎫 Tickets

Create, manage, and transcript support tickets. Staff can claim, close, open, and add or remove members from ticket channels.

🔨 Moderation

Ban, kick, warn, and mute members. Manage announcements, snipe deleted messages, and keep a staff history log.

💰 Economy

Full server economy with a wallet and bank, daily and weekly rewards, work cooldowns, rob mechanics, a shop, and admin money management.

⭐ Levels

XP-based levelling system with a rank card generated via @napi-rs/canvas. Admins can give, set, or remove XP and levels directly.

🎵 Music

Full-featured music player powered by DisTube with Spotify support. Play, skip, pause, resume, adjust volume, and more from voice channels.

🎉 Giveaways

Create and manage giveaways with automatic winner selection powered by discord-giveaways.

✅ Verification

Gate access to your server with a configurable verification step before members can interact with the rest of your channels.

🏷️ Reaction Roles

Let members self-assign roles by reacting to messages, keeping role management hands-off for your staff team.

Tech Stack

Absolet is built with a modern, type-safe toolchain. The key libraries and their versions are pinned in package.json:
LibraryVersionPurpose
typescript5.3.3Language and type safety
discord.js14.11.0Discord API client
distube^4.0.4Music playback engine
@distube/spotify^1.5.1Spotify URL resolution for DisTube
mongoose^7.4.2MongoDB object modelling
discord-giveaways^6.0.1Giveaway lifecycle management
discord-backup^3.3.2Server backup and restore
@napi-rs/canvas^0.1.39Rank card and image generation
discord-html-transcripts^3.1.3HTML ticket transcripts
js-yaml4.1.0YAML config file parsing
glob8.0.3File discovery for events, commands, and addons
ms^2.1.3Human-readable duration parsing
The project is run with Bun, which handles TypeScript execution directly without a separate compile step during development.

Architecture Overview

Absolet’s core is the ExtendedClient class, which extends discord.js’s Client and adds all bot-specific collections and logic.
src/
├── index.ts              # Entry point — instantiates ExtendedClient and calls start()
├── structures/
│   ├── Client.ts         # ExtendedClient: config loading, event/command/addon wiring
│   └── Giveaway.ts       # Extended giveaway manager
├── commands/             # Slash command files, discovered via glob
├── events/               # Discord event handlers, discovered via glob
├── addons/               # Optional addon modules (absolet-addons)
├── models/               # Mongoose schemas (Guild, Poll, Roles, Starboard, …)
├── helpers/              # Utilities: Logger, changeStatus, mongo, canvas assets
└── typings/              # TypeScript interfaces for Config, Command, Event, …
On startup, ExtendedClient.start() runs through the following sequence:
  1. Login — connects to Discord using the token from config/config.yml.
  2. Database — establishes a Mongoose connection using the MongoDB URI.
  3. Events — dynamically loads every file under src/events/** via glob and registers them with client.on().
  4. Addons — loads any addon modules found under src/addons/**/index.ts, registering their commands and events.
  5. Commands — loads all files under src/commands/**, filtering out any commands with Enabled: false in config/commands.yml.
  6. Register — syncs the loaded commands to Discord’s application command API if the count has changed.
  7. Activity — begins cycling through the bot statuses defined in ActivitySettings.
Config files (config/config.yml, config/commands.yml, config/messages.yml) are read synchronously at class instantiation time using js-yaml, making them available as typed objects throughout the bot’s lifetime.
Absolet is designed for single-guild deployments. If the bot is invited to more than one server, it will operate using the first guild in its cache and log a warning. Multi-guild support is considered a beta feature and is not officially supported.

Build docs developers (and LLMs) love