K
Docs
Building Bots

Triggers

Triggers are Discord events that automatically fire your flows — no user interaction needed.

⚠️Triggers need Full Bot mode

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.

👋
Member joins
guildMemberAdd
Trigger
Sparks in this flow
{{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
{{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)
📐Under the hood — triggers under the hood
TypeScript
// 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.

🔧Filters

Some events support filters that narrow when the trigger fires.

💬
Message sent
messageCreate
Trigger
Filters
ignoreBots
true
Sparks in this flow
{{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
{{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 in this server (nickname or username)
{{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
💡ignoreBots on messageCreate

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.