Бот для обработки заявок пользователей с возможностью одобрения/отклонения админами и генерации ссылок для одобренных пользователей.
- ├─ tools/ #
- │ ├─split.js #
- ├─ RADME.MD #
- ├─ .env.example # FAQ.
- ├─ .env # .gitignore
- ├─ package.json # Создается автоматом
- ├─ ecosystem.config.js # для pm2 (опционально)
- ├─ src/ #
- ├─ index.js # входная точка (стартует бота)
- ├─ bot.js # создает Telegraf, общие middlewares
- ├─ loader.js # автоподгрузка модулей
- ├─ middlewares/ #
- │ ├─ session.js #
- │ ├─ logging.js #
- │ └─ auth.js #
- ├─ commands/ #
- │ ├─ start.js #
- │ ├─ help.js #
- │ └─ bindDomain.js #
- ├─ actions/ # callback_query обработчики
- │ ├─ bind_domain.js #
- │ └─ cancel_bind_domain.js #
- ├─ hears/ #
- │ └─ domain_input.js # текстовые триггеры
- ├─ scenes/ #
- │ └─ bindDomainScene.js # wizard/scene шаги
- ├─ keyboards/ #
- │ └─ mainMenu.js #
- ├─ services/ #
- │ ├─ cloudflare.js # клиенты/SDK
- │ └─ logger.js #
- └─ utils/ #
- └─ validateDomain.js #
git clone https://github.com/***/telegram-bot__.git cd telegram-bot
{
"node ./src/index.js" },
{
"cloudflare": "^4.5.0", "dotenv": "^17.2.1", "pm2": "^6.0.8", "telegraf": "^4.16.3" }; *
-
+ - npm install
- npm init
- npm telegraf
- npm dotenv
- npm pm2
- npm cloudflare
- npm fund
- npm audit
pm2 start ./src/index.js --name telegram-bot --watch
pm2 logs telegram-bot__
pm2 start ecosystem.config.js
pm2 logs telegram-bot__
whoami
echo "HOME=$HOME"
pm2 stop all || true
pm2 delete all || true
pm2 save --force
pm2 kill || true
rm -f "$HOME/.pm2/dump.pm2" "$HOME/.pm2/dump.pm2.bak"
sudo pm2 stop all || true
sudo pm2 delete all || true
sudo pm2 save --force || true
sudo pm2 kill || true
sudo rm -f /root/.pm2/dump.pm2 /root/.pm2/dump.pm2.bak
pm2 unstartup || true
sudo pm2 unstartup || true
pm2 unstartup launchd || true
sudo pm2 unstartup launchd || true
pkill -f "node .*bot\.js" 2>/dev/null || true
pkill -f "node .*split-bot\.js" 2>/dev/null || true
pkill -f "node .*telegraf" 2>/dev/null || true
pkill -f "pm2" 2>/dev/null || true
pgrep -fal node || true
pgrep -fal pm2 || true
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/deleteWebhook?drop_pending_updates=true"
ps -ef | grep -E "node(.*/)?(bot\.js|split-bot\.js)|pm2" | grep -v grep || true
pm2 stop all 2>$null
pm2 delete all 2>$null
pm2 save --force 2>$null
pm2 kill 2>$null
Remove-Item -Force "$env:USERPROFILE\.pm2\dump.pm2" -ErrorAction SilentlyContinue
Remove-Item -Force "$env:USERPROFILE\.pm2\dump.pm2.bak" -ErrorAction SilentlyContinue
Если ставили pm2 под админом/другим пользователем — повторить для него (запустить этот же блок под тем пользователем).
pm2-service-uninstall # если установлен такой сервис
pm2 unstartup 2>$null
pm2 unstartup windows 2>$null
taskkill /F /IM node.exe /T 2>$null
taskkill /F /IM pm2.exe /T 2>$null
Get-Process node -ErrorAction SilentlyContinue
Get-Process pm2 -ErrorAction SilentlyContinue
Invoke-RestMethod -Uri "https://api.telegram.org/bot$env:BOT_TOKEN/deleteWebhook?drop_pending_updates=true" -Method Get
- Каждый файл-модуль должен экспортировать только register(bot). Внутри — регистрируете всё, что относится к этому модулю: bot.command, bot.action, bot.hears, и т.д.
- Если нужен строгий порядок (например, один middleware должен идти раньше другого), префиксуйте имена файлов как в автозагрузчике loader.js - сортирует файлы в стире cron.
-
Middleware порядок важен. Сессия (session()) и сцены — до обработчиков. -
Ошибки не глотайте. В каждом модуле оборачивайте асинхронные операции в try/catch, а глобально используйте bot.catch. -
Отключайте long-running таймауты. Указан handlerTimeout: 30_000 — адаптируйте под себя. -
CommonJS vs ESM. Вы используете require, всё ок с указанными версиями пакетов.
Быстрый коммит без гитхаб репозитория через терминал (macOS/Linu) которая создаст всю структуру и пустые файлов.
-
- Создаёт модульную структуру src/*
-
- Создаёт .env (если нет), package.json, ecosystem.config.js, logs/
-
- Ничего не трогает в node_modules/, package-lock.json
- Usage: bash -c 'mkdir -p tools && cat > tools/split-bot.js << "EOF" node tools/split-bot.js node tools/split-bot.js --force
-
--force перезаписать каркасные файлы (кроме .env, ВНИМАНИЕ!!! несохраненые данные будут утеряны)