nguLik welcome

nguLik welcome

ƈֆƈяɨקȶ
// fungsi buat handle hanya menerima pesan berupa POST, kalau GET keluarkan pesan error
function doGet(e) {
 return tg.util.outputText("Hanya data POST yang kita proses yak!");
}

// fungsi buat handle pesan POST
function doPost(e) {
// data e kita verifikasi
 var update = tg.doPost(e);

// jika data valid proses pesan
 if (update) {
  prosesPesan(update);
 }
}

// fungsi utama untuk memproses segala pesan yang masuk
function prosesPesan(update) {

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

// penyederhanaan variable
  var msg = update.message;

// jika ada pesan berupa text
  if (msg.text) {


// trigger reply set Welcome
   var pola = /^[!\/]setwelcome$/i;
   if ( cocok = pola.exec(msg.text) ){

// periksa dulu user ID nya, jika tidak ada akses tolak saja.
    if (! tg.util.punyaAkses(adminBot, msg.from.id) )
     return tg.sendMsg(msg, '🚫 Kamu tidak punya akses.', false, false, msg.message_id);

// periksa ada reply atau tidak
    if (!msg.reply_to_message)
     return tg.sendMsg(msg, '🚫 Harus reply pesan', false, false, msg.message_id);

// sederhanakan variable reply_to_message
    var msgr = msg.reply_to_message;

// periksa lagi, yang di reply text atau bukan
    if (!msgr.text)
     return tg.sendMsg(msg, '🚫 Harus tipe teks', false, false, msg.message_id);

// set up message yang akan di olah
    var pesanWelcome = msgr.text;
  
// uji dulu pesan yang diset bener atau enggak dalam format html :
    try {
// kirim pesan berhasil disimpan
     tg.sendMsg(msg, ''+pesanWelcome, 'HTML', false, msg.reply_to_message.message_id);
// simpan pesanWelcome
     user.setValue('welcomeMessage'+msg.chat.id, pesanWelcome);
    } catch (e) {
// jika gagal, keluarkan pesan error
     var pesanError = e.message;

// tangkep pesan error yang dari Telegram saja
     if (error = /({(?:.*)})/gmi.exec(pesanError) )
     pesanError = error[1];

// kalau Error gak usah di format HTML, buat keperluan debugging
     tg.sendMsg(msg, '⛔️ ERROR: '+pesanError, false, false, msg.message_id);
    }

// selesai kecocokan pola, kembalikan
    return;
   }


// trigger untuk button Welcome
// level: advance

/* syntax: !buttonWelcome jmlKolomButton SYNTAX_URL
  
  jmlKolomButton banyaknya kolom dalam 1 baris: button1, button2
  SYNTAX_URL format markdown [title](URL)
  
  URL protocol yang benar (http/https).
  
  SYNTAX_URL dipisahkan apa aja, boleh spasi, ENTER, koma, dlsb
*/
   var pola = /^[!\/]buttonWelcome (\d+)/i;
   if ( cocok = pola.exec(msg.text) ){

// periksa dulu user ID nya, jika tidak ada akses tolak saja.
    if (! tg.util.punyaAkses(adminBot, msg.from.id) )
     return tg.sendMsg(msg, '🚫 Kamu tidak punya akses.', false, false, msg.message_id);

// periksa ada reply atau tidak, keluarkan pesan error
    if (!msg.reply_to_message)
     return tg.sendMsg(msg, '🚫 Harus reply pesan.', false, false, msg.message_id);

// sederhanakan variable reply_to_message
    var msgr = msg.reply_to_message;

// periksa lagi, yang di reply text atau bukan
    if (!msgr.text)
     return tg.sendMsg(msg, '🚫 Harus bertipe text.', false, false, msg.message_id);

// set up message yang akan di olah
    var pesanWelcome = msgr.text;

// sekarang kita parsing button nya
// jangan kebalik ya, yang diparsing adalah msg biasa, bukan msgr (messsage reply)
    var pesanButton = msg.text;

// sanitasi: ubah ke Integer
    var jmlKolomButton = parseInt(cocok[1]);

// periksa berapa nilainya, jika 0 batalin aja
    if (jmlKolomButton<1)
    return tg.sendMsg(msg, '🚫 Minimal 1', false, false, msg.message_id); 

// kasih batas maksimal aja juga, terserah berapa sepantasnya
// di sini aku kasih 5 aja
    var jmlMaxKolomButton = 5;
    if (jmlKolomButton>jmlMaxKolomButton) 
     return tg.sendMsg(msg, '🚫 Maksimal '+jmlMaxKolomButton, false, false, msg.message_id); 

// proses pembuatan / penyusunan button
// dipahami sendiri ya, ini rumit bagi yang baru memulai. Makanya level nya advance

// pola button
    var polaButton = /\[(?<judul>[^\]]+)\]\((?<url>https?:\/\/[^\)]+)\)/gmi;

// buat variable pendukung
    var keyboard= []
    var baris = [];
    var nBaris = 0;
    var kolom = []
    var nKolom = 0;

// proses penyusunan
    while (cocokButton = polaButton.exec(pesanButton) ) {

// buat 1 button di variable button
     tombol = tg.button.url(cocokButton.groups.judul, cocokButton.groups.url);

// susun dalam baris
     baris.push(tombol);

// tambah index button kolom
     nKolom++;

// jika index button kolom sesuai jmlKolomButton
     if (nKolom == jmlKolomButton) {
// masukkan ke dalam susunan keyboard
      keyboard[[nBaris][0]] = baris;

// tambahkan index baris / row keyboardnya
      nBaris++;

// reset index kolom dan baris
      nKolom = 0;
      baris = [];   
     }
    }

// sisa baris yang tidak diakomodir, masukkan di baris paling akhir
    if (nKolom>0)
     keyboard[[nBaris][0]] = baris; 

// keyboard udah jadi, tinggal di coba send

// uji dulu pesan yang diset bener atau enggak dalam format html
// verifikasi text dan keyboad
    try {
// kirim pesan berhasil disimpan
// syntax lib 2 API: sendMsgKeyboardInline(msg, text, keyboard, parse_mode, disable_web_page_preview, reply_to_message_id)
     tg.sendMsgKeyboardInline(msg, pesanWelcome, keyboard, 'HTML', false, msg.reply_to_message.message_id);

// simpan pesanWelcome
     user.setValue('welcomeMessage'+msg.chat.id, pesanWelcome);
// simpan buttonnya juga, bentuk string
     user.setValue('welcomeMessageButton'+msg.chat.id, JSON.stringify(keyboard));
    } catch (e) {
// jika gagal, keluarkan pesan error
     var pesanError = e.message;

// tangkep pesan error yang dari Telegram saja
     if (error = /({(?:.*)})/gmi.exec(pesanError) )
     pesanError = error[1];

// kalau Error gak usah di format HTML, buat keperluan debugging
     tg.sendMsg(msg, '⛔️ ERROR: '+pesanError, false, false, msg.message_id);
    }

// selesai kecocokan pola, kembalikan
    return;
   }


// -- batas pesan text
  }


//---- EVENT NEW USER dan SAY WELCOME BOT
  if (msg.new_chat_members) {

// --- Welcome Bot v2
// variable baru untuk new chat member, ambil yang pertama saja
   var newUser = msg.new_chat_members[0];

// mendefinisikan {nama}
   var namaUser = newUser.first_name;

// jika punya last name, kita tambahkan juga
   if (newUser.last_name)
    namaUser += " " + newUser.last_name;

// bersihkan nama dari tag HTML
   namaUser = tg.util.clearHTML(namaUser);

// mendifiniksan username
   var username = newUser.username ? '@'+newUser.username : '';

// mendifinisikan iduser
   var idUser = newUser.id;

// -- mention
   var umention = "<a href='tg://user?id="+idUser+"'>"+namaUser+"</a>";

// mendefinisikan group title
   var namaGroup = msg.chat.title;

// bersihkan nama group dari tag HTML
   namaGroup = tg.util.clearHTML(namaGroup);

// mendefinisikan id group
   var idGroup = msg.chat.id;


// Merangkai ucapan selamatnya digabung variable ke pesanWelcome
// ambil dulu pesan di database User
   var pesanWelcome = user.getValue('welcomeMessage'+msg.chat.id);

// jika tidak ada pesan welcome, ya udah balik aja
   if (!pesanWelcome) return false;

// ambil button di database User
   var keyboard = user.getValue('welcomeMessageButton'+msg.chat.id);

// masukkan variable-variablenya
   var teks = pesanWelcome
   .replace(/{nam[ae]}/ig, umention) // mengubah template nama, name
   .replace(/{username}/ig, username) // mengubah template username
   .replace(/{iduser}/ig, idUser) // mengubah template id user
   .replace(/{gro?up}/ig, namaGroup) // mengubah template title group
   .replace(/{idgro?up}/ig, idGroup) // mengubah template id group

// setelah memasukkan variable / template
// ambil ID welcome lama
   var idWelcome = user.getValue('idWelcome'+msg.chat.id);

// jika ada, hapus pesan welcome lama tersebut
   if (idWelcome)
    tg.deleteMessage(msg.chat.id, parseInt(idWelcome));

// kirim pesan welcome
// jika terdapat keyboard
   if (keyboard) {

// parsing ke format yang semestinya
    keyboard = JSON.parse(keyboard);
// kirim dalam inline button dan ambil nilai baliknya
    var nilaiBalik = tg.sendMsgKeyboardInline(msg, teks, keyboard, 'HTML', false, msg.message_id);
   } else {
// jika jenisnya biasa
    var nilaiBalik = tg.sendMsg(msg, teks, 'HTML')
    }
// ambil ID nya, kemudian simpan
   idWelcome = nilaiBalik.result.message_id;
   user.setValue('idWelcome'+msg.chat.id, idWelcome);
   return true;
  }


// -- batas atas
 }
}
Hapus Pesan Welcome Agar Tidak Bertumpuk | Halo Bot! | Lib v2
// --- Laporan bot join
   if (msg.new_chat_member.id == botid){
    var pesan = "💬 @XcScriptbot"
    pesan += "\nadded to <b>"+namaGroup+"</b> <code>"+idGroup+"</code>"
    pesan += "\n\nby <b>"+xmention+"</b> [#id"+xuserid+"]";
    tg.kirimPesan(-1001429716328, pesan, 'html');
// --- Leave Chat yang bukan markas
    if (! tg.util.punyaAkses(markas, msg.chat.id) ){
     tg.sendChatAction(msg.chat.id, "typing");
     tg.util.sleep(3000);
     tg.request('LeaveChat', {'chat_id': msg.chat.id});
    }}


// --- LOGs deteksi member join
   if ( tg.util.punyaAkses(markas, msg.chat.id) ){
    var pesan = "➕ #JOIN_USER"
    pesan += "\n├ [#id"+idUser+"]"
    pesan += "\n├ "+umention+" "+username+""
    pesan += "\n├ [<code>"+idUser+"</code>]"
    pesan += "\n└ group: <b>"+namaGroup+"</b> ["+idGroup+"]";
    tg.kirimPesan(-1001487071997, pesan, 'html');
   }
  • disederhanakan
//---- EVENT NEW USER dan SAY WELCOME BOT
// ------ deteksi user join --
  if (msg.new_chat_members) {

// --- Welcome Bot v2
// variable baru untuk new chat member, ambil yang pertama saja
   var newUser = msg.new_chat_members[0];
   var namaUser = newUser.first_name;
   if (newUser.last_name)
    namaUser += " " + newUser.last_name;
   namaUser = tg.util.clearHTML(namaUser);
   var username = newUser.username ? '@'+newUser.username : '';
   var idUser = newUser.id;
// -- mention
   var umention = "<a href='tg://user?id="+idUser+"'>"+namaUser+"</a>"; // html
   var namaGroup = msg.chat.title;
   namaGroup = tg.util.clearHTML(namaGroup);
   var idGroup = msg.chat.id;

// Merangkai ucapan selamatnya digabung variable ke pesanWelcome
// ambil dulu pesan di database User
   var pesanWelcome = user.getValue('welcomeMessage'+msg.chat.id);
// jika tidak ada pesan welcome, ya udah balik aja
   if (!pesanWelcome) return false;
// ambil button di database User
   var keyboard = user.getValue('welcomeMessageButton'+msg.chat.id);
// masukkan variable-variablenya
   var teks = pesanWelcome
   .replace(/{nam[ae]}/ig, umention) // mengubah template nama, name
   .replace(/{username}/ig, username) // mengubah template username
   .replace(/{iduser}/ig, idUser) // mengubah template id user
   .replace(/{gro?up}/ig, namaGroup) // mengubah template title group
   .replace(/{idgro?up}/ig, idGroup) // mengubah template id group
// setelah memasukkan variable / template
// ambil ID welcome lama
   var idWelcome = user.getValue('idWelcome'+msg.chat.id);
   if (idWelcome)
    tg.deleteMessage(msg.chat.id, parseInt(idWelcome));
   if (keyboard) {
    keyboard = JSON.parse(keyboard);
    var nilaiBalik = tg.sendMsgKeyboardInline(msg, teks, keyboard, 'HTML', false, msg.message_id);
   } else {
    var nilaiBalik = tg.sendMsg(msg, teks, 'HTML')
    }
   idWelcome = nilaiBalik.result.message_id;
   user.setValue('idWelcome'+msg.chat.id, idWelcome);
   return true;
// -- batas deteksi join
  }


// --- Welcome Bot v2 - Template dan Button Inline
// trigger reply set Welcome
   var pola = /^[!\/]swelkom$/i;
   if ( cocok = pola.exec(msg.text) ){

// periksa dulu user ID nya, jika tidak ada akses tolak saja.
    if (! tg.util.punyaAkses(adminBot, msg.from.id) )
     return tg.sendMsg(msg, '🚫 Kamu tidak punya akses.', false, false, msg.message_id);
// periksa ada reply atau tidak
    if (!msg.reply_to_message)
     return tg.sendMsg(msg, '🚫 Harus reply pesan', false, false, msg.message_id);
// sederhanakan variable reply_to_message
    var msgr = msg.reply_to_message;
// periksa lagi, yang di reply text atau bukan
    if (!msgr.text)
     return tg.sendMsg(msg, '🚫 Harus tipe teks', false, false, msg.message_id);
// set up message yang akan di olah
    var pesanWelcome = msgr.text;
// uji dulu pesan yang diset bener atau enggak dalam format html :
    try {
// kirim pesan berhasil disimpan
     tg.sendMsg(msg, ''+pesanWelcome, 'HTML', false, msg.reply_to_message.message_id);
// simpan pesanWelcome
     user.setValue('welcomeMessage'+msg.chat.id, pesanWelcome);
    } catch (e) {
// jika gagal, keluarkan pesan error
     var pesanError = e.message;
// tangkep pesan error yang dari Telegram saja
     if (error = /({(?:.*)})/gmi.exec(pesanError) )
     pesanError = error[1];
// kalau Error gak usah di format HTML, buat keperluan debugging
     tg.sendMsg(msg, '⛔️ ERROR: '+pesanError, false, false, msg.message_id);
    }
// selesai kecocokan pola, kembalikan
    return;
   }

// trigger untuk button Welcome
// level: advance

/* syntax: !buttonWelcome jmlKolomButton SYNTAX_URL
  
  jmlKolomButton banyaknya kolom dalam 1 baris: button1, button2
  SYNTAX_URL format markdown [title](URL)
  
  URL protocol yang benar (http/https).
  
  SYNTAX_URL dipisahkan apa aja, boleh spasi, ENTER, koma, dlsb
*/
   var pola = /^[!\/]tWelkom (\d+)/i;
   if ( cocok = pola.exec(msg.text) ){
// periksa dulu user ID nya, jika tidak ada akses tolak saja.
    if (! tg.util.punyaAkses(adminBot, msg.from.id) )
     return tg.sendMsg(msg, '🚫 Kamu tidak punya akses.', false, false, msg.message_id);
// periksa ada reply atau tidak, keluarkan pesan error
    if (!msg.reply_to_message)
     return tg.sendMsg(msg, '🚫 Harus reply pesan.', false, false, msg.message_id);
// sederhanakan variable reply_to_message
    var msgr = msg.reply_to_message;
// periksa lagi, yang di reply text atau bukan
    if (!msgr.text)
     return tg.sendMsg(msg, '🚫 Harus bertipe text.', false, false, msg.message_id);
// set up message yang akan di olah
    var pesanWelcome = msgr.text;
// sekarang kita parsing button nya
// jangan kebalik ya, yang diparsing adalah msg biasa, bukan msgr (messsage reply)
    var pesanButton = msg.text;
// sanitasi: ubah ke Integer
    var jmlKolomButton = parseInt(cocok[1]);
// periksa berapa nilainya, jika 0 batalin aja
    if (jmlKolomButton<1)
    return tg.sendMsg(msg, '🚫 Minimal 1', false, false, msg.message_id); 
// kasih batas maksimal aja juga, terserah berapa sepantasnya
// di sini aku kasih 5 aja
    var jmlMaxKolomButton = 5;
    if (jmlKolomButton>jmlMaxKolomButton) 
     return tg.sendMsg(msg, '🚫 Maksimal '+jmlMaxKolomButton, false, false, msg.message_id); 
// proses pembuatan / penyusunan button
// dipahami sendiri ya, ini rumit bagi yang baru memulai. Makanya level nya advance
// pola button
    var polaButton = /\[(?<judul>[^\]]+)\]\((?<url>https?:\/\/[^\)]+)\)/gmi;
// buat variable pendukung
    var keyboard= []
    var baris = [];
    var nBaris = 0;
    var kolom = []
    var nKolom = 0;
// proses penyusunan
    while (cocokButton = polaButton.exec(pesanButton) ) {
// buat 1 button di variable button
     tombol = tg.button.url(cocokButton.groups.judul, cocokButton.groups.url);
// susun dalam baris
     baris.push(tombol);
// tambah index button kolom
     nKolom++;
// jika index button kolom sesuai jmlKolomButton
     if (nKolom == jmlKolomButton) {
// masukkan ke dalam susunan keyboard
      keyboard[[nBaris][0]] = baris;
// tambahkan index baris / row keyboardnya
      nBaris++;
// reset index kolom dan baris
      nKolom = 0;
      baris = [];   
     }
    }
// sisa baris yang tidak diakomodir, masukkan di baris paling akhir
    if (nKolom>0)
     keyboard[[nBaris][0]] = baris; 
// keyboard udah jadi, tinggal di coba send
// uji dulu pesan yang diset bener atau enggak dalam format html
// verifikasi text dan keyboad
    try {
// kirim pesan berhasil disimpan
// syntax lib 2 API: sendMsgKeyboardInline(msg, text, keyboard, parse_mode, disable_web_page_preview, reply_to_message_id)
     tg.sendMsgKeyboardInline(msg, pesanWelcome, keyboard, 'HTML', false, msg.reply_to_message.message_id);
// simpan pesanWelcome
     user.setValue('welcomeMessage'+msg.chat.id, pesanWelcome);
// simpan buttonnya juga, bentuk string
     user.setValue('welcomeMessageButton'+msg.chat.id, JSON.stringify(keyboard));
    } catch (e) {
// jika gagal, keluarkan pesan error
     var pesanError = e.message;
// tangkep pesan error yang dari Telegram saja
     if (error = /({(?:.*)})/gmi.exec(pesanError) )
     pesanError = error[1];
// kalau Error gak usah di format HTML, buat keperluan debugging
     tg.sendMsg(msg, '⛔️ ERROR: '+pesanError, false, false, msg.message_id);
    }
// selesai kecocokan pola, kembalikan
    return;
   }

// --- trigger cek Welcome
// -- japri dengan !cwelkom -10023456789
   var pola = /^(!cwelkom )/i;
   if ( cocok = pola.exec(msg.text) ){
    if (msg.chat.type == 'private'){

// periksa dulu user ID nya, jika tidak ada akses tolak saja.
    if ( tg.util.punyaAkses(adminBot, msg.from.id) )

// buang pola yang di dapatkan dengan menggantinya dengan karakter kosong atau tidak ada
     var idGroupWelkom = msg.text.replace(cocok[1],'');

     var pesanWelcome = user.getValue('welcomeMessage'+idGroupWelkom);
     var tombolWelcome = user.getValue('welcomeMessageButton'+idGroupWelkom);

// jika kosong variablenya
    if (!pesanWelcome) return tg.sendMsg(msg, '🚫 Tidak ada welcome.', false, false, msg.message_id);

// kirim pesan welcome:
     var pesan = "💬 pesan <b>WELCOME</b> ::\n"+pesanWelcome+""
     pesan += "\n\n⏺ <b>tombol</b> ::\n"+tombolWelcome+""
     return tg.sendMsg(msg, pesan, 'HTML', false, msg.message_id);
    }}

// --- trigger Welcome OFF - japri
   var pola = /^(!xwelkom )/i;
   if ( cocok = pola.exec(msg.text) ){
    if (msg.chat.type == 'private'){
// periksa dulu user ID nya, jika tidak ada akses tolak saja.
    if ( tg.util.punyaAkses(adminBot, msg.from.id) ){
     var idGroupOffWelkom = msg.text.replace(cocok[1],'');
// non-aktif pesan Welcome
     user.delete('welcomeMessage'+idGroupOffWelkom);
     user.delete('welcomeMessageButton'+idGroupOffWelkom);
     user.delete('idWelcome'+idGroupOffWelkom);
// -- kirim Laporan pada private-channel-LOGs
     return tg.sendMsg(msg, '‼️welcome <i>OFF</i>', 'html', false, msg.message_id);
    }}}

Report Page