Lanjutan: Customisasi Reminder Sholat Bot Telegram (GAS II-13)

3 menit saja |

Setelah materi pengingat waktu sholat v2 kemarin dibuat, muncul banyak pertanyaan dan komentar. Beberapa hal perlu kita bahas lebih lanjut, agar lebih sesuai kebutuhan.

Pendahuluan

Pra-Materi

Ini adalah materi lanjutan Reminder Jadwal Sholat v2.

Jadi bagi yang belum praktek yang materi tersebut, dipersilakan mencoba dan menjalankan terlebih dahulu.

Kasus

Berikut ini beberapa kasus yang mungkin terjadi pada kalian:

  • Ingin broadcast atau remindernya ke beberapa grup atau channel sekalian
  • Jika hari jum’at, informasi dzuhur diganti menjadi Sholat Jum'at
  • Menambah reminder sendiri, misalnya untuk Sahur atau QL (qiyamul lail).
  • Fitur auto hapus sesudah beberapa menit, agar tidak spamming

Sebenarnya masih ada beberapa kasus lagi, namun karena tidak banyak yang request jadi tidak saya masukkan di sini.

Yuk mari kita mulai menambahkan aksesorisnya dan menambal kasus tersebut.

+ Broadcast

Kita mulai dari penambahan atau modifikasi, agar broadcast bisa dilakukan dibeberapa grup sekaligus.

Cuma ada 2 yang harus diubah.

1. tujuanID

Isikan nilai dalam bentuk array.

Awalnya:

var tujuanID = -1234567891;

Ubah menjadi :

//  menjadi array, multi grup/channel
var tujuanID = [ -1234567891 ] ;

Jika nanti dua grup atau lebih, tambahkan dibelakangnya:

//  menjadi array, multi grup/channel
var tujuanID = [ -1234567891, -987654321 ] ;

2. sendMessage

Ubah fungsi kirim yang lama :

if (kirim) {
    try {
      tg.sendMessage(tujuanID, pesan, 'HTML')
    } catch (e) {
      tg.sendMessage(adminBot, e.message)
    }
  }

pada bagian tg.sendMessage(tujuanID, pesan, 'HTML')

tujuanID.forEach((id) => {
    var res = tg.sendMessage(id, pesan, 'HTML')
})

Sudah, itu saja.

Multi Grup

+ Sholat Jum’at

Caranya, kita tambahkan kode di atasnya kode pesan = pesan.

kode bisa dilihat pada video youtube, agar ada pembeda blog dan video

+ New Reminder

Misalnya untuk menambah waktu sholat malam (Qiyamul Lail), Tahajud, waktu sahur, Waktu Belajar, atau waktu-waktu rutinitas lainnya.

Kita buat contoh adalah membuat reminder baru untuk Tahajud, jam 2.

Tutorial dan kode nya bisa dilihat pada video youtube juga

+ Anti Spamm (Auto Hapus)

Dikarenakan bot berpotensi mengirim spam terus menerus, maka untuk mencegahnya perlu dibuat atau pengubahan/penambahan coding.

Tambah Variable

Tambahkan variable baru sesudah baris seting zonaTime :

// atur berapa menit pesan reminder akan dihapus
var menitHapus = 5

// ini tidak usah diubah, dicopas/diketik saja
var jadwalHapus = user.getValue('jadwalHapus');
jadwalHapus = jadwalHapus ? JSON.parse(jadwalHapus) : false;

Seperti ini kira-kira:

atur waktu

Tambahan Fungsi

Cari dan temukan :

// --- //-// --- // 
// --- UNTUK PEMULA: cukup diatas itu saja yang diubah ---
// --- //-// --- // 

kemudian tambahkan fungsi dibawah ini:

function tambahJadwalPenghapusan(chat_id, message_id) {
  let date = new Date();
  date.setMinutes(date.getMinutes() + menitHapus)

  let waktu = Utilities.formatDate(date, 'GMT+7', "HH:mm")
  let data =
  {
    waktu: waktu,
    chat_id: chat_id,
    message_id: message_id
  }

  if (!jadwalHapus) return user.setValue('jadwalHapus', JSON.stringify([data]));

  jadwalHapus.push(data);
  return user.setValue('jadwalHapus', JSON.stringify(jadwalHapus));
}

Seperti ini kira-kira:

Fungsi Baru

Modif tampilkanJadwal

Ada 2 tempat yang harus di modif pada fungsi tampilkanJadwal. Perhatikan dengan teliti ya.

1. sendMessage

Tambahkan:

tambahJadwalPenghapusan(res.result.chat.id, res.result.message_id)

sesudah:

var res = tg.sendMessage(id, pesan, 'HTML')

sehingga menjadi:

tujuanID.forEach((id) => {
    var res = tg.sendMessage(id, pesan, 'HTML')
    tambahJadwalPenghapusan(res.result.chat.id, res.result.message_id)
})

Seperti ini kira-kira:

tambahJadwalPenghapusan

2. rutin baru

Tambahkan dipaling akhir dari fungsi tampilkanJadwal(), yakni sebelum tanda }

  if (jadwalHapus) {
    let indexHapus = []
    tg.util.forEach(jadwalHapus, (data, index) => {
      if (data.waktu == waktuSekarang) {
        try {
          tg.deleteMessage(data.chat_id, data.message_id)
        } catch(e) {
          // tidak perlu dicatch
        }
        indexHapus.push(index)
      }
    })

    // dibuat terpisah, karena bisa jadi waktunya sama (multi tujuan ID)
    if (indexHapus.length > 0) {
      indexHapus.sort().reverse()

      indexHapus.forEach((data) => {
        jadwalHapus.splice(data, 1)
      })
      user.setValue('jadwalHapus', JSON.stringify(jadwalHapus))
    }
  }

Video

Silakan disimak di video nya jika bingung atau ingin lebih jelas dalam prosesnya.

Referensi

Sebagai referensi dan tambahan bacaan dan materi, silakan diperiksa sebagai berikut:

Penutup

Jika ada pertanyaan silakan bergabung ke grup Telegram @botIndonesia bersama para coder lainnya kita saling sapa, diskusi, sharing dan silaturrahim.

Mohon maaf jika ada salah-salah kata ada khilaf, dan semoga bermanfaat.