Bot Telegram untuk Menghapus Pesan (GAS II-06)

5 menit saja |

Jika bot sebagai admin, ada kalanya perlu menghapus pesan terhadap user-user yang tidak diinginkan. Bisa jika menghapus even tertentu, misalnya user join group. Yuk, ikuti materi ini.

Pendahuluan

Ingin memfilter bad words ? Atau kata-kata kotor dari user? Ingin menghapus event join user? Dan keinginan lain untuk menghapus hal-hal yang tidak perlu..

Ya, begitulah fungsi admin bot dalam sebuah grup. Harus memiliki power untuk mengelolanya.

Di sini saya buatkan catatan materi untuk menghandle penghapusan pesan ya.

Pra-Materi

Sebelum dilanjutkan, teman-teman setidaknya sudah belajar minimal 2 materi ini :

  1. Helo Bot
  2. Custom Command - Regex Dasar

Debugging

Hal yang pertama dilakukan adalah, teman-teman harus bisa mendebug pesan. Ini sebagai dasar untuk mengetahui message_id yang akan dihapus.

Jika belum tau, silakan cek pada salah satu materi berikut :

Untuk mendebug pesan, bisa juga dibantu bot @strukturbot

Syntax

"Yuk Belajar"

Lewat Library versi 2, fungsi penghapusan pesan sudah disesuaikan dengan dokumentasi bot api di telegram.

tg.deleteMessage(chat_id, message_id)

Sederhana sekali parameter yang dibutuhkan, yakni chat_id dan message_id

Dimana chat_id adalah jendela chat nya, sedangkan message_id adalah id pesan yang akan dihapus.

Maka yang paling penting adalah mendapatkan message_id nya.

Ingat ya! Huruf besar dan kecil di sini dibedakan. Jangan salah tulis. deleteMessage bukan deletemessage.

"Yuk Belajar"

Hak Akses

Jika bot diaktifkan atau untuk grup, maka jangan lupa 2 hal ini:

  1. Jadikan admin, dan beri akses hapus pesan
  2. Disable privacy pada bot Father

Hapus Pesan

"Yuk Belajar"

Text

Proses dasar penghapuskan kita terapkan dahulu pada pesan teks.

Kita pakai regex, misalnya ketika ada user mengetik kata anjir maka kita hapus:

if (/a+n+j+i+r+/i.exec(msg.chat.id)) {
    return tg.deleteMessage(msg.chat.id, msg.message_id);
}

Sederhana bukan?

Kalau ada kata-kata lain bagiamana? Simak pelajaran regex dasar ya, sudah dijelaskan sebelumnya.

Gambar

Sedangkan pada gambar, selain message_id yang harus di dapatkan, maka pesan gambar dikirim yang harus tepat peletakkannya.

Posisi Photo

x adalah msg untuk variable di GAS.

Maka, dari debugging tersebut cukup pake if (msg.photo) yang posisinya sejajar dengan if (msg.text).

Maka:

if (msg.photo) {
    return tg.deleteMessage(msg.chat.id, msg.message_id);
}

Video

if (msg.video) {
    return tg.deleteMessage(msg.chat.id, msg.message_id);
}

Dice

if (msg.dice) {
    return tg.deleteMessage(msg.chat.id, msg.message_id);
}

Lain

Untuk lainnya, misalnya Animation (GIF), Voice, Audio, Location, dan sebagainya.

Silakan disesuaikan sendiri caranya serupa dengan diatas.

Spesifik

"Yuk Belajar"

Size

Misalnya ingin menghapus file video yang berukuran maksimal 100 MB. Maka perhatikan isi debugging jika file Video di kirim, maka JSON nya:

Posisi Size Video

Setelah tahu posisinya, kita buat 2 perkondisian (if).

Kok ada 2 if?

Lihat di screenshot di atas, kita dapatkan pathnya x.video.file_size.

Sesuai jumlah titik nya, ada 2 titik, berarti ya 2 if. Yaitu if (x.video) dan (x.video.file_size), dimana x harus diganti msg sesuai variable di GAS yang kita buat.

// deteksi ada kiriman video atau engga?
if (msg.video) {
    // deteksi ukuran video nya
    if (msg.video.file_size >= 104857600)
    return tg.deleteMessage(msg.chat.id, msg.message_id);
}

Eh, itu angka darimana segitu banyak? Ga bisa ditulis >= 100MB gitu? Ga bisa. Format dari telegram bukan human readable. Size dalam satuan byte. Maka perlu di ubah 100 MB menjadi byte.

Ga usah bingung hitung angkanya, pakai saja convert online, maka di dapat bahwa 100 MB adalah 10.4857.600.

Untuk Video, Animation, Dice, DLL juga serupa.

Pesan berFormat

"Yuk Belajar"

Ada banyak format teks dalam pesan telegram. Misalnya: tebal, miring, garis bawah, mono, coret, link, text link, dan lainnya.

Pesan berformat ini harus di deteksi dari entities nya. Silakan di debug salah satu pesan berformat ya.

Hasil debug json, entity seperti berikut:

entity

Terlihat polanya bersarang, dalam grup entities. Maka kita perlu looping. Misalnya mau menghapus pesan tebal.

Karena yang di deteksi adalah seluruh text tanpa filter (pesan tertentu), maka letakkan tepat sesudah if (msg.text)

//deteksi ada entitiesnya gak?
if (msg.entities) {
    // menentukan tipe apa yang mau dihapus
    var tipe = 'bold';

    for (index = 0; index < msg.entities.length; index++) {
        if (msg.entities[index] == tipe ) return tg.deleteMessage(msg.chat.id, msg.message_id);
    }
}

Demikian juga untuk tipe-tipe lain ya. Entities tipe diantaranya:

  • bold untuk tebal
  • italic untuk miring
  • underline untuk garis bawah
  • strikethrough untuk coret
  • code untuk tulisan mono
  • url untuk link
  • text_link untuk text yang di dalamnya ada link

Pengennya beberapa tipe sekaligus, gimana caranya?

Begini:

//deteksi ada entitiesnya gak?
if (msg.entities) {
    for (index = 0; index < msg.entities.length; index++) {
        if (msg.entities[index] == 'bold' || msg.entities[index] == 'italic' || msg.entities[index] == 'underline') return tg.deleteMessage(msg.chat.id, msg.message_id);
    }
}

Hapus Event

"Yuk Belajar"

Misalnya event edit, pinned, atau event lainnya.

Yang terpenting, sekali lagi adalah debugging ya. Keluarkan JSON nya. Caranya? Liat materi Live Code.

Join Group

JSON yang di dapatkan:

{
  "update_id": 486554930,
  "message": {
    "message_id": 85,
    "from": {
      "id": 213567634,
      "is_bot": false,
      "first_name": "bangHasan",
      "last_name": "HS",
      "username": "hasanudinhs",
      "language_code": "en"
    },
    "chat": {
      "id": -1001337122953,
      "title": "Grup Test Debugging",
      "type": "supergroup"
    },
    "date": 1603860091,
    "new_chat_participant": {
      "id": 530122912,
      "is_bot": false,
      "first_name": "BangHasan",
      "last_name": "Demo",
      "username": "banghasandemo"
    },
    "new_chat_member": {
      "id": 530122912,
      "is_bot": false,
      "first_name": "BangHasan",
      "last_name": "Demo",
      "username": "banghasandemo"
    },
    "new_chat_members": [
      {
        "id": 530122912,
        "is_bot": false,
        "first_name": "BangHasan",
        "last_name": "Demo",
        "username": "banghasandemo"
      }
    ]
  }
}

Namun, di dokumentasi Bot API Telegram yang disebut adalah new_chat_members maka itu yang akan kita pakai buat deteksi.

Message

Maka:

if (msg.new_chat_members) {
    return tg.deleteMessage(msg.chat.id, msg.message_id);
}

Left Group

Serupa dengan di atas, sesuai juga dengan dokumentasi bot API nya. Maka:

if (msg.left_chat_member) {
    return tg.deleteMessage(msg.chat.id, msg.message_id);
}

Join / Left

Jika digabung menjadi satu maka:

if (msg.new_chat_members || msg.left_chat_member) {
    return tg.deleteMessage(msg.chat.id, msg.message_id);
}

Event Lain

Banyak event lain, misalnya: Edit Pesan, Edit Poll, Game, Migrasi Super Group, dan sebagainya.

Untuk event lain juga serupa, silakan di debug terlebih dahulu. Dari struktur pesan, kita bisa menentukan dimana letak koding ditempatkan, dan juga field yang akan kita bidik.

"Yuk Belajar"

Video

Yang bingung dengan penjelasan via blog, bisa simak di videonya:

Penutup

"Yuk Belajar"

Cukup segini dulu materi penghapusan pesan, agar dipahami secara mendalam agar dapat berkembang sesuai kebutuhannya masing-masing.

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