bot-base
telegram-bot-template
TypeScript

Telegram bot template based on grammY

Last updated Jun 30, 2026
439
Stars
61
Forks
15
Issues
0
Stars/day
Attention Score
71
Language breakdown
TypeScript 97.6%
Fluent 2.1%
JavaScript 0.3%
โ–ธ Files click to expand
README

๐Ÿค– Telegram Bot Template

Bot starter template based on grammY bot framework.

Features

  • Scalable structure
  • Config loading and validation
  • Internationalization, language changing
  • Graceful shutdown
  • Logger (powered by pino)
  • Ultrafast and multi-runtime server (powered by hono)
  • Ready-to-use deployment setups:
- Docker - Vercel
  • Examples:
- grammY plugins: - Conversations - Databases: - Prisma ORM - Runtimes: - Bun

Usage

Follow these steps to set up and run your bot using this template:

  • Create a New Repository
Start by creating a new repository using this template. You can do this by clicking here.
  • Environment Variables Setup
Create an environment variables file by copying the provided example file:
cp .env.example .env
Open the newly created .env file and set the BOT_TOKEN environment variable.
  • Launching the Bot
You can run your bot in both development and production modes.

Development Mode:

Install the required dependencies:

npm install
Start the bot in watch mode (auto-reload when code changes):
npm run dev

Production Mode:

Install only production dependencies:

npm install --only=prod

Set DEBUG environment variable to false in your .env file.

Start the bot in production mode:

npm run start:force # skip type checking and start     # or     npm start # with type checking (requires development dependencies)

List of Available Commands

  • npm run lint โ€” Lint source code.
  • npm run format โ€” Format source code.
  • npm run typecheck โ€” Run type checking.
  • npm run dev โ€” Start the bot in development mode.
  • npm run start โ€” Start the bot.
  • npm run start:force โ€” Starts the bot without type checking.

Directory Structure

project-root/
  โ”œโ”€โ”€ locales # Localization files
  โ””โ”€โ”€ src
      โ”œโ”€โ”€ bot # Code related to bot
      โ”‚   โ”œโ”€โ”€ callback-data # Callback data builders
      โ”‚   โ”œโ”€โ”€ features      # Bot features
      โ”‚   โ”œโ”€โ”€ filters       # Update filters
      โ”‚   โ”œโ”€โ”€ handlers      # Update handlers
      โ”‚   โ”œโ”€โ”€ helpers       # Helper functions
      โ”‚   โ”œโ”€โ”€ keyboards     # Keyboard builders
      โ”‚   โ”œโ”€โ”€ middlewares   # Bot middlewares
      โ”‚   โ”œโ”€โ”€ i18n.ts       # Internationalization setup
      โ”‚   โ”œโ”€โ”€ context.ts    # Context object definition
      โ”‚   โ””โ”€โ”€ index.ts      # Bot entry point
      โ”œโ”€โ”€ server # Code related to web server
      โ”‚   โ”œโ”€โ”€ middlewares   # Server middlewares
      โ”‚   โ”œโ”€โ”€ environment   # Server environment setup
      โ”‚   โ””โ”€โ”€ index.ts      # Server entry point
      โ”œโ”€โ”€ config.ts # Application config
      โ”œโ”€โ”€ logger.ts # Logging setup
      โ””โ”€โ”€ main.ts   # Application entry point

Deploy

Docker (docker.com)

Branch: deploy/docker-compose (open diff)

Use in your project:

  • Add the template repository as a remote
git remote add template git@github.com:bot-base/telegram-bot-template.git
git remote update
  • Merge deployment setup
git merge template/deploy/docker-compose -X theirs --squash --no-commit --allow-unrelated-histories

Vercel (vercel.com)

Branch: deploy/vercel (open diff)

Use in your project:

  • Add the template repository as a remote
git remote add template git@github.com:bot-base/telegram-bot-template.git
git remote update
  • Merge deployment setup
git merge template/deploy/vercel -X theirs --squash --no-commit --allow-unrelated-histories

Examples

grammY conversations (grammy.dev/plugins/conversations)

Branch: example/plugin-conversations (open diff)

Use in your project:

  • Add the template repository as a remote
git remote add template git@github.com:bot-base/telegram-bot-template.git
git remote update
  • Merge example
git merge template/example/plugin-conversations -X theirs --squash --no-commit --allow-unrelated-histories
  • Install dependencies
npm i @grammyjs/conversations

Prisma ORM (prisma.io)

Branch: example/orm-prisma (open diff)

Use in your project:

  • Add the template repository as a remote
git remote add template git@github.com:bot-base/telegram-bot-template.git
git remote update
  • Merge example
git merge template/example/orm-prisma -X theirs --squash --no-commit --allow-unrelated-histories
  • Install dependencies
npm i -D prisma
npm i @prisma/client

Bun (bun.sh)

Branch: example/runtime-bun (open diff)

Use in your project:

  • Add the template repository as a remote
git remote add template git@github.com:bot-base/telegram-bot-template.git
git remote update
  • Merge example
git merge template/example/runtime-bun -X theirs --squash --no-commit --allow-unrelated-histories
  • Install dependencies
# remove Node-related dependencies
npm r @types/node tsx tsc-watch

install dependencies

bun i

remove npm lockfile

rm package-lock.json

install bun typings

bun add -d @types/bun

Environment Variables

Variable Type Description
BOT_TOKEN String Telegram Bot API token obtained from @BotFather.
BOT_MODE String Specifies method to receive incoming updates (polling or webhook).
LOG_LEVEL String Optional. Specifies the application log level.
Use info for general logging. Check the Pino documentation for more log level options.
Defaults to info.
DEBUG Boolean Optional. Enables debug mode. You may use config.isDebug flag to enable debugging functions.
BOT_WEBHOOK String Optional in polling mode. Webhook endpoint URL, used to configure webhook.
BOTWEBHOOKSECRET String Optional in polling mode. A secret token that is used to ensure that a request is sent from Telegram, used to configure webhook.
SERVER_HOST String Optional in polling mode. Specifies the server hostname.
Defaults to 0.0.0.0.
SERVER_PORT Number Optional in polling mode. Specifies the server port.
Defaults to 80.
BOTALLOWEDUPDATES Array of String Optional. A JSON-serialized list of the update types you want your bot to receive. See Update for a complete list of available update types.
Defaults to an empty array (all update types except chatmember, messagereaction and messagereactioncount).
BOT_ADMINS Array of Number Optional. Administrator user IDs. Use this to specify user IDs that have special privileges, such as executing /setcommands.
Defaults to an empty array.
๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท bot-base/telegram-bot-template ยท Updated daily from GitHub