dannsbass / bot
使用PHP的Telegram机器人库
Requires
- php: >=8.0.0
This package is auto-updated.
Last update: 2024-09-08 09:20:44 UTC
README
安装方法
- 复制文件
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()
,包含两个参数
$request
(左侧)是用户发送的文本消息。$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_mode
和 reply
)
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