telegram-bot-template
telegram-bot-template copied to clipboard
Telegram bot template based on grammY
🤖 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)
- Fast and low overhead server (powered by fastify)
- Ready-to-use deployment setups:
- Docker
- Vercel
- Examples:
- Prisma ORM
- grammY plugins:
- Conversations
- Runner
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 .envOpen the newly created
.envfile and set theBOT_TOKENenvironment variable. -
Launching the Bot
You can run your bot in both development and production modes.
Development Mode:
Install the required dependencies:
npm installStart the bot in watch mode (auto-reload when code changes):
npm run devProduction Mode:
Install only production dependencies (no development dependencies):
npm install --only=prodSet the
NODE_ENVenvironment variable to "production" in your.envfile. Also, make sure to updateBOT_WEBHOOKwith the actual URL where your bot will receive updates.NODE_ENV=production BOT_WEBHOOK=<your_webhook_url>Start the bot in production mode:
npm start # or npm run start:force # if you want to skip type checking
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 # Contains the code related to the bot
│ ├── callback-data # Callback data builders
│ ├── features # Implementations of bot features
│ ├── filters # Update filters
│ ├── handlers # Update handlers
│ ├── helpers # Utility functions
│ ├── keyboards # Keyboard builders
│ ├── middlewares # Middleware functions
│ ├── i18n.ts # Internationalization setup
│ ├── context.ts # Context object definition
│ └── index.ts # Bot entry point
├── server # Contains the code related to the web server
│ └── index.ts # Web 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 [email protected]: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 [email protected]: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
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 [email protected]: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
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 [email protected]: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
grammY runner (grammy.dev/plugins/runner)
Branch: example/plugin-runner (open diff)
Use in your project:
- Add the template repository as a remote
git remote add template [email protected]:bot-base/telegram-bot-template.git
git remote update
- Merge example
git merge template/example/plugin-runner -X theirs --squash --no-commit --allow-unrelated-histories
- Install dependencies
npm i @grammyjs/runner
Environment Variables
| Variable | Type | Description |
|---|---|---|
| NODE_ENV | String | Specifies the application environment. (development or production) |
| BOT_TOKEN | String | Telegram Bot API token obtained from @BotFather. |
| LOG_LEVEL | String |
Optional.
Specifies the application log level. For example, use info for general logging. View the Pino documentation for more log level options. Defaults to info.
|
| BOT_MODE | String |
Optional.
Specifies method to receive incoming updates. (polling or webhook)
Defaults to polling.
|
| BOT_WEBHOOK | String |
Optional in polling mode.
Webhook endpoint URL, used to configure webhook in production environment.
|
| BOT_SERVER_HOST | String |
Optional. Specifies the server hostname. Defaults to 0.0.0.0.
|
| BOT_SERVER_PORT | Number |
Optional. Specifies the server port. Defaults to 80.
|
| BOT_ALLOWED_UPDATES | 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 chat_member).
|
| 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. |