uzdevid / php-telegram-bot
用于创建Telegram机器人的PHP库
1.0.1
2024-07-08 09:03 UTC
Requires
- php: >=8.0
- ext-curl: *
- guzzlehttp/guzzle: ^7.7
README
用于轻松且完美地创建Telegram机器人的PHP库。
安装
安装此扩展的最佳方式是通过 composer。
安装命令
composer require "uzdevid/php-telegram-bot"
创建Bot的主要对象
Bot配置
$config = [ 'token' => '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', // Bot tokeni ];
可以从 @BotFather 获取Bot令牌
如果Bot仅与一个Telegram账户一起工作,则可以输入chat_id或username参数。在这种情况下,发送消息时不需要输入这些参数。
创建Bot对象
$bot = new \uzdevid\telegram\bot\Bot($config);
发送文本消息
use uzdevid\telegram\bot\message\messages\methods\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\messages\methods\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() - 以spoiler形式发送图片。
发送按钮消息
use uzdevid\telegram\bot\message\messages\methods\SendMessage; use uzdevid\telegram\bot\message\messages\keyboard\reply\ReplyButton; use uzdevid\telegram\bot\message\messages\keyboard\reply\ReplyKeyboardMarkup; use uzdevid\telegram\bot\message\messages\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\messages\methods\SendMessage; use uzdevid\telegram\bot\message\messages\keyboard\reply\ReplyKeyboardRemove; $sendMessage = new SendMessage('Bu oddiy habar'); $sendMessage->addReplyMarkup(new ReplyKeyboardRemove());
ReplyKeyboardMarkup - 用于创建按钮的类。
resizeKeyboard() - 可以更改按钮的大小。
addRow() - 为按钮创建新行。
ReplyRow - 用于创建按钮行所需的类。
addButton() - 添加按钮。
ReplyButton - 用于创建按钮的类。
addReplyMarkup() - 用于将按钮附加到消息的必要方法。
接收并处理Bot消息
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\updates\MessageUpdate; use uzdevid\telegram\bot\handler\MessageUpdateInterface; use uzdevid\telegram\bot\objects\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() - 接收请求后处理的方法。