uzdevid / yii2-telegram-bot
用于创建Telegram机器人的PHP库
Requires
- php: >=8.0
- guzzlehttp/guzzle: ^7.7
- yiisoft/hydrator: ^1.1.0
Requires (Dev)
- roave/security-advisories: dev-latest
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() - 接收请求后处理的方法。