ranbot-ai/awesome-skills

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 strategie...

First seen May 20, 2026

Installation

$ npx skills add ranbot-ai/awesome-skills --skill telegram-bot-builder

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from ranbot-ai/awesome-skills · top by installs.

npx skills add ranbot-ai/awesome-skills

Browse all from ranbot-ai/awesome-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 6
License MIT
Default branch main
Open issues 3
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

Declared agents antigravity

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 5,589 B
  • docs SUMMARY.md 228 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 1 installs

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

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

## Inline Keyboards

### Basic Keyboard

import { Markup } from 'telegraf';

bot.command('menu', (ctx) => { ctx.reply('Choose an option:', Markup.inlineKeyboard([ [Markup.button.callback('Option 1', 'opt1')], [Markup.button.callback('Option 2', 'opt2')], [ 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

## 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

// Create invoice bot.command('buy', (ctx) => { ctx.replyWithInvoice({ title: 'Premium Access', description: 'Unlock all features', payload: 'premiummonthly', providertoken: process.env.PAYMENT_TOKEN, currency: 'USD', prices: [{ label: 'Premium', amount: 999 }], // $9.99 }); });

// Handle successful payment bot.on('successfulpayment', (ctx) => { const payment = ctx.message.successfulpayment; // 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: User