Smithery Logo
MCPsSkillsDocsPricing
Login
Smithery Logo

Accelerating the Agent Economy

Resources

DocumentationPrivacy PolicySystem Status

Company

PricingAboutBlog

Connect

© 2026 Smithery. All rights reserved.

    davila7

    telegram-bot-builder

    davila7/telegram-bot-builder
    Communication
    19,892
    11 installs

    About

    SKILL.md

    Install

    Install via Skills CLI

    or add to your agent
    • Claude Code
      Claude Code
    • Codex
      Codex
    • OpenClaw
      OpenClaw
    • Cursor
      Cursor
    • Amp
      Amp
    • GitHub Copilot
      GitHub Copilot
    • Gemini CLI
      Gemini CLI
    • Kilo Code
      Kilo Code
    • Junie
      Junie
    • Replit
      Replit
    • Windsurf
      Windsurf
    • Cline
      Cline
    • Continue
      Continue
    • OpenCode
      OpenCode
    • OpenHands
      OpenHands
    • Roo Code
      Roo Code
    • Augment
      Augment
    • Goose
      Goose
    • Trae
      Trae
    • Zencoder
      Zencoder
    • Antigravity
      Antigravity
    ├─
    ├─
    └─

    About

    Expert in building Telegram bots that solve real problems - from simple automation to complex AI-powered bots...

    SKILL.md

    Telegram Bot Builder

    Role: Telegram Bot Architect

    You build bots that people actually use daily. You understand that bots should feel like helpful assistants, not clunky interfaces. You know the Telegram ecosystem deeply - what's possible, what's popular, and what makes money. You design conversations that feel natural.

    Capabilities

    • Telegram Bot API
    • Bot architecture
    • Command design
    • Inline keyboards
    • Bot monetization
    • User onboarding
    • Bot analytics
    • Webhook management

    Patterns

    Bot Architecture

    Structure for maintainable Telegram bots

    When to use: When starting a new bot project

    ## Bot Architecture
    
    ### Stack Options
    | Language | Library | Best For |
    |----------|---------|----------|
    | Node.js | telegraf | Most projects |
    | Node.js | grammY | TypeScript, modern |
    | Python | python-telegram-bot | Quick prototypes |
    | Python | aiogram | Async, scalable |
    
    ### Basic Telegraf Setup
    ```javascript
    import { Telegraf } from 'telegraf';
    
    const bot = new Telegraf(process.env.BOT_TOKEN);
    
    // Command handlers
    bot.start((ctx) => ctx.reply('Welcome!'));
    bot.help((ctx) => ctx.reply('How can I help?'));
    
    // Text handler
    bot.on('text', (ctx) => {
      ctx.reply(`You said: ${ctx.message.text}`);
    });
    
    // Launch
    bot.launch();
    
    // Graceful shutdown
    process.once('SIGINT', () => bot.stop('SIGINT'));
    process.once('SIGTERM', () => bot.stop('SIGTERM'));
    

    Project Structure

    telegram-bot/
    ├── src/
    │   ├── bot.js           # Bot initialization
    │   ├── commands/        # Command handlers
    │   │   ├── start.js
    │   │   ├── help.js
    │   │   └── settings.js
    │   ├── handlers/        # Message handlers
    │   ├── keyboards/       # Inline keyboards
    │   ├── middleware/      # Auth, logging
    │   └── services/        # Business logic
    ├── .env
    └── package.json
    
    
    ### Inline Keyboards
    
    Interactive button interfaces
    
    **When to use**: When building interactive bot flows
    
    ```python
    ## Inline Keyboards
    
    ### Basic Keyboard
    ```javascript
    import { Markup } from 'telegraf';
    
    bot.command('menu', (ctx) => {
      ctx.reply('Choose an option:', Markup.inlineKeyboard([
        [Markup.button.callback('Option 1', 'opt_1')],
        [Markup.button.callback('Option 2', 'opt_2')],
        [
          Markup.button.callback('Yes', 'yes'),
          Markup.button.callback('No', 'no'),
        ],
      ]));
    });
    
    // Handle button clicks
    bot.action('opt_1', (ctx) => {
      ctx.answerCbQuery('You chose Option 1');
      ctx.editMessageText('You selected Option 1');
    });
    

    Keyboard Patterns

    Pattern Use Case
    Single column Simple menus
    Multi column Yes/No, pagination
    Grid Category selection
    URL buttons Links, payments

    Pagination

    function getPaginatedKeyboard(items, page, perPage = 5) {
      const start = page * perPage;
      const pageItems = items.slice(start, start + perPage);
    
      const buttons = pageItems.map(item =>
        [Markup.button.callback(item.name, `item_${item.id}`)]
      );
    
      const nav = [];
      if (page > 0) nav.push(Markup.button.callback('◀️', `page_${page-1}`));
      if (start + perPage < items.length) nav.push(Markup.button.callback('▶️', `page_${page+1}`));
    
      return Markup.inlineKeyboard([...buttons, nav]);
    }
    
    
    ### Bot Monetization
    
    Making money from Telegram bots
    
    **When to use**: When planning bot revenue
    
    ```javascript
    ## Bot Monetization
    
    ### Revenue Models
    | Model | Example | Complexity |
    |-------|---------|------------|
    | Freemium | Free basic, paid premium | Medium |
    | Subscription | Monthly access | Medium |
    | Per-use | Pay per action | Low |
    | Ads | Sponsored messages | Low |
    | Affiliate | Product recommendations | Low |
    
    ### Telegram Payments
    ```javascript
    // Create invoice
    bot.command('buy', (ctx) => {
      ctx.replyWithInvoice({
        title: 'Premium Access',
        description: 'Unlock all features',
        payload: 'premium_monthly',
        provider_token: process.env.PAYMENT_TOKEN,
        currency: 'USD',
        prices: [{ label: 'Premium', amount: 999 }], // $9.99
      });
    });
    
    // Handle successful payment
    bot.on('successful_payment', (ctx) => {
      const payment = ctx.message.successful_payment;
      // Activate premium for user
      await activatePremium(ctx.from.id);
      ctx.reply('🎉 Premium activated!');
    });
    

    Freemium Strategy

    Free tier:
    - 10 uses per day
    - Basic features
    - Ads shown
    
    Premium ($5/month):
    - Unlimited uses
    - Advanced features
    - No ads
    - Priority support
    

    Usage Limits

    async function checkUsage(userId) {
      const usage = await getUsage(userId);
      const isPremium = await checkPremium(userId);
    
      if (!isPremium && usage >= 10) {
        return { allowed: false, message: 'Daily limit reached. Upgrade?' };
      }
      return { allowed: true };
    }
    
    
    ## Anti-Patterns
    
    ### ❌ Blocking Operations
    
    **Why bad**: Telegram has timeout limits.
    Users think bot is dead.
    Poor experience.
    Requests pile up.
    
    **Instead**: Acknowledge immediately.
    Process in background.
    Send update when done.
    Use typing indicator.
    
    ### ❌ No Error Handling
    
    **Why bad**: Users get no response.
    Bot appears broken.
    Debugging nightmare.
    Lost trust.
    
    **Instead**: Global error handler.
    Graceful error messages.
    Log errors for debugging.
    Rate limiting.
    
    ### ❌ Spammy Bot
    
    **Why bad**: Users block the bot.
    Telegram may ban.
    Annoying experience.
    Low retention.
    
    **Instead**: Respect user attention.
    Consolidate messages.
    Allow notification control.
    Quality over quantity.
    
    ## Related Skills
    
    Works well with: `telegram-mini-app`, `backend`, `ai-wrapper-product`, `workflow-automation`
    
    Recommended Servers
    Thoughtbox
    Thoughtbox
    LILT
    LILT
    Bright Data
    Bright Data
    Repository
    davila7/claude-code-templates
    Files