Фреймворк для создания 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 --forcephp artisan migratephp artisan bot:newКоманда проведет вас через интерактивную настройку:
- Ввод имени бота
- Настройка токена
- Указание администраторов
- Настройка webhook
# Список всех ботов
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# Установка домена для окружения
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# Настройка 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# Переключение на dev окружение
php artisan bot:env dev
# Переключение на prod окружение
php artisan bot:env prod
# Сброс к значению из env файла
php artisan bot:env dev --reset# Публикация всех файлов
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- полный URL webhook с доменом (например: https://example.com/webhook/botname)
// В коде бота
$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 |
Список всех доменов |
| Команда | Описание |
|---|---|
bot:webhook set {bot} {url?} |
Настройка webhook |
bot:webhook info {bot} |
Информация о webhook |
bot:webhook delete {bot} |
Удаление webhook |
bot:webhook test {bot} |
Тестирование webhook |
Фреймворк включает встроенную систему интернационализации без внешних зависимостей:
Добавьте 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 showMIT License