API Integration

✨ Features

  • Event-driven architecture β€” React to Discord and bot events

  • Backward compatibility β€” Legacy addons still work

  • Priority system β€” Control execution order of handlers

  • Error isolation β€” One addon's error won't crash others

  • Rich context β€” Access client, config, and language data

  • Async support β€” Full Promise / async-await support


πŸš€ Quick Start

Example: HelloWorld Addon

A simple addon that responds to messages, welcomes new members, and reacts to tickets being created:

hello-world-addon.js
module.exports = {
    // Only 'name' is required!
    name: 'HelloWorld',

    // Everything else is optional (but recommended for clarity)
    // version: '1.0.0'
    // description: '...'
    // author: 'Your Name'

    events: {
        // Respond to messages
        'discord:messageCreate': async (eventData, context) => {
            const { message } = eventData;
            if (message.author.bot) return;

            if (message.content.toLowerCase() === '!hello') {
                await message.channel.send(`Hello ${message.author.username}! πŸ‘‹`);
            }
        },

        // Welcome new members
        'discord:guildMemberAdd': async (eventData, context) => {
            const { member } = eventData;
            console.log(`New member joined: ${member.user.username}`);

            const channel = member.guild.channels.cache.find(
                ch => ch.name === 'welcome' || ch.name === 'general'
            );
            if (channel) {
                await channel.send(`Welcome ${member.user.username}! πŸŽ‰`);
            }
        },

        // React to tickets being created
        'ticket:created': async (eventData, context) => {
            const { ticket, user } = eventData;
            console.log(`Ticket #${ticket.ticketId} was created by ${user.username}`);
        }
    }
};

βœ… With this addon

  • Type !hello β†’ Bot replies with a greeting

  • New members join β†’ Welcome message in #welcome or #general

  • Ticket is created β†’ Logged in console


πŸ“‘ Event Reference

Discord Events

Listen to Discord.js events with the discord: prefix:

  • discord:messageCreate β€” New message sent (key data: message)

  • discord:messageUpdate β€” Message edited (key data: message, oldMessage)

  • discord:messageDelete β€” Message deleted (key data: message)

  • discord:guildMemberAdd β€” User joins server (key data: member)

  • discord:guildMemberRemove β€” User leaves server (key data: member)

  • discord:guildMemberUpdate β€” User roles/nickname changed (key data: oldMember, newMember)

  • discord:voiceStateUpdate β€” Voice channel changes (key data: oldState, newState)

  • discord:channelCreate β€” Channel created (key data: channel)

  • discord:channelDelete β€” Channel deleted (key data: channel)

  • discord:roleCreate β€” Role created (key data: role)

  • discord:roleDelete β€” Role deleted (key data: role)

  • discord:guildBanAdd β€” User banned (key data: ban)

  • discord:guildBanRemove β€” User unbanned (key data: ban)

  • discord:interactionCreate β€” Slash command/button used (key data: interaction)

  • discord:ready β€” Bot started (key data: client)

Bot Business Logic Events

Ticket Events:

  • ticket:created β€” New ticket opened (key data: ticket, user, ticketType, questions)

  • ticket:closed β€” Ticket closed/resolved (key data: ticket, closedBy, closeReason, isAutoAlert)

  • ticket:deleted β€” Ticket channel deleted (key data: ticket, deletedBy, channelName)

  • ticket:claimed β€” Staff member claims ticket (key data: ticket, claimer)

  • ticket:unclaimed β€” Staff member unclaims ticket (key data: ticket, previousClaimer)

  • ticket:reviewed β€” User reviews service (key data: ticket, rating, feedback, reviewer)

Suggestion Events:

  • suggestion:created β€” New suggestion submitted (key data: suggestion, author, text, message)

  • suggestion:accepted β€” Suggestion approved by staff (key data: suggestion, acceptedBy, reason, originalAuthor)

  • suggestion:denied β€” Suggestion rejected by staff (key data: suggestion, deniedBy, reason, originalAuthor)

Leveling Events:

  • level:up β€” User gains XP and levels up (key data: user, newLevel, oldLevel, xpGained, userData)

Auto-Moderation Events:

  • autoReact:triggered β€” Bot auto-reacts to keyword (key data: message, keyword, emoji, reaction)

  • autoResponse:triggered β€” Bot sends auto-response (key data: message, trigger, responseType, responseContent)

  • moderation:antiSpam β€” Anti-spam/mass mention triggered (key data: type, user, action, reason, duration)

Music Events:

  • music:trackStart β€” Track starts playing (key data: track, requestedBy, queue)

  • music:trackAdded β€” Track added to queue (key data: track, requestedBy, queue)

Giveaway Events:

  • giveaway:created β€” New giveaway started (key data: giveaway, prize, winnerCount, hostedBy)

  • giveaway:ended β€” Giveaway finished, winners selected (key data: giveaway, winners, prize, totalEntries)

Invite Events:

  • invite:memberJoined β€” Member joins via tracked invite (key data: member, inviter, inviterInviteCount)

Moderation Events (Slash Commands):

  • moderation:ban β€” A user is banned via slash command or audit log (key data: type, target, moderator, reason, guild, dmSent, method)

  • moderation:unban β€” A previously banned user is unbanned (key data: type, targetUserId, moderator, reason, guild, method)

  • moderation:kick β€” A member is removed from the server (key data: type, target, moderator, reason, guild, dmSent, method)

  • moderation:warn β€” A moderator issues a warning (key data: type, target, moderator, reason, guild, warningCount, warning, method)

  • moderation:unwarn β€” A warning is removed from a user (key data: type, target, moderator, removedWarning, warningId, guild, remainingWarnings, method)

  • moderation:timeout β€” A user is muted/timed out (key data: type, subType, target, moderator, reason, duration, durationMs, endTime, guild, method)

  • moderation:timeout_clear β€” Timeout or mute is lifted (key data: type, target, moderator, guild, wasMuted, method)

  • moderation:tempban β€” A moderator applies a timed ban (key data: type, target, moderator, reason, duration, endTime, guild, dmSent, method)

  • moderation:nickname_change β€” A moderator edits a user’s nickname (key data: type, target, moderator, oldNickname, newNickname, guild, method)

  • moderation:purge β€” A moderator bulk deletes messages (key data: type, moderator, channel, guild, messageCount, purgeType, originalAmount, method)

Addon Lifecycle Events:

  • addon:loaded β€” Addon loaded successfully (key data: name, path, type)

  • addon:unloaded β€” Addon unloaded (key data: name, path)

  • addon:registered β€” Addon registered with event system (key data: name, events)


πŸ”§ Custom Events

Emit and listen for your own events:


🧰 Context Object

Every handler receives:


βš™οΈ Advanced Features

Priority System

Control execution order:

Error Handling

Addons run independently:

Database Integration

Use Mongoose inside addons:

Conditional Event Handling

Run logic only in certain channels/users:


πŸ”„ Migration from Legacy Addons

Legacy Format (still works)

New Event API Format

Key Differences

  • Legacy β†’ run function, no name property

  • New β†’ name required, uses events

  • New format benefits: event-driven API, hot reloading, enable/disable, error isolation, priorities


πŸ“‹ Requirements Summary

Absolutely Required

  • name (string) β€” Unique addon identifier

Required (pick one)

  • events (object) β€” Event handlers

  • run (function) β€” Init function

Optional (defaults)

  • version β†’ '1.0.0'

  • description β†’ ''

  • author β†’ 'Unknown'

  • priority β†’ 0

  • permissions β†’ []

  • dependencies β†’ []

Minimal Working Addon


πŸ’‘ Practical Examples

Staff Notification System

Level Rewards System

Auto-Moderation Logger