API Reference
Complete API reference for Disapp framework.
Core Classes
DisappClient
Main client class that extends Discord.js Client.
import { DisappClient } from '@disapp/core';
const client = new DisappClient({
intents: [GatewayIntentBits.Guilds],
config: {
token: string,
clientId: string,
guildId?: string,
commandsPath: string,
eventsPath: string,
database?: {
url: string
}
}
});
await client.start();
Command
Base class for creating commands.
import { Command } from '@disapp/core';
export default class MyCommand extends Command {
constructor() {
super({
name: string,
description: string,
data: SlashCommandBuilder,
execute: async () => {},
middlewares?: MiddlewareFunction[],
cooldown?: number
});
}
async execute(interaction: any): Promise<void> {
// Command logic
}
}
Event
Base class for creating events.
import { Event } from "@disapp/core";
export default class MyEvent extends Event {
constructor() {
super({
name: string,
once: boolean,
execute: async () => {},
});
}
async execute(...args: any[]): Promise<void> {
// Event logic
}
}
Builders
v2() - Components V2 Builder
import { v2 } from '@disapp/core';
v2()
.text(content: string)
.separator(divider?: boolean, spacing?: number)
.buttons(...buttons: ButtonConfig[])
.select(id: string, placeholder: string, options: SelectOption[], onChange?: Function)
.accentColor(color: number)
.enableAutoChunking(options?: AutoChunkerOptions)
.build()
msg() - Message Builder
import { msg } from '@disapp/core';
msg()
.setContent(content: string)
.buttons(...buttons: ButtonConfig[])
.stringSelect(id: string, options: SelectOption[], placeholder?: string)
.userSelect(id: string, placeholder: string, minMax: [number, number])
.roleSelect(id: string, placeholder: string, minMax: [number, number])
.channelSelect(id: string, placeholder: string, minMax: [number, number])
.addEmbed(embed: EmbedBuilder)
.build()
embed() - Embed Builder
import { embed } from '@disapp/core';
embed()
.setTitle(title: string)
.setDescription(description: string)
.setColor(color: number)
.addFields(...fields: EmbedField[])
.setThumbnail(url: string)
.setImage(url: string)
.setFooter(text: string, iconURL?: string)
.setTimestamp()
.build()
Middleware
Built-in Middleware
import {
OnlyAdmin,
RequirePermission,
Cooldown,
RateLimit,
RequireDatabase,
RequireGuild,
RequireRole,
OwnerOnly
} from '@disapp/core';
OnlyAdmin()
RequirePermission(permission: bigint)
Cooldown(ms: number)
RateLimit(maxUses: number, windowMs: number)
RequireDatabase()
RequireGuild()
RequireRole(roleId: string)
OwnerOnly(ownerId: string)
Custom Middleware
import { MiddlewareFunction } from "@disapp/core";
function MyMiddleware(): MiddlewareFunction {
return async (ctx) => {
// Middleware logic
if (condition) {
await ctx.interaction.reply("Error message");
return false;
}
return true;
};
}
Database
Repositories
import {
UserRepository,
GuildRepository,
UserStatsRepository,
VoiceActivityRepository,
} from "@disapp/core";
const userRepo = new UserRepository();
const guildRepo = new GuildRepository();
const statsRepo = new UserStatsRepository();
const voiceRepo = new VoiceActivityRepository();
UserRepository
await userRepo.getOrCreate(userId: bigint, username: string, avatar?: string)
await userRepo.findById(userId: bigint)
await userRepo.update(user: User)
await userRepo.delete(userId: bigint)
GuildRepository
await guildRepo.getOrCreate(guildId: bigint, name: string)
await guildRepo.findById(guildId: bigint)
await guildRepo.update(guild: Guild)
await guildRepo.delete(guildId: bigint)
UserStatsRepository
await statsRepo.getOrCreate(userId: bigint, guildId: bigint)
await statsRepo.addXP(userId: bigint, guildId: bigint, amount: number)
await statsRepo.getTopPlayers(guildId: bigint, limit: number)
VoiceActivityRepository
await voiceRepo.startSession(userId: bigint, guildId: bigint, channelId: bigint)
await voiceRepo.endSession(userId: bigint, guildId: bigint)
await voiceRepo.getWeeklyStats(guildId: bigint)
Internationalization
I18n
import { I18n } from '@disapp/core';
const i18n = I18n.getInstance({
defaultLanguage: string,
fallbackLanguage: string,
localesPath: string
});
await i18n.loadLocales(path: string)
i18n.t(key: string, language?: string, params?: Record<string, any>)
i18n.addLocale(language: string, translations: Record<string, any>)
i18n.getLanguages()
i18n.hasLanguage(language: string)
I18nHelper
import { I18nHelper } from '@disapp/core';
I18nHelper.t(key: string, language?: string, params?: Record<string, any>)
I18nHelper.tUser(userId: string, key: string, params?: Record<string, any>)
I18nHelper.setUserLanguage(userId: string, language: string)
I18nHelper.getUserLanguage(userId: string)
I18nHelper.button(labelKey: string, language?: string, params?: Record<string, any>)
I18nHelper.modal(titleKey: string, language?: string, params?: Record<string, any>)
I18nHelper.message(messageKey: string, language?: string, params?: Record<string, any>)
I18nHelper.error(errorKey: string, language?: string, params?: Record<string, any>)
I18nHelper.command(commandKey: string, language?: string, params?: Record<string, any>)
I18nHelper.embed(embedKey: string, language?: string, params?: Record<string, any>)
Utilities
AutoChunker
import { AutoChunker } from '@disapp/core';
AutoChunker.autoChunk(text: string, options?: AutoChunkerOptions)
interface AutoChunkerOptions {
maxLength?: number;
preserveCodeBlocks?: boolean;
preserveMarkdown?: boolean;
separator?: string;
}
DynamicConfig
import { DynamicConfig } from '@disapp/core';
const config = DynamicConfig.getInstance(path?: string);
config.get(key: string)
config.set(key: string, value: any)
config.update(updates: Record<string, any>)
config.getAll()
config.reset()
config.isMaintenanceMode()
config.isFeatureEnabled(feature: string)
config.setCustom(key: string, value: any)
config.getCustom(key: string)
config.on('loaded', (config) => {})
config.on('changed', (newConfig, oldConfig) => {})
config.on('updated', (key, value) => {})
config.on('reset', (config) => {})
HotReload
import { HotReload } from '@disapp/core';
const hotReload = new HotReload(client: DisappClient);
hotReload.watchCommands()
hotReload.watchEvents()
VoiceTracker
import { VoiceTracker } from '@disapp/core';
const tracker = new VoiceTracker(client: DisappClient);
await tracker.handleVoiceStateUpdate(oldState: VoiceState, newState: VoiceState)
Shortcuts
Button Shortcuts
import { confirm, yesNo, primary, danger, success, secondary, row } from '@disapp/core';
confirm(confirmId: string, cancelId: string)
yesNo(yesId: string, noId: string)
primary(label: string, id: string)
danger(label: string, id: string)
success(label: string, id: string)
secondary(label: string, id: string)
row(...buttons: ButtonBuilder[])
Embed Shortcuts
import { successEmbed, errorEmbed, warningEmbed, infoEmbed } from '@disapp/core';
successEmbed(title: string, description: string)
errorEmbed(title: string, description: string)
warningEmbed(title: string, description: string)
infoEmbed(title: string, description: string)
Types
ButtonConfig
interface ButtonConfig {
id?: string;
label?: string;
style: number;
emoji?: string;
url?: string;
disabled?: boolean;
onClick?: (i: any) => Promise<void> | void;
}
SelectOption
interface SelectOption {
label: string;
value: string;
emoji?: string;
description?: string;
default?: boolean;
}
MiddlewareContext
interface MiddlewareContext {
interaction: any;
command: any;
next: () => Promise<void>;
}
MiddlewareFunction
type MiddlewareFunction = (ctx: MiddlewareContext) => Promise<boolean | void>;
Constants
ButtonStyle
import { ButtonStyle } from "discord.js";
ButtonStyle.Primary; // 1 - Blurple
ButtonStyle.Secondary; // 2 - Grey
ButtonStyle.Success; // 3 - Green
ButtonStyle.Danger; // 4 - Red
ButtonStyle.Link; // 5 - Grey with URL
Colors
0x5865f2; // Discord Blurple
0x57f287; // Green
0xfee75c; // Yellow
0xed4245; // Red
0x99aab5; // Gray