Last active
December 23, 2022 14:52
-
-
Save banghasan/754fa0615d8db98b00f724c2779e2dfd to your computer and use it in GitHub Desktop.
Sample Bot Telegram - PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
BOT PENGANTAR | |
Materi EBOOK: Membuat Sendiri Bot Telegram dengan PHP | |
Ebook live http://telegram.banghasan.com/ | |
oleh: bang Hasan HS | |
id telegram: @hasanudinhs | |
email : [email protected] | |
twitter : @hasanudinhs | |
disampaikan pertama kali di: Grup IDT | |
dibuat: Juni 2016, Ramadhan 1437 H | |
nama file : PertamaBot.php | |
change log: | |
revisi 1 [15 Juli 2016] : | |
+ menambahkan komentar beberapa line | |
+ menambahkan kode webhook dalam mode comment | |
Pesan: baca dengan teliti, penjelasan ada di baris komentar yang disisipkan. | |
Bot tidak akan berjalan, jika tidak diamati coding ini sampai akhir. | |
*/ | |
//isikan token dan nama botmu yang di dapat dari bapak bot : | |
$TOKEN = "TokenBotmu"; | |
$usernamebot= "@PertamaBot"; // sesuaikan besar kecilnya, bermanfaat nanti jika bot dimasukkan grup. | |
// aktifkan ini jika perlu debugging | |
$debug = false; | |
// fungsi untuk mengirim/meminta/memerintahkan sesuatu ke bot | |
function request_url($method) | |
{ | |
global $TOKEN; | |
return "https://api.telegram.org/bot" . $TOKEN . "/". $method; | |
} | |
// fungsi untuk meminta pesan | |
// bagian ebook di sesi Meminta Pesan, polling: getUpdates | |
function get_updates($offset) | |
{ | |
$url = request_url("getUpdates")."?offset=".$offset; | |
$resp = file_get_contents($url); | |
$result = json_decode($resp, true); | |
if ($result["ok"]==1) | |
return $result["result"]; | |
return array(); | |
} | |
// fungsi untuk mebalas pesan, | |
// bagian ebook Mengirim Pesan menggunakan Metode sendMessage | |
function send_reply($chatid, $msgid, $text) | |
{ | |
global $debug; | |
$data = array( | |
'chat_id' => $chatid, | |
'text' => $text, | |
'reply_to_message_id' => $msgid // <---- biar ada reply nya balasannya, opsional, bisa dihapus baris ini | |
); | |
// use key 'http' even if you send the request to https://... | |
$options = array( | |
'http' => array( | |
'header' => "Content-type: application/x-www-form-urlencoded\r\n", | |
'method' => 'POST', | |
'content' => http_build_query($data), | |
), | |
); | |
$context = stream_context_create($options); | |
$result = file_get_contents(request_url('sendMessage'), false, $context); | |
if ($debug) | |
print_r($result); | |
} | |
// fungsi mengolahan pesan, menyiapkan pesan untuk dikirimkan | |
function create_response($text, $message) | |
{ | |
global $usernamebot; | |
// inisiasi variable hasil yang mana merupakan hasil olahan pesan | |
$hasil = ''; | |
$fromid = $message["from"]["id"]; // variable penampung id user | |
$chatid = $message["chat"]["id"]; // variable penampung id chat | |
$pesanid= $message['message_id']; // variable penampung id message | |
// variable penampung username nya user | |
isset($message["from"]["username"]) | |
? $chatuser = $message["from"]["username"] | |
: $chatuser = ''; | |
// variable penampung nama user | |
isset($message["from"]["last_name"]) | |
? $namakedua = $message["from"]["last_name"] | |
: $namakedua = ''; | |
$namauser = $message["from"]["first_name"]. ' ' .$namakedua; | |
// ini saya pergunakan untuk menghapus kelebihan pesan spasi yang dikirim ke bot. | |
$textur = preg_replace('/\s\s+/', ' ', $text); | |
// memecah pesan dalam 2 blok array, kita ambil yang array pertama saja | |
$command = explode(' ',$textur,2); // | |
// identifikasi perintah (yakni kata pertama, atau array pertamanya) | |
switch ($command[0]) { | |
// jika ada pesan /id, bot akan membalas dengan menyebutkan idnya user | |
case '/id': | |
case '/id'.$usernamebot : //dipakai jika di grup yang haru ditambahkan @usernamebot | |
$hasil = "$namauser, ID kamu adalah $fromid"; | |
break; | |
// jika ada permintaan waktu | |
case '/time': | |
case '/time'.$usernamebot : | |
$hasil = "$namauser, waktu lokal bot sekarang adalah :\n"; | |
$hasil .= date("d M Y")."\nPukul ".date("H:i:s"); | |
break; | |
// balasan default jika pesan tidak di definisikan | |
default: | |
$hasil = 'Terimakasih, pesan telah kami terima.'; | |
break; | |
} | |
return $hasil; | |
} | |
// jebakan token, klo ga diisi akan mati | |
// boleh dihapus jika sudah mengerti | |
if (strlen($TOKEN)<20) | |
die("Token mohon diisi dengan benar!\n"); | |
// fungsi pesan yang sekaligus mengupdate offset | |
// biar tidak berulang-ulang pesan yang di dapat | |
function process_message($message) | |
{ | |
$updateid = $message["update_id"]; | |
$message_data = $message["message"]; | |
if (isset($message_data["text"])) { | |
$chatid = $message_data["chat"]["id"]; | |
$message_id = $message_data["message_id"]; | |
$text = $message_data["text"]; | |
$response = create_response($text, $message_data); | |
if (!empty($response)) | |
send_reply($chatid, $message_id, $response); | |
} | |
return $updateid; | |
} | |
// hapus baris dibawah ini, jika tidak dihapus berarti kamu kurang teliti! | |
die("Mohon diteliti ulang codingnya..\nERROR: Hapus baris atau beri komen line ini yak!\n"); | |
// hanya untuk metode poll | |
// fungsi untuk meminta pesan | |
// baca di ebooknya, yakni ada pada proses 1 | |
function process_one() | |
{ | |
global $debug; | |
$update_id = 0; | |
echo "-"; | |
if (file_exists("last_update_id")) | |
$update_id = (int)file_get_contents("last_update_id"); | |
$updates = get_updates($update_id); | |
// jika debug=0 atau debug=false, pesan ini tidak akan dimunculkan | |
if ((!empty($updates)) and ($debug) ) { | |
echo "\r\n===== isi diterima \r\n"; | |
print_r($updates); | |
} | |
foreach ($updates as $message) | |
{ | |
echo '+'; | |
$update_id = process_message($message); | |
} | |
// update file id, biar pesan yang diterima tidak berulang | |
file_put_contents("last_update_id", $update_id + 1); | |
} | |
// metode poll | |
// proses berulang-ulang | |
// sampai di break secara paksa | |
// tekan CTRL+C jika ingin berhenti | |
while (true) { | |
process_one(); | |
sleep(1); | |
} | |
// metode webhook | |
// secara normal, hanya bisa digunakan secara bergantian dengan polling | |
// aktifkan ini jika menggunakan metode webhook | |
/* | |
$entityBody = file_get_contents('php://input'); | |
$pesanditerima = json_decode($entityBody, true); | |
process_message($pesanditerima); | |
*/ | |
/* | |
* ----------------------- | |
* Grup @botphp | |
* Jika ada pertanyaan jangan via PM | |
* langsung ke grup saja. | |
* ---------------------- | |
* Just ask, not asks for ask.. | |
Sekian. | |
*/ | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment