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-awaitsupport
π Quick Start
Example: HelloWorld Addon
A simple addon that responds to messages, welcomes new members, and reacts to tickets being created:
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 greetingNew 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 β
runfunction, nonamepropertyNew β
namerequired, useseventsNew 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 handlersrun(function) β Init function
Optional (defaults)
versionβ'1.0.0'descriptionβ''authorβ'Unknown'priorityβ0permissionsβ[]dependenciesβ[]
Minimal Working Addon
π‘ Practical Examples
Staff Notification System
Level Rewards System
Auto-Moderation Logger
