⚡ Triggers
Triggers are Discord events that automatically fire your flows — no user interaction needed.
Triggers require a persistent Discord gateway connection, which only Full Bot mode opens. Bots in the default Interaction Only mode can save triggers, but they stay inactive until you switch. See Bot Modes for the full comparison and how to switch.
🔬What a trigger looks like
This is what a trigger card looks like in your bot's Triggers tab. Sparks listed on the card are available in every piece inside the linked flow.
guildMemberAdd{{input.guild.id}}Your Discord server's unique ID{{input.guild.name}}Your server's name{{input.guild.memberCount}}How many members are in the server{{input.guild.icon}}Your server's icon image (empty if it has none){{member.id}}The new member's Discord ID{{member.username}}Their Discord username{{member.displayName}}Their nickname in this server, or username if none{{member.name}}Their username (alias for member.username){{member.joinedAt}}When they joined (ISO timestamp){{member.avatar}}Their avatar — server avatar if they set one// A Trigger is just a Discord event listener — Kitcord registers these for you:
client.on("guildMemberAdd", async (member) => {
const user = member.user; // → {{input.user.*}}
const guild = member.guild; // → {{input.guild.id}}
// your flow runs here
});
client.on("messageCreate", async (message) => {
if (message.author.bot) return; // filters: { ignoreBots: true }
const content = message.content; // → {{message.content}}
// your flow runs here
});
// Kitcord reads events[] from your Kit and calls client.on() for each one.🔔All Event Types
Click any event to see its full documentation — available sparks, filters, and TypeScript equivalent.
clientReadyFires once when the bot successfully connects to the Discord gateway.
{{id}}{{name}}+2guildMemberAddFires when a new member joins any server the bot is in.
{{id}}{{name}}+8guildMemberRemoveFires when a member leaves or is kicked from the server.
{{id}}{{name}}+7guildBanAddFires when a member is banned from a server.
{{id}}{{name}}+5guildBanRemoveFires when a member is unbanned.
{{id}}{{name}}+4messageCreateFires when a message is sent in a channel the bot can see.
{{id}}{{name}}+18messageDeleteFires when a message is deleted.
{{id}}{{name}}+8messageUpdateFires when a message is edited.
{{id}}{{name}}+16reactionAddFires when someone adds a reaction to a message.
{{id}}{{name}}+6reactionRemoveFires when someone removes a reaction from a message.
{{id}}{{name}}+6voiceStateUpdateFires when a member joins, leaves, or moves voice channels.
{{id}}{{name}}+6interactionCreateFires when a Discord interaction is received (slash commands use Spells instead).
{{id}}{{name}}+6componentClickFires when someone presses a button your bot sent. Match it to the button's custom id. Works in Interaction Only mode.
{{id}}{{name}}+8selectChooseFires when someone picks from a dropdown your bot sent. What they picked arrives as {{component.value}}. Works in Interaction Only mode.
{{id}}{{name}}+10modalSubmitFires when someone submits a pop-up form. Each answer arrives as {{form.values.<field custom id>}}. Works in Interaction Only mode.
{{id}}{{name}}+7🔧Filters
Some events support filters that narrow when the trigger fires.
messageCreate{{input.guild.id}}Your Discord server's unique ID{{input.guild.name}}Your server's name{{input.guild.memberCount}}How many members are in the server{{input.guild.icon}}Your server's icon image (empty if it has none){{message.id}}The message's unique ID{{message.content}}The full text of the message{{message.channelId}}ID of the channel the message was sent in{{message.author.id}}Discord ID of who sent the message{{message.author.username}}Sender's Discord username{{message.author.displayName}}Sender's display name (or username if they have none){{message.author.name}}Sender's username (alias for message.author.username){{channel.id}}ID of the channel (same as message.channelId){{channel.name}}Name of the channel{{message.image}}First image on the message — attachment, embed image or sticker{{message.images}}Every image on the message, as a list{{message.imageCount}}How many images the message carries{{message.attachments}}Every file attached to the message (images or not){{message.author.avatar}}Avatar of whoever sent the message{{message.url}}Link that jumps straight to the message{{message.replyTo}}ID of the message this one replies to (empty if it isn't a reply)Always turn on ignoreBots for messageCreate flows. Without it, your bot reacts to its own messages and can loop indefinitely.
🔀Multiple Triggers, One Flow
You can point multiple triggers at the same flow — useful for shared logic like logging both member joins and leaves to the same Vault table. Make sure both events provide the sparks your flow needs.