tbot/laravel

Telegram bot SDK package for Laravel

Installs: 374

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/tbot/laravel

25.0 2025-09-27 14:31 UTC

This package is auto-updated.

Last update: 2025-09-27 14:37:51 UTC


README

Фреймворк для создания Telegram ботов на Laravel с поддержкой мультибота и разделением окружений.

Возможности

  • 🤖 Мультиботная архитектура - управление множественными ботами
  • 🔄 Разделение окружений - отдельные токены и домены для dev/prod
  • 🌍 i18n поддержка - встроенная система интернационализации без зависимостей
  • 🛠️ Интерактивные команды - удобное управление через CLI
  • 🔐 Безопасность - webhook secrets, валидация токенов
  • 📊 Мониторинг - проверка здоровья ботов, метрики
  • 🗄️ База данных - хранение настроек и состояний
  • 🚀 Готовые команды - быстрая настройка и развертывание

Установка

composer require tbot/laravel

Публикация файлов

Стандартная публикация (пропускает существующие файлы)

php artisan bot:publish

Публикация с принудительным обновлением

php artisan bot:publish --force

Публикация конкретных компонентов

php artisan bot:publish --tag=bot-config --force

или

php artisan bot:publish --tag=bot-app --force

Миграции

php artisan migrate

Быстрый старт

1. Создание бота

php artisan bot:new

Команда проведет вас через интерактивную настройку:

  • Ввод имени бота
  • Настройка токена
  • Указание администраторов
  • Настройка webhook

2. Управление ботами

# Список всех ботов
php artisan bot:manage list

# Информация о конкретном боте
php artisan bot:manage show mybot

# Активация/деактивация бота
php artisan bot:manage enable mybot
php artisan bot:manage disable mybot

# Тестирование бота
php artisan bot:manage test mybot

3. Управление доменами

# Установка домена для окружения
php artisan bot:domain set mybot dev https://dev.example.com
php artisan bot:domain set mybot prod https://example.com

# Просмотр доменов бота
php artisan bot:domain show mybot

# Список всех доменов
php artisan bot:domain list

4. Управление webhook

# Настройка webhook (автоматически использует домен из БД)
php artisan bot:webhook set mybot

# Информация о webhook
php artisan bot:webhook info mybot

# Удаление webhook
php artisan bot:webhook delete mybot

# Тестирование webhook
php artisan bot:webhook test mybot

5. Управление окружениями

# Переключение на dev окружение
php artisan bot:env dev

# Переключение на prod окружение
php artisan bot:env prod

# Сброс к значению из env файла
php artisan bot:env dev --reset

6. Публикация файлов

# Публикация всех файлов
php artisan bot:publish

# Принудительное обновление всех файлов
php artisan bot:publish --force

# Обновление конкретных компонентов
php artisan bot:publish --tag=bot-config --force
php artisan bot:publish --tag=bot-app --force
php artisan bot:publish --tag=bot-routes --force

Разделение окружений

Фреймворк использует единую структуру для токенов и webhook URL:

Токены

  • token - токен бота

Webhook URL

Примеры использования

// В коде бота
$bot = Bot::find(1);

// Получение токена
$token = $bot->token;

// Получение webhook URL
$webhookUrl = $bot->webhook_url;

// Проверка наличия токена
if ($bot->hasToken()) {
    // Бот имеет токен
}

// Проверка наличия webhook URL
if ($bot->hasWebhookUrl()) {
    // Бот имеет настроенный webhook
}

Структура проекта

app/
├── Bots/                    # Классы ботов
│   ├── AbstractBot.php     # Базовый класс бота
│   └── MyBot.php          # Ваш бот
├── Console/Commands/       # CLI команды
│   ├── BotCommand.php     # Управление ботами
│   ├── SetupCommand.php   # Настройка ботов
│   ├── WebhookCommand.php # Управление webhook
│   └── DomainCommand.php  # Управление доменами
└── Models/
    └── Bot.php            # Модель бота

config/
└── bot.php               # Конфигурация

database/migrations/      # Миграции БД

Конфигурация

Основные настройки в config/bot.php:

return [
    'multibot' => [
        'enabled' => true,
        'auto_create_classes' => true,
        'bots_path' => 'App\\Bots',
    ],
    
    'webhook' => [
        'base_url' => env('BOT_WEBHOOK_BASE_URL', env('APP_URL')),
        'auto_generate_secret' => true,
    ],
    
    'security' => [
        'webhook_secret' => env('BOT_WEBHOOK_SECRET'),
        'admin_ids' => array_filter(explode(',', env('BOT_ADMIN_IDS', ''))),
    ],
];

Команды

Основные команды

Команда Описание
bot:new Создание нового бота
bot:manage list Список всех ботов
bot:manage show {bot} Информация о боте
bot:manage test {bot} Тестирование бота
bot:webhook set {bot} Настройка webhook
bot:domain set {bot} {env} {domain} Установка домена

Управление доменами

Команда Описание
bot:domain set {bot} {env} {domain} Установка домена
bot:domain show {bot} Просмотр доменов бота
bot:domain list Список всех доменов

Управление webhook

Команда Описание
bot:webhook set {bot} {url?} Настройка webhook
bot:webhook info {bot} Информация о webhook
bot:webhook delete {bot} Удаление webhook
bot:webhook test {bot} Тестирование webhook

Интернационализация (i18n)

Фреймворк включает встроенную систему интернационализации без внешних зависимостей:

Использование модуля

Добавьте I18nModule в ваш бот:

use Bot\Modules\I18nModule;

class MyBot extends LightBot
{
    use I18nModule;
    
    public function start()
    {
        // Автоматический перевод в sendSelf/sendOut
        $this->sendSelf('messages.welcome', [
            ['messages.button.start'],
            ['messages.button.help']
        ]);
    }
}

Ручной перевод

// Перевод с параметрами
$greeting = $this->translate('messages.user.greeting', ['name' => 'John']);

// Перевод массивов
$buttons = $this->translateArray([
    ['messages.button.start'],
    ['messages.button.help']
]);

Файлы переводов

Создайте файлы переводов в resources/lang/{locale}/:

// resources/lang/en/messages.php
return [
    'welcome' => 'Welcome to our bot!',
    'button' => [
        'start' => 'Start',
        'help' => 'Help',
    ],
    'user' => [
        'greeting' => 'Hello, :name!',
    ],
];

Подробная документация: I18N_USAGE.md

Создание бота

После создания бота автоматически генерируется класс:

<?php

namespace App\Bots;

class MyBot extends AbstractBot
{
    public function main(): void
    {
        $this->commands();
        
        if ($this->hasMessageText() && $this->isMessageCommand()) {
            $this->handleCommand($this->getMessageText());
        }
    }

    public function commands(): void
    {
        $this->registerCommand('start', function () {
            $this->sendSelf('🎉 Привет! Я бот MyBot');
        }, [
            'description' => 'Запуск бота'
        ]);

        $this->registerCommand('help', function () {
            $this->sendSelf([
                '📋 Доступные команды:', 
                '', 
                '/start - Запуск бота', 
                '/help - Помощь'
            ]);
        }, [
            'description' => 'Помощь'
        ]);
    }
}

Безопасность

  • 🔐 Автоматическая генерация webhook secrets
  • 🛡️ Валидация токенов и доменов
  • 🔒 Проверка SSL сертификатов
  • 🚫 Защита от спама и rate limiting
  • 👥 Система администраторов

Мониторинг

# Проверка здоровья всех ботов
php artisan bot:health

# Статистика
php artisan bot:stats

# Конфигурация
php artisan bot:config show

Лицензия

MIT License