Claude Code SkillEnterprise Communication15 installs

Discord Bot Architect

"Specialized skill for building production-ready Discord bots. Covers Discord.js (JavaScript) and Pycord (Python), gateway intents, slash commands, interactive components, rate limiting, and sharding."

Install with the Claude Code Templates CLI
$ npx claude-code-templates@latest --skill="enterprise-communication/discord-bot-architect" --yes

Requires Claude Code. The command adds this skill to your project's .claudedirectory — nothing runs on ToolZip's servers.

What's inside this skill

Component source

Discord Bot Architect

Patterns

Discord.js v14 Foundation

Modern Discord bot setup with Discord.js v14 and slash commands

When to use: ['Building Discord bots with JavaScript/TypeScript', 'Need full gateway connection with events', 'Building bots with complex interactions']
javascript

// src/index.js

const { Client, Collection, GatewayIntentBits, Events } = require('discord.js');

const fs = require('node:fs');

const path = require('node:path');

require('dotenv').config();

// Create client with minimal required intents

const client = new Client({

intents: [

GatewayIntentBits.Guilds,

// Add only what you need:

// GatewayIntentBits.GuildMessages,

// GatewayIntentBits.MessageContent, // PRIVILEGED - avoid if possible

]

});

// Load commands

client.commands = new Collection();

const commandsPath = path.join(__dirname, 'commands');

const commandFiles = fs.readdirSync(commandsPath).filter(f => f.endsWith('.js'));

for (const file of commandFiles) {

const filePath = path.join(commandsPath, file);

const command = require(filePath);

if ('data' in command && 'execute' in command) {

client.commands.set(command.data.name, command);

}

}

// Load events

const eventsPath = path.join(__dirname, 'events');

const eventFiles = fs.readdirSync(eventsPath).filter(f => f.endsWith('.js'));

for (const file of eventFiles) {

const filePath = path.join(eventsPath, file);

const event = require(filePath);

if (event.once) {

client.once(event.name, (...args) => event.execute(...args));

} else {

client.on(event.name, (...args) => event.execute(...args));

}

}

client.login(process.env.DISCORD_TOKEN);

javascript

// src/commands/ping.js

const { SlashCommandBuilder } = require('discord.js');

module.exports = {

data: new SlashCommandBuilder()

.setName('ping')

.setDescription('Replies with Pong!'),

async execute(interaction) {

const sent = await interaction.reply({

content: 'Pinging...',

fetchReply: true

});

const latency = sent.createdTimestamp - interaction.createdTimestamp;

await interaction.editReply(Pong! Latency: ${latency}ms);

}

};

javascript

// src/events/interactionCreate.js

const { Events } = require('discord.js');

module.exports = {

name: Event

### Pycord Bot Foundation

Discord bot with Pycord (Python) and application commands

**When to use**: ['Building Discord bots with Python', 'Prefer async/await patterns', 'Need good slash command support']
python
# main.py
import os
import discord
from discord.ext import commands
from dotenv import load_dotenv

load_dotenv()

# Configure intents - only enable what you need
intents = discord.Intents.default()
# intents.message_content = True  # PRIVILEGED - avoid if possible
# intents.members = True          # PRIVILEGED

bot = commands.Bot(
    command_prefix="!",  # Legacy, prefer slash commands
    intents=intents
)

@bot.event
async def on_ready():
    print(f"Logged in as {bot.user}")
    # Sync commands (do this carefully - see sharp edges)
    # await bot.sync_commands()

# Slash command
@bot.slash_command(name="ping", description="Check bot latency")
async def ping(ctx: discord.ApplicationContext):
    latency = round(bot.latency * 1000)
    await ctx.respond(f"Pong! Latency: {latency}ms")

# Slash command with options
@bot.slash_command(name="greet", description="Greet a user")
async def greet(
    ctx: discord.ApplicationContext,
    user: discord.Option(discord.Member, "User to greet"),
    message: discord.Option(str, "Custom message", required=False)
):
    msg = message or "Hello!"
    await ctx.respond(f"{user.mention}, {msg}")

# Load cogs
for filename in os.listdir("./cogs"):
    if filename.endswith(".py"):
        bot.load_extension(f"cogs.{filename[:-3]}")

bot.run(os.environ["DISCORD_TOKEN"])
# cogs/general.py
import discord
from discord.ext import commands

class General(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.slash_command(name="info", description="Bot information")
    async def info(self, ctx: discord.ApplicationContext):
        embed = discord.Embed(
            title="Bot Info",
            description="A helpful Discord bot",
            color=discord.Color.blue()
        )
        embed.add_field(name="Servers", value=len(self.bot.guilds))
        embed.add_field(name="Latency", value=f"{round(self.bot.latency * 1000)}ms")
        await ctx.respond(embed=embed)

    @commands.Cog.

Interactive Components Pattern

Using buttons, select menus, and modals for rich UX

When to use: ['Need interactive user interfaces', 'Collecting user input beyond slash command options', 'Building menus, confirmations, or forms']
javascript

// Discord.js - Buttons and Select Menus

const {

SlashCommandBuilder,

ActionRowBuilder,

ButtonBuilder,

ButtonStyle,

StringSelectMenuBuilder,

ModalBuilder,

TextInputBuilder,

TextInputStyle

} = require('discord.js');

module.exports = {

data: new SlashCommandBuilder()

.setName('menu')

.setDescription('Shows an interactive menu'),

async execute(interaction) {

// Button row

const buttonRow = new ActionRowBuilder()

.addComponents(

new ButtonBuilder()

.setCustomId('confirm')

.setLabel('Confirm')

.setStyle(ButtonStyle.Primary),

new ButtonBuilder()

.setCustomId('cancel')

.setLabel('Cancel')

.setStyle(ButtonStyle.Danger),

new ButtonBuilder()

.setLabel('Documentation')

.setURL('https://discord.js.org')

.setStyle(ButtonStyle.Link) // Link buttons don't emit events

);

// Select menu row (one per row, takes all 5 slots)

const selectRow = new ActionRowBuilder()

.addComponents(

new StringSelectMenuBuilder()

.setCustomId('select-role')

.setPlaceholder('Select a role')

.setMinValues(1)

.setMaxValues(3)

.addOptions([

{ label: 'Developer', value: 'dev', emoji: 'šŸ’»' },

{ label: 'Designer', value: 'design', emoji: 'šŸŽØ' },

{ label: 'Community', value: 'community', emoji: 'šŸŽ‰' }

])

);

await interaction.reply({

content: 'Choose an option:',

components: [buttonRow, selectRow]

});

// Collect responses

const collector = interaction.channel.createMessageComponentCollector({

filter: i => i.user.id === interaction.user.id,

time: 60_000 // 60 seconds timeout

});

collector.on('collect', async i => {

if (i.customId === 'confirm') {

await i.update({ content: 'Confirmed!', components: [] });

collector.stop();

} else if (i.custo

```

Anti-Patterns

āŒ Message Content for Commands

Why bad: Message Content Intent is privileged and deprecated for bot commands.

Slash commands are the intended approach.

āŒ Syncing Commands on Every Start

Why bad: Command registration is rate limited. Global commands take up to 1 hour

to propagate. Syncing on every start wastes API calls and can hit limits.

āŒ Blocking the Event Loop

Why bad: Discord gateway requires regular heartbeats. Blocking operations

cause missed heartbeats and disconnections.

āš ļø Sharp Edges

IssueSeveritySolution
Issuecritical## Acknowledge immediately, process later
Issuecritical## Step 1: Enable in Developer Portal
Issuehigh## Use a separate deploy script (not on startup)
Issuecritical## Never hardcode tokens
Issuehigh## Generate correct invite URL
Issuemedium## Development: Use guild commands
Issuemedium## Never block the event loop
Issuemedium## Show modal immediately
Type
Skill
Category
Enterprise Communication
Installs
15
Source
GitHub ↗

Related Claude Code Skills

SkillEnterprise Communication

Excel Analysis

Analyze Excel spreadsheets, create pivot tables, generate charts, and perform data analysis. Use when analyzing Excel files, spreadsheets, tabular data, or .xlsx files.

287 installsView →
SkillEnterprise Communication

Email Composer

Draft professional emails for various contexts including business, technical, and customer communication. Use when the user needs help writing emails or composing professional messages.

148 installsView →
SkillEnterprise Communication

Brand Guidelines

Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.

96 installsView →
SkillEnterprise Communication

Telegram Bot Builder

"Expert in building Telegram bots that solve real problems - from simple automation to complex AI-powered bots. Covers bot architecture, the Telegram Bot API, user experience, monetization strategies, and scaling bots to thousands of users. Use when: telegram bot, bot api, telegram automation, chat bot telegram, tg bot."

42 installsView →
SkillEnterprise Communication

Internal Comms

A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).

39 installsView →
SkillEnterprise Communication

Data Privacy Compliance

Data privacy and regulatory compliance specialist for GDPR, CCPA, HIPAA, and international data protection laws. Use when implementing privacy controls, conducting data protection impact assessments, ensuring regulatory compliance, or managing data subject rights. Expert in consent management, data minimization, and privacy-by-design principles.

27 installsView →

Catalog data and component content are sourced from the open-source davila7/claude-code-templates project (MIT license). ToolZip curates the listing and writes original descriptions; every component links back to its original source. Claude Code is a product of Anthropic. ToolZip is an independent catalog and is not affiliated with or endorsed by Anthropic.