From 8397f0b488edc047c94a8bc948f7b6af54167a44 Mon Sep 17 00:00:00 2001 From: alazhar Date: Wed, 8 Jul 2020 08:59:42 +0700 Subject: [PATCH] Update 'src/MathCaptcha.js' --- src/MathCaptcha.js | 482 ++++++++++++++++++++++----------------------- 1 file changed, 241 insertions(+), 241 deletions(-) diff --git a/src/MathCaptcha.js b/src/MathCaptcha.js index b535911..958b47f 100644 --- a/src/MathCaptcha.js +++ b/src/MathCaptcha.js @@ -1,242 +1,242 @@ -class MathCaptcha { - constructor(){ - this.triggers = [ - '###(new_chat_members)', - '/start (CAPTCHA)(\\d+)' - ] - this.callbackTriggers = [ - 'captcha:(\\d+):(\\d+)' - ] - this.inlineTriggers = [] - this.prop = PropertiesService.getScriptProperties() - } - - kickMember(bot, chat_id, user_id){ - bot.kickChatMember({ - 'chat_id': chat_id, - 'user_id': user_id - }) - - bot.unbanChatMember({ - 'chat_id': chat_id, - 'user_id': user_id - }) - } - - muteMember(bot,chat_id,user_id){ - bot.restrictChatMember({ - 'chat_id': chat_id, - 'user_id': user_id, - 'permissions' : { - 'can_send_messages' : false - } - }) - } - - unmuteMember(bot,chat_id,user_id){ - bot.restrictChatMember({ - 'chat_id': chat_id, - 'user_id': user_id, - 'permissions' : { - 'can_send_messages' : true, - 'can_send_media_messages' : true, - 'can_send_polls' : true, - 'can_send_other_messages' : true, - 'can_add_web_page_previews' : true, - 'can_change_info' : true, - 'can_invite_users' : true, - 'can_pin_messages' : true, - } - }) - } - - // Cari id captcha untuk user di grup - // jika belum ada, buat yang baru dengan id terakhir - getCaptchaID(bot,chat_id,user_id){ - let props = bot.obj.prop.getProperties() - let i - for (i in props) { - if (i.startsWith("CAPTCHA#")){ - let val = props[i] - let data = JSON.parse(val) - if (data.chat_id == chat_id && data.user_id == user_id){ - return i - } - } - } - let last_id = bot.obj.prop.getProperty('last_id') - if (!last_id) last_id = 0 - last_id = parseInt(last_id) + 1 - bot.obj.prop.setProperty('last_id', parseInt(last_id)) - return 'CAPTCHA#' + last_id - } - - onMessage(e){ - let msg = e.message - let ME = e.getMe() - - // Jika ada update member baru gabung - if (e.match[1] == 'new_chat_members'){ - // Cek privilege bot. Jika tidak ada restric privilege abaikan update - let my_permission = e.getChatMember({'chat_id':msg.chat.id,'user_id':ME.id}) - if (my_permission.can_restrict_members){ - // Looping setiap member baru - let i - for (i of msg.new_chat_members){ - let user = i - - // Cek jika user adalah bot - if (user.is_bot){ - continue - } - - // Buat captcha - let user_name = Utils.getDisplayName(user) - let captcha_id = this.obj.getCaptchaID(this,msg.chat.id, user.id) - let max = 49 - let min = 1 - let num1 = Math.floor(Math.random() * (max - min + 1)) + min - let num2 = Math.floor(Math.random() * (max - min + 1)) + min - let question = num1 + ' + ' + num2 - let answer = num1 + num2 - let choice = [answer] - max = 99 - choice.push(Math.floor(Math.random() * (max - min + 1)) + min) - choice.push(Math.floor(Math.random() * (max - min + 1)) + min) - choice.push(Math.floor(Math.random() * (max - min + 1)) + min) - - // Kirim pesan ke grup buat meminta user baru untuk verifikasi - let res = e.respond( - 'Halo [' + user_name + '](tg://user?id=' + user.id + '), mohon verifikasi dengan menekan tombol dibawah untuk dapat mengirim pesan ke grup ini ', - undefined, undefined, - Utils.inlineKeyboard([[Button.url('Verifikasi','t.me/' + ME.username + '?start=' + captcha_id.replace('#',''))]]) - ) - - let captcha = { - 'chat_id' : msg.chat.id, - 'chat_title' : msg.chat.title, - 'user_id': user.id, - 'user_name': user_name, - 'question': question, - 'answer': answer, - 'choice': choice, - 'chance': 3, - 'msg_id': res.message.message_id - } - - // Ganti restriction member - this.obj.muteMember(this,msg.chat.id, user.id) - - // Simpan properti - this.obj.prop.setProperty(captcha_id, JSON.stringify(captcha)) - } - return - } - } - - // Jika user menekan tombol verifikasi - if (e.match[1] == 'CAPTCHA'){ - let id_captcha = e.match[2] - let captcha = this.obj.prop.getProperty('CAPTCHA#' + id_captcha) - - // Cek apakah ada captcha tersimpan dengan ID tersebut - if (captcha){ - captcha = JSON.parse(captcha) - - // Cek apakah user yang menekan tombol adalah member baru - if (captcha.user_id == msg.from.id){ - let user_name = captcha.user_name - let chat_title = captcha.chat_title - let question = captcha.question - let answer = captcha.answer - let chance = captcha.chance - let choice = captcha.choice - choice = Utils.shuffleArray(choice) - - // Kirim captcha - e.respond('Hi *' + user_name + '* mohon selesaikan perhitungan matematika dibawah untuk verifikasi anda di grup *' + chat_title + '*' + - '\nKamu punya `' + chance + '` kali kesempatan' + - '\n\n*Pertanyaan* : `' + question + '`',undefined, undefined, - Utils.inlineKeyboard( - [ - [ - Button.inline('A. ' + choice[0], `captcha:${id_captcha}:${choice[0]}`), - Button.inline('B. ' + choice[1], `captcha:${id_captcha}:${choice[1]}`) - ], - [ - Button.inline('C. ' + choice[2], `captcha:${id_captcha}:${choice[2]}`), - Button.inline('D. ' + choice[3], `captcha:${id_captcha}:${choice[3]}`) - ] - ] - ) - ) - } - } - } - } - - onCallbackQuery(e){ - let id_captcha = e.match[1] - let user_choice = e.match[2] - let captcha = this.obj.prop.getProperty('CAPTCHA#' + id_captcha) - if (captcha){ - captcha = JSON.parse(captcha) - if (captcha.user_id == captcha.user_id){ - let user_name = captcha.user_name - let chat_title = captcha.chat_title - let chance = captcha.chance - let question = captcha.question - let answer = captcha.answer - - // Jika jawaban salah - if (user_choice != answer){ - e.answer('Jawaban kamu salah') - // Jika kesempatan sudah abis, kick member - if (chance == 1){ - e.edit('Kesempatan kamu habis, kamu sudah dikeluarkan dari grup') - e.deleteMessage({'chat_id':captcha.chat_id, 'message_id':captcha.msg_id}) - e.sendMessage({'chat_id':captcha.chat_id, 'text': 'ℹī¸ *' + user_name + '* telah dikeluarkan dari grup karna tidak dapat melakukan verifikasi'}) - this.obj.kickMember(this,captcha.chat_id, captcha.user_id) - this.obj.prop.deleteProperty('CAPTCHA#' + id_captcha) - } - - // Jika masih memiliki kesempatan, acak jawaban - else{ - chance = chance - 1 - captcha.chance = chance - let choice = captcha.choice - choice = Utils.shuffleArray(choice) - e.edit('Hi *' + user_name + '* mohon selesaikan perhitungan matematika dibawah untuk verifikasi anda di grup *' + chat_title + '*' + - '\nKamu punya `' + chance + '` kali kesempatan' + - '\n\n*Pertanyaan* : `' + question + '`',undefined, undefined, - Utils.inlineKeyboard( - [ - [ - Button.inline('A. ' + choice[0], `captcha:${id_captcha}:${choice[0]}`), - Button.inline('B. ' + choice[1], `captcha:${id_captcha}:${choice[1]}`) - ], - [ - Button.inline('C. ' + choice[2], `captcha:${id_captcha}:${choice[2]}`), - Button.inline('D. ' + choice[3], `captcha:${id_captcha}:${choice[3]}`) - ] - ] - ) - ) - this.obj.prop.setProperty('CAPTCHA#' + id_captcha, JSON.stringify(captcha)) - } - } - // Jika jawaban salah - else{ - e.edit('👍 Yapp!! Jawaban kamu benar. Kamu dapat mengirim pesan di grup. Terimakasih sudah verifikasi 😊') - e.deleteMessage({'chat_id':captcha.chat_id, 'message_id':captcha.msg_id}) - this.obj.unmuteMember(this,captcha.chat_id, captcha.user_id) - this.obj.prop.deleteProperty('CAPTCHA#' + id_captcha) - e.answer() - } - } - } - } - - onInlineQuery(e){ - } +class MathCaptcha { + constructor(){ + this.triggers = [ + '###(new_chat_members)', + '/start (CAPTCHA)(\\d+)' + ] + this.callbackTriggers = [ + 'captcha:(\\d+):(\\d+)' + ] + this.inlineTriggers = [] + this.prop = PropertiesService.getScriptProperties() + } + + kickMember(bot, chat_id, user_id){ + bot.kickChatMember({ + 'chat_id': chat_id, + 'user_id': user_id + }) + + bot.unbanChatMember({ + 'chat_id': chat_id, + 'user_id': user_id + }) + } + + muteMember(bot,chat_id,user_id){ + bot.restrictChatMember({ + 'chat_id': chat_id, + 'user_id': user_id, + 'permissions' : { + 'can_send_messages' : false + } + }) + } + + unmuteMember(bot,chat_id,user_id){ + bot.restrictChatMember({ + 'chat_id': chat_id, + 'user_id': user_id, + 'permissions' : { + 'can_send_messages' : true, + 'can_send_media_messages' : true, + 'can_send_polls' : true, + 'can_send_other_messages' : true, + 'can_add_web_page_previews' : true, + 'can_change_info' : true, + 'can_invite_users' : true, + 'can_pin_messages' : true, + } + }) + } + + // Cari id captcha untuk user di grup + // jika belum ada, buat yang baru dengan id terakhir + getCaptchaID(bot,chat_id,user_id){ + let props = bot.obj.prop.getProperties() + let i + for (i in props) { + if (i.startsWith("CAPTCHA#")){ + let val = props[i] + let data = JSON.parse(val) + if (data.chat_id == chat_id && data.user_id == user_id){ + return i + } + } + } + let last_id = bot.obj.prop.getProperty('last_id') + if (!last_id) last_id = 0 + last_id = parseInt(last_id) + 1 + bot.obj.prop.setProperty('last_id', parseInt(last_id)) + return 'CAPTCHA#' + last_id + } + + onMessage(e){ + let msg = e.message + let ME = e.getMe() + + // Jika ada update member baru gabung + if (e.match[1] == 'new_chat_members'){ + // Cek privilege bot. Jika tidak ada restric privilege abaikan update + let my_permission = e.getChatMember({'chat_id':msg.chat.id,'user_id':ME.id}) + if (my_permission.can_restrict_members){ + // Looping setiap member baru + let i + for (i of msg.new_chat_members){ + let user = i + + // Cek jika user adalah bot + if (user.is_bot){ + continue + } + + // Buat captcha + let user_name = Utils.getDisplayName(user) + let captcha_id = this.obj.getCaptchaID(this,msg.chat.id, user.id) + let max = 49 + let min = 1 + let num1 = Math.floor(Math.random() * (max - min + 1)) + min + let num2 = Math.floor(Math.random() * (max - min + 1)) + min + let question = num1 + ' + ' + num2 + let answer = num1 + num2 + let choice = [answer] + max = 99 + choice.push(Math.floor(Math.random() * (max - min + 1)) + min) + choice.push(Math.floor(Math.random() * (max - min + 1)) + min) + choice.push(Math.floor(Math.random() * (max - min + 1)) + min) + + // Kirim pesan ke grup buat meminta user baru untuk verifikasi + let res = e.respond( + 'Halo [' + user_name + '](tg://user?id=' + user.id + '), mohon verifikasi dengan menekan tombol dibawah untuk dapat mengirim pesan ke grup ini ', + undefined, undefined, + Utils.inlineKeyboard([[Button.url('Verifikasi','t.me/' + ME.username + '?start=' + captcha_id.replace('#',''))]]) + ) + + let captcha = { + 'chat_id' : msg.chat.id, + 'chat_title' : msg.chat.title, + 'user_id': user.id, + 'user_name': user_name, + 'question': question, + 'answer': answer, + 'choice': choice, + 'chance': 3, + 'msg_id': res.message.message_id + } + + // Ganti restriction member + this.obj.muteMember(this,msg.chat.id, user.id) + + // Simpan properti + this.obj.prop.setProperty(captcha_id, JSON.stringify(captcha)) + } + return + } + } + + // Jika user menekan tombol verifikasi + if (e.match[1] == 'CAPTCHA'){ + let id_captcha = e.match[2] + let captcha = this.obj.prop.getProperty('CAPTCHA#' + id_captcha) + + // Cek apakah ada captcha tersimpan dengan ID tersebut + if (captcha){ + captcha = JSON.parse(captcha) + + // Cek apakah user yang menekan tombol adalah member baru + if (captcha.user_id == msg.from.id){ + let user_name = captcha.user_name + let chat_title = captcha.chat_title + let question = captcha.question + let answer = captcha.answer + let chance = captcha.chance + let choice = captcha.choice + choice = Utils.shuffleArray(choice) + + // Kirim captcha + e.respond('Hi *' + user_name + '* mohon selesaikan perhitungan matematika dibawah untuk verifikasi anda di grup *' + chat_title + '*' + + '\nKamu punya `' + chance + '` kali kesempatan' + + '\n\n*Pertanyaan* : `' + question + '`',undefined, undefined, + Utils.inlineKeyboard( + [ + [ + Button.inline('A. ' + choice[0], `captcha:${id_captcha}:${choice[0]}`), + Button.inline('B. ' + choice[1], `captcha:${id_captcha}:${choice[1]}`) + ], + [ + Button.inline('C. ' + choice[2], `captcha:${id_captcha}:${choice[2]}`), + Button.inline('D. ' + choice[3], `captcha:${id_captcha}:${choice[3]}`) + ] + ] + ) + ) + } + } + } + } + + onCallbackQuery(e){ + let id_captcha = e.match[1] + let user_choice = e.match[2] + let captcha = this.obj.prop.getProperty('CAPTCHA#' + id_captcha) + if (captcha){ + captcha = JSON.parse(captcha) + if (captcha.user_id == captcha.user_id){ + let user_name = captcha.user_name + let chat_title = captcha.chat_title + let chance = captcha.chance + let question = captcha.question + let answer = captcha.answer + + // Jika jawaban salah + if (user_choice != answer){ + e.answer('Jawaban kamu salah') + // Jika kesempatan sudah abis, kick member + if (chance == 1){ + e.edit('Kesempatan kamu habis, kamu sudah dikeluarkan dari grup') + e.deleteMessage({'chat_id':captcha.chat_id, 'message_id':captcha.msg_id}) + e.sendMessage({'chat_id':captcha.chat_id, 'text': 'ℹī¸ *' + user_name + '* telah dikeluarkan dari grup karna tidak dapat melakukan verifikasi'}) + this.obj.kickMember(this,captcha.chat_id, captcha.user_id) + this.obj.prop.deleteProperty('CAPTCHA#' + id_captcha) + } + + // Jika masih memiliki kesempatan, acak jawaban + else{ + chance = chance - 1 + captcha.chance = chance + let choice = captcha.choice + choice = Utils.shuffleArray(choice) + e.edit('Hi *' + user_name + '* mohon selesaikan perhitungan matematika dibawah untuk verifikasi anda di grup *' + chat_title + '*' + + '\nKamu punya `' + chance + '` kali kesempatan' + + '\n\n*Pertanyaan* : `' + question + '`',undefined, undefined, + Utils.inlineKeyboard( + [ + [ + Button.inline('A. ' + choice[0], `captcha:${id_captcha}:${choice[0]}`), + Button.inline('B. ' + choice[1], `captcha:${id_captcha}:${choice[1]}`) + ], + [ + Button.inline('C. ' + choice[2], `captcha:${id_captcha}:${choice[2]}`), + Button.inline('D. ' + choice[3], `captcha:${id_captcha}:${choice[3]}`) + ] + ] + ) + ) + this.obj.prop.setProperty('CAPTCHA#' + id_captcha, JSON.stringify(captcha)) + } + } + // Jika jawaban benar + else{ + e.edit('👍 Yapp!! Jawaban kamu benar. Kamu dapat mengirim pesan di grup. Terimakasih sudah verifikasi 😊') + e.deleteMessage({'chat_id':captcha.chat_id, 'message_id':captcha.msg_id}) + this.obj.unmuteMember(this,captcha.chat_id, captcha.user_id) + this.obj.prop.deleteProperty('CAPTCHA#' + id_captcha) + e.answer() + } + } + } + } + + onInlineQuery(e){ + } } \ No newline at end of file