Telegram机器人与Laravel集成

0.4.0 2023-05-10 22:55 UTC

This package is auto-updated.

Last update: 2024-09-11 02:04:41 UTC


README

Laravel与Telegram集成。基于telegram bot types

安装

composer require madmagestelegram/laravel

概念

主要概念

主要概念是为来自Telegram的更新创建处理器。

它应实现抽象处理器

处理器示例

有一个内置的处理器用于处理Telegram命令

服务提供者

要定义自定义处理器或telegram-command-handler,需要创建并注册自己的服务提供者,并从\MadmagesTelegram\Laravel\HandlerServiceProvider扩展它

<?php 
declare(strict_types=1);

namespace App\Providers;

class TelegramServiceProvider extends \MadmagesTelegram\Laravel\HandlerServiceProvider
{

    /** @var array Handlers for telegram commands */
    protected array $telegramCommands = [];

    // Other handlers
    protected array $messageHandlers = [
        // This handler is for telegram-commands,
        // i.e. it makes $this->telegramCommands working
        \MadmagesTelegram\Laravel\Handler\Command\CommandHandler::class
    ];
    protected array $editMessageHandlers = [];
    protected array $channelPostHandlers = [];
    protected array $editedChannelPostHandlers = [];
    protected array $inlineQueryHandlers = [];
    protected array $chosenInlineResultHandlers = [];
    protected array $callbackQueryHandlers = [];
    protected array $preCheckoutQueryHandlers = [];
    protected array $shippingQueryHandlers = [];
    protected array $pollAnswerHandlers = [];
    protected array $pollHandlers = [];
}

命令处理器

为处理Telegram命令(例如,/start)而构建的命令处理器。

所有命令都应该实现抽象命令,并应在自己的服务提供者的\MadmagesTelegram\Laravel\HandlerServiceProvider::$telegramCommands中定义

<?php declare(strict_types=1);

namespace App\Module\Telegram\Command;

use MadmagesTelegram\Laravel\Handler\Command\AbstractCommand;
use MadmagesTelegram\Laravel\WebhookClient;
use MadmagesTelegram\Types\Type\Message;
use Illuminate\Http\JsonResponse;

class Start extends AbstractCommand
{

    private WebhookClient $client;

    public function __construct(WebhookClient $client)
    {
        // It possible to response, during webhook request 
        // https://core.telegram.org/bots/api#making-requests-when-getting-updates
        $this->client = $client;
    }
    
     public function getName(): string
    {
        return 'start';
    }

    public function execute(Message $message, bool $isPrivate): ?JsonResponse
    {
        return $this->client->sendMessage($message->getChat()->getId(), 'Hello there !');
    }
}

并注册它

<?php 
declare(strict_types=1);

namespace App\Providers;

class TelegramServiceProvider extends \MadmagesTelegram\Laravel\HandlerServiceProvider
{
    protected array $telegramCommands = [
        \App\Module\Telegram\Command\Start::class
    ];
}

Laravel命令

madmagestelegram:registerWebhook - 在Telegram中注册webhook。这使得所有处理器都能工作