Bot Telegram Custom Command - Regex Dasar (GAS II-03)

7 menit saja |

Eh, sudah dua minggu-an ternyata ya belum update. Kita lanjutkan, tapi dengan materi ringan saja ya. Sebelum berlanjut ke materi rumit atau komplek. Kita modif bot dengan berbagai kondisi, fokus pendalaman materi soal regex. Karena ini dasar materi per-bot-an,

Pendahuluan

Sebelum materi ini ditulis, aku sudah buat video nya. Tapi gak jadi di upload / publish. Yakni, materi fokus yang membahas regex. Penyajian regex per kasus, mungkin akan lebih mengena dibandingkan fokus total dengan materi murni kali ya.

Untuk itulah materi sederhana ini dibuat.

Ruang Lingkup

Materi sebenarnya adalah fokus pada pemakaman regex (regular expression). Jadi bagi teman-teman yang ingin memperdalam sendiri, silakan di google ya. Ada banyak sekali di sana. Namun yang berbahasa Indonesia sepertinya masih kurang.

Dalam materi ini, saya tidak bahas tentang regex itu sendiri. Apa itu regex, tidak dibahas setidaknya dimateri ini.

Tapi sengaja ingin berfokus terhadap kasus yang sering dipergunakan pada bot. Itu saja, so.. let’s go!

Library

Menggunakan versi-2 ya.

🔖 Cekidot: Library Telegram Ver-2

Pra-Materi

🔖 Ikuti terlebih dahulu materi Halo Bot

"Yuk Belajar"

ReGex

ReGex merupakan kepanjangan dari Regular Expression. Definisinya ya cari di google hehe..

Kenapa REGEX?

Mungkin awalnya rumit, tapi setelah mengalami sendiri komplek kasus yang harus dikelola. Maka regex ini menjadi kunci dalam pembuatan bot (proses menangkap/memfilter/mengubah/atau menyajikan data).

Penggunakan syntax seperti if (pesan == text) akan sulit, rumit, bahkan panjang sekali untuk menghandlenya.

Maka BELAJARlah REGEX! Itu yang selalu saya tekankan pada materi ataupun library.

Syntax

🔖 Rumusnya selalu diawali dengan: /pola/flag

Dengan pola adalah yang akan kita tangkap.

Sementara flag adalah kondisi tertentu yang diinginkan, misalnya tidak membedakan huruf besar dan huruf kecil pada pola, maka bisa pakai flag i.

Tanda Khusus

Tanda khusus yang memiliki arti spesial pada regex. Ga semua harus dihapali, tapi ini yang sering dipakai ya:

  • ^ caping atas artinya diawal kata / kalimat
  • $ dolar, artinya diakhir kalimat
  • . titik berarti sembarang karakter, kecuali ganti baris
  • * artinya 0 karakter atau lebih (banyak)
  • + artinya 1 karakter atau lebih (banyak)
  • ? artinya 0 atau 1. Misal: https? artinya boleh http atau https
  • \b penanda satu kata penuh
  • {m,n} artinya minimal m dan maksimal n, misal A{1,3} artinya huruf A minimal 1 dan maksimal 3
  • [] grup karakter ATAU sebanyak 1 aja, misal [abc] boleh a, b atau c.
  • [^abc] grup yang BUKAN berisi itu di dalamnya
  • | karakter ATAU
  • \w huruf alphabetnumeric. Senilai pola: [a-zA-Z0-9_]
  • \n ganti baris
  • \s spasi
  • \d artinya digit atau angka, senilai pola [0-9]
  • (group) tanda kurung, berarti hasilnya digrup
  • (?:group) digrup tapi tidak dimasukkan dalam tangkapan

Masih banyak tanda khusus, namun itu yang bakal sering kita pakai ya.

Flag

Flag yang sering dipergunakan:

  • i ignore case untuk tidak membedakan huruf besar dan kecil
  • g global mencari semua pola yang cocok
  • m multiline cari di semua baris

Masih ada beberapa flag, namun diawal kita perlu mengenal 3 itu saja dulu. Untuk pendahuluan yang mudah dihapal dan sering dipakai.

Escape

Karena karakter / dipakai sebagai penanda regex. Maka jika ingin menuliskan karakter itu harus di escape (pengecualian) dengan karakter backslash \.

Misal:

User: /ping
Bot : Pong!

Pola Salah:

//ping/i

Seharusnya:

/\/ping/i

Garis miring / diawal ping, HARUS di escape dengan backslash : \/.

Berlaku juga untuk karakter-karakter khusus lainnya, misalnya titik, menjadi \., buka kurung \( dst.

PENTING! Escape karakter-karakter khusus seperti pada tanda diatas jika ingin ditangkap.

"Yuk Belajar"

Custom Command

Ingat ya, letakkan code pada materi ini pada baris sesudah:

// kalau mau kembangin sendiri menjadi bot interaktif, code nya taruh di bawah ini
// -- mulai custom text --

Okay, mari kita fokus…

Echo

Ini adalah dasar pengembangan pertama dari bot.

Echo 1 Basic

Kita buat bot untuk memantulkan isi text.

Misal:

User: !echo Halo mas
Bot : Halo mas

Bagaimana caranya?

Pola nya adalah:

/^!echo (.+)/i

Artinya:

  • ^ kata !echo harus diawal kalimat. Tidak ditengah atau diakhir.
  • () adalah grup pertama untuk hasil yang ditangkap.
  • . sembarang karakter kecuali ganti baris
  • + perulangan sembarang karakter, apa aja minimal 1 sampai tidak terbatas

Pemakaiannya:

// membuat custom echo
var pola = /^!echo (.+)/i;
if ( cocok = pola.exec(msg.text) ){
    return tg.sendMsg(msg, cocok[1]);
}

Silakan di test, jangan lupa di deploy baru.

Mudah bukan?

Echo 2 Angka

Kasus lain, ada yang ingin menangkap dengan angka saja. Misalnya kebutuhannya disuruh memasukkan umur.

User: !echo 21
Bot : 21

Selain angka akan diabaikan.

Pola nya adalah:

/^!echo (\d+)/i

Artinya yang akan kita tangkap dengan grup kurung () adalah \d adalah angka saja, dengan terserah panjangnya asalkan minimal 1 karakter angka (makna tanda +).

Pemakaiannya:

// membuat custom echo angka
var pola = /^!echo (\d+)/i;
if ( cocok = pola.exec(msg.text) ){
    return tg.sendMsg(msg, cocok[1]);
}

Echo 3 TTL

Misalnya disuruh memasukkan tempat tanggal lahir.

User: !echo Kediri, 23-06-2001
Bot : Kamu lahir di Kediri, tanggal 23-06-2001

Pola deteksi tanggal sederhananya adalah:

/^!echo (.*),\s*(\d\d-\d\d-\d{4})$/i

Artinya :

  • Detek tempat lahir dengan karakter apa saja (.*) sampai ketemu koma.
  • \s* sesudah koma, ada spasi atau tidak, tetep kedetek
  • \d artinya angka, jika \d\d artinya angka dijejer 2x (atau 2 digit)
  • \d{4} artinya angka yang dijejer 4

Pemakaiannya:

// membuat custom echo angka
var pola = /^!echo (.*),\s*(\d\d-\d\d-\d{4})$/i;
if ( cocok = pola.exec(msg.text) ){
    return tg.sendMsg(msg, "Kamu lahir di "+cocok[1]+", tanggal "+cocok[2]);
}

Dengan pola sederhana ini, secara umum bisa ditangkap dan mudah dipahami.

Namun, ada yang ingin lebih memfilternya atau membuat lebih detail.

Echo 3 TTL Komplek

Pola kompleksnya:

/^!echo (.*),\s*((0?[1-9]|[12][0-9]|3[01])-(0?[1-9]|1[012])-\d{4})/i

Ga usah diartikan haha.. Cuma buat pelengkap artikel saja.

Intinya, mirip dengan sebelumnya. Hanya mendeteksi misalnya tanggal tidak boleh lebih dari 31, dan bulan tidak boleh lebih dari 13.

Echo 4 Multiline

Pada beberapa kasus, ada yang ingin menangkap berbaris-baris pesan.

Contoh ini dapat kita temui pada kasus bot hastags.

User:

!echo Puisi Rahasia

Aku akan menulis
sebuah puisi rahasia
tapi ini rahasia ya
rahasia sekali

Maaf, ini rahasia.
Selesai.

Contohnya seperti itu. Bagaimana menangkapnya?

Ada banyak cara atau metode. Namun, cara yang saya sukai adalah dengan menangkap pesan statisnya (!echo), kemudian membuangnya. Dengan demikian, pesan dinamisnya akan kita dapatkan akhirnya.

Pesan statisnya dikit, jadi itu saja yang ditangkap. Maka pesan statis dibuatkan group.

Pola:

/^(!echo )/i

Dan kodenya seperti ini kira-kira:

var pola = /^(!echo )/i;
if ( cocok = pola.exec(msg.text) ){
    // buang pola yang di dapatkan dengan menggantinya dengan karakter kosong atau tidak ada
    var pesan = msg.text.replace(cocok[1],'');
    return tg.sendMsg(msg, pesan);
}

Dengan cara demikian, kita akan mendapatkan isi pesan secara penuh bebas diisi karakter apa saja.

"Halooo"

Sapaan Halo

Agar bot terkesan ramah, kadang perlu kita buat bot sapaan.

Kadang ga cukup kata halo, ada yang yang nulisnya macam-macam: halo, hallo, hai, dan seterusnya.

Level 1:

Data semua kata yang memungkinkan dipakai:

pola /(halo|hallo)/i

Artinya, pola yang akan ditangkap kata halo, atau hallo yang letaknya dimana saja maka bot akan meresponnya.

Kodenya seperti ini kira-kira:

var pola = /(halo|hallo|helo|hello|hai|hay)/i;
if (pola.exec(msg.text) ){
    return tg.sendMsg(msg, 'Halo juga!');
}

Level 2:

pola /halo+/i

pesan ditangkap: halo, haloo, haloooo … huruf o bisa panjang

o minimal 1, maksimal banyakkkk

Level 3

pola /hall?o+/i

pesan ditangkap: mirip level 2, hanya bisa doble l. Halo, hallo, hallooo.. dst

l kedua, boleh ada boleh tidak.

Level 4

pola /h[ae]ll?o+/i

pesan ditangkap: bisa halo, helo, hallo, hello, halooo.. dst

huruf a atau e, pilih salah satu. Tapi tidak keduanya.

Level 5

pola /(h[ae]ll?o+|h[ae]i+)/i

pesan ditangkap: mirip dengan level 4, ditambahkan kata hai, hei, haii, heii

"Yuk Belajar"

Video

Cuzz.. langsung saja simak.

Penutup

Segitu dulu deh, kawatir kebanyakan malah ga masuk diotak kan hehe..

Banyak praktek dan mencoba saja ya. Dan semoga materi kali ini bisa diserap dan ditangkap :-D

Referensi

Akhir Kata

Jika ada pertanyaan, saran atau masukkan silakan didiskusikan. Jika ingin live dan biasanya tanggapan juga lebih cepat, sangat disarankan bergabung pada group Telegram @botIndonesia.