uzdevid/yii2-telegram-bot

用于创建Telegram机器人的PHP库

2.0.2 2024-04-05 09:48 UTC

This package is auto-updated.

Last update: 2024-09-05 10:38:45 UTC


README

PHP中创建简洁且完善的Telegram机器人所需的库。

安装

安装此扩展的最佳方式是通过 composer

使用以下命令进行安装:

composer require "uzdevid/php-telegram-bot"

创建机器人主要对象

机器人设置

$config = [
    'token' => '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', // Bot tokeni
];

您可以从 @BotFather 获取机器人令牌

如果机器人只使用一个Telegram账号运行,您可以输入chat_id或username参数。在这种情况下,发送消息时不需要这些参数

创建机器人对象

$bot = new \uzdevid\telegram\bot\Bot($config);

发送文本消息

use uzdevid\telegram\bot\Message\Message\Method\SendMessage;

$bot->sender()
    ->chatId(123456789) // yoki ->username('@uzdevid')
    ->method(new SendMessage('Salom. Bu matnli habar'))
    ->send();

chatId() - 接收消息的chat id。

sender() - 用于发送请求。

method() - 接收发送的请求。

send() - 发送请求。

发送图片消息

发送图片消息与发送文本消息类似。不同之处在于发送图片时需要将 method() 方法传递 SendPhoto 对象。

use uzdevid\telegram\bot\Message\Message\Method\SendPhoto;

$sendPhoto = new SendPhoto('https://uzdevid.com/img/logo.png');
$sendPhoto->caption('Bu rasmli habar')->hasSpoiler();

$bot->sender()
    ->chatId(123456789)
    ->method($sendPhoto)
    ->send();

SendPhoto - 用于发送图片消息的必需类。

caption() - 图片消息的文本。

hasSpoiler() - 以预告片的形式发送图片。

发送按钮消息

use uzdevid\telegram\bot\Message\Message\Method\SendMessage;
use uzdevid\telegram\bot\Message\Message\Keyboard\reply\ReplyButton;
use uzdevid\telegram\bot\Message\Message\Keyboard\reply\ReplyKeyboardMarkup;
use uzdevid\telegram\bot\Message\Message\Keyboard\reply\ReplyRow;

$replyMarkup = new ReplyKeyboardMarkup();
$replyMarkup->resizeKeyboard()->addRow(
    (new ReplyRow())
        ->addButton(new ReplyButton('Tugma 1'))
        ->addButton((new ReplyButton('Joylashuv uchun tugma'))->requestLocation())
        ->addButton((new ReplyButton('Telefon raqam uchun tugma'))->requestContact())
);

$sendMessage = new SendMessage('Bu tugmali habar');
$sendMessage->addReplyMarkup($replyMarkup);

$bot->sender()
    ->chatId(123456789)
    ->method($sendMessage)
    ->send();

发送按钮消息后,要从下一个消息中删除按钮,需要以以下方式发送新消息

use uzdevid\telegram\bot\Message\Message\Method\SendMessage;
use uzdevid\telegram\bot\Message\Message\Keyboard\reply\ReplyKeyboardRemove;

$sendMessage = new SendMessage('Bu oddiy habar');
$sendMessage->addReplyMarkup(new ReplyKeyboardRemove());

ReplyKeyboardMarkup - 用于创建按钮的类。

resizeKeyboard() - 可选:允许更改按钮的大小。

addRow() - 为按钮创建新行。

ReplyRow - 用于创建按钮行的类。

addButton() - 添加按钮。

ReplyButton - 用于创建按钮的类。

addReplyMarkup() - 将按钮与消息绑定并发送的方法。

从机器人接收消息并进行处理

index.php

namespace App;

$requestBody = json_decode(file_get_contents('php://input'), true);

$bot->handler($requestBody)
    ->on(ChatStart::class)

$requestBody - 来自Telegram的请求。

handler() - 接收和处理的请求方法。

on() - 用于添加接收请求的方法。

ChatStart.php

namespace App\Handlers;

use uzdevid\telegram\bot\Handler\update\Message\MessageUpdate;use uzdevid\telegram\bot\Handler\update\Message\MessageUpdateInterface;use uzdevid\telegram\bot\Type\Message;

class ChatStart extends MessageUpdate implements MessageUpdateInterface {
    public static function canHandle(Bot $bot, Message $message): bool {
        return $message->text == '/start';
    }
    
    public function handle(Bot $bot, Message $message): void {
        $bot->sender()
            ->chatId($message->chat->id)
            ->method(new SendMessage('Salom. Botga xush kelibsiz'))
            ->send();
    }
}

canHandle() - 检查是否接收请求。

handle() - 接收请求后处理的方法。