使用PHP的Telegram机器人库

v1.0.0 2023-08-22 13:49 UTC

This package is auto-updated.

Last update: 2024-09-08 09:20:44 UTC


README

PHPTelebot修改自radyakaze

安装方法

  • 复制文件 Bot.php
    wget https://raw.githubusercontent.com/dannsbass/bot/master/Bot.php
  • Bot.php文件包含或引入(推荐)到您的项目文件中
    require 'Bot.php';

代码示例

以下是一些您可以使用的代码示例

示例 1(对所有文本消息进行响应)

示例 1 说明:如截图所示,机器人只对文本消息进行响应,响应内容为静态文本您发送了文本消息。除了文本消息外,机器人将忽略其他消息类型,即完全不响应。以下是代码:

require 'Bot.php';

$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$bot->text('Anda mengirim pesan teks');

$bot->run();

代码说明:用于响应所有文本消息的方法是text(),其中包含一个参数(字符串),包含对用户的响应/回复。

示例 2(对特定文本消息进行特定响应)

示例 2 说明:机器人对文本消息响应为嗨,你好,对信息响应为这是信息,对/admin响应为这是管理员。此外,所有文本消息都将被响应为静态文本您发送了文本消息。以下是代码:

require 'Bot.php';

$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$bot->chat('Hai', 'Hai juga');
$bot->chat('Info', 'Ini adalah info');
$bot->chat('/admin', 'Ini adalah admin');

$bot->text('Anda mengirim pesan teks');

$bot->run();

代码说明:用于响应特定文本消息的方法是chat(),包含两个参数

  1. $request(左侧)是用户发送的文本消息。
  2. $respon(右侧)是机器人发送的文本消息回复。

示例 3(发送带有按钮/键盘的文本)

示例 3 说明:当用户发送/start命令时,机器人响应请选择以下菜单,并附带五个按钮(键盘),分别是关于菜单管理员账号帮助。如果按钮被点击,机器人将响应特定文本。以下是代码:

require 'Bot.php';

$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$bot->chat('/start', function(){
    $pesan = 'Silahkan pilih menu berikut ini';
    $tombol = Bot::keyboard('
        [TENTANG] [MENU]
        [ADMIN] [NO REKENING]
        [HELP]
    ');
    return Bot::sendMessage($pesan, ['reply'=>true, 'reply_markup'=>$tombol]);
});

$bot->chat('TENTANG', 'Kami adalah ...');
$bot->chat('MENU', 'Berikut ini adalah menu ...');
$bot->chat('ADMIN', 'Untuk menghubungi Admin, silahkan ...');
$bot->chat('NO REKENING', 'Silahkan transfer ke no rekening berikut ...');
$bot->chat('HELP', 'Untuk pertolongan, silahkan hubungi ...');

$bot->run();

代码说明:为了回复用户发送的消息,在sendMessage()方法的第二个参数数组中添加元素'reply'=>true。为了修改要发送的回复,在chat()方法的第二个参数中使用function(){}。为了创建按钮/键盘,使用静态方法keyboard(),参数是一个字符串,格式为[文本]

示例 4(创建响应式内联按钮/键盘)

示例 4 说明:当用户发送/start命令时,机器人响应欢迎用户来到Google(拼写错误,应该是欢迎用户 hehe..)。注意单词用户被加粗,而Google是一个链接,指向https://www.googgle.com。除了文本外,机器人还包含响应式按钮(内联键盘),如果点击将产生响应您点击了按钮 <anu>,除非按钮包含指向特定网站的URL。

require 'Bot.php';

$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$inline_keyboard = Bot::inline_keyboard('
    [Next|next] [Prev|preview]
    [Google|https://google.com] [Facebook|https://facebook.com]
    [Telegram|https://telegram.org]
    [Instagram|https://instagram.com] [Youtube|https://youtube.com]
    [Twitter|https://twitter.com]
    [Desainer|Danns]
');

$options = [
    'reply'=>true, // sebagai ganti 'reply_to_message_id' => $message_id
    'parse_mode'=>'html', // pilihannya: 'html' atau 'markdown'
    'disable_web_page_preview'=>true, // pilihannya: true atau false
    'reply_markup'=>$inline_keyboard
];

$bot->start("Selamat <b>user</b> datang di <a href='https://www.googgle.com'>Google</a>.", $options);

$bot->callback_query(function () {
    $msg = Bot::message();
    $data = $msg['data'];
    return Bot::answerCallbackQuery("Anda menekan tombol $data");
});

$bot->run();

代码说明:为了快速轻松地创建内联键盘,使用方法Bot::inline_keyboard(),参数是一个字符串,格式为[文本|文本][文本|URL]。方法start($respon, $options)chat('/start', function() use($respon, $options){ return Bot::sendMessage($respon, $options);})的简称,结果相同。方法callback_query()来自Telegram机器人API的事件名称(请参阅下面的列表)。它的功能是对点击内联键盘按钮进行响应。而answerCallbackQuery是Telegram的一个内置方法,用于在聊天区域的顶部显示通知作为警报。

示例 5(回复图片并附带文本)

示例说明 5:机器人响应文本 /start 并发送消息 欢迎使用机器人 ...,以及当上传照片时,发送消息 您刚刚上传了以下照片的细节: 然后列出所发送照片的详细信息。

require 'Bot.php';
$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$bot->start('Selamat datang di bot ...');

$bot->photo(function () {
    $rincian = json_encode(Bot::message(), JSON_PRETTY_PRINT);
    return Bot::sendMessage("Anda baru saja mengunggah foto dengan rincian sebagai berikut:\n$rincian");
});

$bot->run();

代码说明:机器人使用 photo() 方法响应用户发送的照片,该方法包含一个参数,即一个 函数。获取用户发送照片的详细信息是通过使用 PHPTelebot 的内置 静态方法 message() 来实现的。该方法的输出是 数组,因此需要使用 json_encode 进行编码,以便将其转换为 字符串 并发送给用户。

示例 6(用相同的照片回复照片)

示例说明 6:机器人响应文本 /start 并发送消息 请发送照片,当上传照片时,将照片返回给发送者。以下是其代码:

require 'Bot.php';
$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$bot->start('Silahkan kirim foto');

$bot->photo(function () {
    $msg = Bot::message();
    $photo = $msg['photo'][0]['file_id'];
    return Bot::sendPhoto($photo);
});

$bot->run();

代码说明:要向用户发送照片,请使用具有参数 $photo 的静态方法 sendPhoto(),其中 $photo 来自照片的 file_id。有关此方法的详细信息,请参阅 sendPhoto

示例 7(回复文本、照片、视频、文档、表情等)

require 'Bot.php';

$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$bot->start('Assalamualaikum');
$bot->chat('Hai', 'Hai juga');
$bot->chat('/help', 'Cara menggunakan bot ini adalah sebagai berikut...');
$bot->text('Kalau ada pertanyaan silahkan hubungi 08123456789');
$bot->photo('Kamu baru saja mengunggah foto');
$bot->document('Kamu baru saja mengunggah dokumen');
$bot->video('Kamu baru saja mengunggah video');
$bot->sticker('Kamu baru saja mengunggah sticker');

$bot->run();

示例说明 7:机器人响应文本 /start 并发送消息 Assalamualaikum,响应文本 Hai 并发送消息 Hai juga,以及响应文本 /help 并发送消息 使用此机器人的方法是...。除了文本消息外,机器人还会对每条文本消息回复 如有疑问,请联系 08123456789。机器人还会对用户上传的照片回复 您刚刚上传了照片,对上传的文档回复 您刚刚上传了文档 等。

示例 8(在回复中使用 parse_modereply

require 'Bot.php';

$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$bot->start('Assalamualaikum <b>user</b>',['parse_mode'=>'html']);
$bot->chat('*', 'Oke');
$bot->photo('Kamu baru saja mengunggah <code>foto</code>',['parse_mode'=>'html']);
$bot->video('Kamu baru saja mengunggah <i>video</i>', ['parse_mode'=>'html', 'reply' => true]);
$bot->document('Kamu baru saja mengunggah <a href="https://www.google.com">dokumen</a>',['parse_mode'=>'html','disable_web_page_preview'=>true]);

$bot->run();

示例 9(在 / inline keyboard 中使用按钮)

require 'Bot.php';

$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$bot->start(function () {
    $keyboard[] = [
        ['text' => 'satu', 'callback_data' => 'satu'],
        ['text' => 'dua', 'callback_data' => 'dua'],
    ];

    $reply_markup = [
        'inline_keyboard' => $keyboard
    ];

    return Bot::sendMessage('Mari kita mulai. Silahkan klik /menu atau /help', ['reply' => true, 'reply_markup' => $reply_markup]);
});

$bot->chat('satu', 'Anda memilih satu');
$bot->chat('dua', 'Anda memilih dua');
$bot->chat('tiga', 'Anda memilih tiga');
$bot->chat('empat', 'Anda memilih empat');
$bot->chat('lima', 'Anda memilih lima');

$bot->chat('/menu|/help', function () {

    $keyboard[] = [['text' => 'satu'], ['text' => 'dua']];
    $keyboard[] = [['text' => 'tiga'], ['text' => 'empat']];
    $keyboard[] = [['text' => 'lima']];

    $reply_markup = [
        'keyboard' => $keyboard,
        'resize_keyboard' => true,
        'one_time_keyboard' => true,
        'input_field_placeholder' => 'apa ini?'
    ];

    return Bot::sendMessage('Silahkan pilih menu berikut', ['reply' => true, 'reply_markup' => $reply_markup]);
});

$bot->photo(function () {
    $rincian = json_encode(Bot::message(), JSON_PRETTY_PRINT);
    return Bot::sendMessage("Anda baru saja mengunggah foto dengan rincian sebagai berikut:\n$rincian");
});

$bot->document(function () {
    $rincian = json_encode(Bot::message(), JSON_PRETTY_PRINT);
    return Bot::sendMessage("Anda baru saja mengunggah dokumen dengan rincian sebagai berikut:\n$rincian");
});

$bot->callback_query(function () {
    $msg = Bot::message();
    $data = $msg['data'];
    return Bot::answerCallbackQuery("You touch $data button");
});

$bot->run();

示例 10

require 'Bot.php';

$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$bot->start(function () {
    $user = Bot::user();
    $id = Bot::from_id();
    $nama = "<a href='tg://user?id=$id'>$user</a>";
    $tombol1 = Bot::inline_keyboard("
    [Kegiatan][Info Kajian]
    [Grup|https://t.me/PecintaIlmuGrup] [Channel|https://t.me/PecintaIlmuChannel]
    ");
    $markup = [
        'reply' => true,
        'reply_markup' => $tombol1,
        'parse_mode' => 'html'
    ];
    return Bot::sendMessage("Assalamualaikum $nama di komunitas pecinta ilmu. Silahkan pilih menu di bawah ini:", $markup);
});

$bot->callback_query(function ($data) {
    switch ($data) {
        case 'Kegiatan':
            return Bot::editMessageText('Kegiatan yang akan diadakan dalam waktu dekat adalah Dauroh Tajwid. Selengkapnya: /info_dauroh_tajwid');
        case 'Info Kajian':
            return Bot::editMessageText('Info kajian. Selengkapnya: /info_kajian');
        case 'Daftar Dauroh Tajwid':
            return Bot::sendMessage("Silahkan kirim nama Anda");
    }
});

$bot->text(function ($text) {
    switch ($text) {
        case '/info_dauroh_tajwid':
            $tombol = Bot::inline_keyboard("
            [Daftar Dauroh Tajwid]
            ");
            $markup = [
                'reply' => true,
                'reply_markup' => $tombol
            ];
            return Bot::sendMessage("Dauroh Tajwid insyaallah akan diadakan pada ... ", $markup);

        case '/info_kajian':
            $markup = [
                'reply' => true,
            ];
            return Bot::sendMessage("Kajian insyaallah akan diadakan pada ... ", $markup);
        
        default:
        return Bot::sendMessage('Terima kasih');
    }
});

$bot->run();

示例 11(编辑和删除消息)

require 'Bot.php';

$bot = new Bot('TOKEN', 'USERNAME'); //ganti dengan TOKEN dan USERNAME dari @BotFather

$bot->cmd('/edit', function(){
    $edit = Bot::sendMessage("Pesan ini akan DIEDIT");
    sleep(2);
    Bot::editMessageText($edit, ['text'=>'Pesan telah diedit']);
});

$bot->cmd('/hapus', function(){
    $hapus = Bot::sendMessage("Pesan ini akan DIHAPUS");
    sleep(2);
    Bot::deleteMessage($hapus);
});

$bot->run();

轻松创建 Inline Keyboard

使用 方法 Bot::inline_keyboard() 可以轻松创建 inline keyboard

$inline_keyboard = Bot::inline_keyboard('
    [Next|next] [Prev|preview]
    [Google|https://google.com] [Facebook|https://facebook.com]
    [Telegram|https://telegram.org]
    [Instagram|https://instagram.com] [Youtube|https://youtube.com]
    [Twitter|https://twitter.com]
    [Desainer|Danns]
');

$pesan = "Selamat <b>user</b> datang di <a href='https://www.googgle.com'>Google</a>";
$options = [
    'parse_mode'=>'html',
    'reply'=>true,
    'disable_web_page_preview'=>true,
    'reply_markup'=>$inline_keyboard
    ];

$bot->start($pesan, $options);

轻松创建 Keyboard

使用 方法 Bot::keyboard($string) 可以轻松创建普通的 keyboard(不是 inline_keyboard)。

$bot->text(function(){
    $keyboard = Bot::keyboard('
        [Tentang] [Fitur]
        [Desainer]
    ');
    return Bot::sendMessage('Silahkan pilih menu yang tersedia',['reply'=>true,'reply_markup'=>$keyboard]);
});

常用方法列表

  • start($greeting) 用于响应按下 START 按钮或向机器人发送文本 /start 的用户。参数可以是字符串,例如 start('Assalamualaikum user'),也可以是函数,例如 start(function(){ return Bot::sendMessage('Assalamualikum user');}),还可以是包含字符串和数组的两个参数,例如 start('Assalamualaikum *user*', ['parse_mode'=>'markdown']),其中数组包含要发送的消息的详细信息(请参阅 Telegram 文档)。
  • chat($request, $response) 用于响应用户请求的特定文本,例如 chat('Hai', 'Hai juga') 用于响应文本 Hai 并发送文本 Hai juga,或者 chat('Hai', function(){return Bot::sendPhoto('fotoku.jpg');}) 用于响应文本 Hai 并发送文件 fotoku.jpg。要响应用户发送的所有文本,请使用参数第一个字符串的单星号(*),例如 chat('*', '请联系 Admin')text('请联系 Admin'),两种方式效果相同。
  • chat_array($array) 用于创建格式为 chat_array([$request => $response]) 的聊天数组,例如 chat_array(['hai' => 'hai juga', 'info' => function(){return Bot::sendMessage('这是信息')}, 'oke' => '谢谢']) 等。
  • cmd($request, $response)chat($request, $response) 的别名。
  • all($response) 用于响应之前尚未设置的所有事件。
  • 事件(请参阅下面的列表)。

静态方法列表

  • keyboard($pattern) 用于使用模式 [按钮] 创建键盘,例如

    $tombol = Bot::keyboard('
        [UTAMA]
        [TENTANG] [MENU]
        [KEMBALI] [KEDEPAN]
        [INFO]
    ');`
  • inline_keyboard($pola) 用于从字符串创建内联键盘,字符串格式为 [teks|URL][teks|teks][Teks],例如

    $inline_keyboard = Bot::inline_keyboard('
        [ Next | next ] [ Back | back ]
        [ Menu 1 | menu_1 ] [ Google | https://google.com ]
        [ Info | info ]
        [ Developer ]
    ');
  • name() 用于获取机器人的用户名。

  • user() 用于获取用户的名称。

  • from_id() 用于获取用户 ID。

  • chat_id() 用于获取聊天 ID。

  • message_text() 用于获取用户发送的文本(仅当用户发送文本消息时有效)。

  • message_id() 用于获取消息 ID。

事件列表

有一些方法来自 Telegram Bot API 中的事件名称。使用方式与普通方法相同,即 $bot->nama_method(),例如:使用 $bot->text() 来回复文本消息,使用 $bot->animation() 来回复动画消息,使用 $bot->audio() 来回复音频消息等等。以下是列表

  • text
  • animation
  • audio
  • document
  • photo
  • sticker
  • video
  • video_note
  • voice
  • contact
  • dice
  • game
  • poll
  • venue
  • location
  • new_chat_members
  • left_chat_members
  • new_chat_title
  • new_chat_photo
  • delete_chat_photo
  • group_chat_created
  • supergroup_chat_created
  • channel_chat_created
  • message_auto_delete_timer_changed
  • migrate_to_chat_id
  • migrate_from_chat_id
  • pinned_message
  • invoice
  • successful_payment
  • connected_website
  • passport_data
  • proximity_alert_triggered
  • voice_chat_scheduled
  • voice_chat_started
  • voice_chat_ended
  • voice_chat_participants_invited
  • inline_query
  • callback_query
  • edited_message
  • channel_post
  • edited_channel_post