(GAS-20) Cara Membatasi Akses Bot Telegram

3 menit saja |

Bagaimana cara membatasi hak akses bot di Telegram? Maunya bot hanya bekerja di grup tertentu saja. Atau bisa membedakan hak akses, user admin atau pemilik bot? Tutorial lanjutan yang ini bisa kalian pelajari.

Jenis Pembatasan

Ada banyak cara untuk membatasi akses. Kebanyakan menggunakan 3 metode berikut ini

  1. Berdasarkan user ID (from.id)
  2. Berdasarkan Chat Room (chat.id)
  3. Berdasarkan hak akses grup di Telegram

Pada artikel ini akan kita bahasa berdasarkan user id dan chat id nya.

Kita akan tambahkan secara sendiri-sendiri, atau secara bersamaan.

DATA JSON

Data yang diterima, secara umum seperti ini:

{
  "message": {
    "message_id": 212298,
    "from": {
        "id": 213567634,
        "is_bot": false,
        "first_name": "bang",
        "last_name": "Hasan",
		"username": "hasanudinhs",
		"language_code": "en"
	},
	"chat": {
		"id": -100104631111,
		"title": "Nama Grup",
		"username": "namausergrup",
		"type": "supergroup"
	},
	"date": 1597810400,
	"text": "isi pesan apa aja"
}

Kita singkat dalam sebuah variable bernama msg.

Sehingga untuk mengambil data text, maka msg.text

Limitasi Satuan

User ID

Metode ini adalah dengan mencocokan siapa yang mengirim pesan dengan data JSON yang msg.from.id dengan ID yang sudah ditentukan.

Fungsi ini biasa dipergunakan untuk:

  • membedakan user owner bot
  • membuat user berbeda perlakukan, baik sebagai admin, friend atau blacklist
  • tidak peduli di grup mana saja sepanjang bot ada, bisa membedakan user yang sudah ditandai.

Kita ambil contoh kasus, kita akan membatasi perintah /ping pada bot hanya untuk user ID kita sendiri.

Kode sebelumnya:

// jika user ketik /ping, bot akan jawab Pong!
if ( /\/ping/i.exec(msg.text) ){
    return tg.kirimPesan(msg.chat.id, '<b>Pong!</b>', 'HTML');
}

maka kita sisipkan pengcekkan sebelum sesudah if, menjadi:

// jika user ketik /ping, bot akan jawab Pong!
if ( /\/ping/i.exec(msg.text) ){
    // ganti dan sesuaikan user ID nya
    if (msg.from.id == 1234567890)
        return tg.kirimPesan(msg.chat.id, '<b>Pong!</b>', 'HTML');
}

Dengan begitu, jika ada pesan masuk /ping hanya user dengan ID 1234567890 yang akan di respon.

Chat ID

Metode ini mirip dengan pencocokan User ID, hanya saja yang kita cocokkan adalah group / chat ID nya.

Chat ID selalu sama dengan User ID jika berada di Private.

Fungsi ini bisa dipergunakan untuk:

  • Pembatasan bot agar bekerja pada grup tertentu saja
  • Membuat blacklist bot tidak mau jalan di grup tertentu
  • Membuat grup tertentu menjadi spesial untuk perintah-perintah tertentu.

Maka caranya sama dengan diatas, misalnya untuk membatasi perintah /ping HANYA bekerja di grup tertentu maka:

// jika user ketik /ping, bot akan jawab Pong!
if ( /\/ping/i.exec(msg.text) ){
    // ganti dan sesuaikan chat ID (grup) nya
    if (msg.chat.id == 1234567890)
        return tg.kirimPesan(msg.chat.id, '<b>Pong!</b>', 'HTML');
}

Beda di script tersebut adalah msg.from.id diganti dengan msg.chat.id (perhatikan data JSON atas untuk mempermudah pemahaman).

Limitasi Banyak

Semua Command

Jika contoh diatas untuk membatasi perintah-perintah tertentu pada bot saja, lalu bagaimana jika ingin membatasi ke seluruh perintah bot? Ditulis satu-satu di setiap perintah? Tidak perlu. Kita letakkan saja di tempat atasnya (atau di skup yang lebih lebar).

// detek klo ada pesan dari user
  if (update.message) { 

    // penyederhanaan variable
    var msg = update.message;

Tambahkan tepat dibawahnya itu:

    if (msg.chat.id !== 1234567890) return false;

Artinya: jika chat ID nya bukan di grup yang kita tentukan, maka bot akan diem aja tidak merespon apa-apa. Karena langsung di return

Banyak ID

Misalkan pengen lebih banyak user ID atau Chat ID yang diizinkan / ditolak. Scriptnya bagaimana?

Kita buat dulu sebuah array, untuk mendata ID yang akan dibatasi / diizinkan:

    // sesuaikan user ID / chat ID yang akan dilimit. Ini hanya contoh saja.
    var punyaAkses = [ 12345, 23456, 34567, 45678, 564789];

Kemudian kita buat fungsi sendiri untuk mendeteksi:

    function diizinkan(id) {
        if (punyaAkses.indexOf(id) > -1) {
            return true;
        } else {
            return false;
        }        
    }

Dengan menggunakan fungsi indexOf() kita periksa, apakah ID tersebut ada di dalam data Arraynya punyaAkses.

Jika tidak ketemu hasilnya -1, jika ketemu maka dihasilkan nomor index nya mulai dari 0.

Penggunaan

Cara penggunaannya, ganti saja script sebelumnya:

if (msg.chat.id == 1234567890) {
    // ...codemu
}

dengan

if ( diizinkan(msg.chat.id) ) {
    // ...codemu
}

Sebaliknya, jika ingin pembatasan HANYA untuk user yang punya akses saja, selain itu ditolak maka:

if ( ! diizinkan(msg.chat.id) ) return false;

Perhatikan ada tanda seru ! nya ya. Itu artinya TIDAK. Jadi cara bacanya:

jika ID chatnya tidak diizinkan, maka gak usah di respon.

Youtube

Masih bingung? Coba lihat video nya ya..

Penutup

Sangat disarankan bergabung pada group Telegram @botIndonesia bersama ribuan programmer lainnya. Share dan care, diskusi dan produksi bersama.