init file
This commit is contained in:
parent
294f359ef1
commit
b9465d8ed3
44
src/Code.js
Normal file
44
src/Code.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
bot = new tgbot.getBot(token)
|
||||||
|
bot.enableErrorLogging(owner)
|
||||||
|
Utils = tgbot.Utils
|
||||||
|
Button = tgbot.Button
|
||||||
|
|
||||||
|
function setWebhook() {
|
||||||
|
var result = bot.setWebhook({
|
||||||
|
url: webhook_url
|
||||||
|
});
|
||||||
|
Logger.log(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMe() {
|
||||||
|
var result = bot.getMe({
|
||||||
|
url: webhook_url
|
||||||
|
});
|
||||||
|
Logger.log(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
function doPost(e) {
|
||||||
|
if(e.postData.type == "application/json") {
|
||||||
|
update = JSON.parse(e.postData.contents)
|
||||||
|
|
||||||
|
bot.onMessage(/\/start$/, function(e){
|
||||||
|
if (e.message.chat.type == 'supergroup') {
|
||||||
|
e.respond('👋 Halo semua. Terimakasih sudah menambahkan saya kedalam grup. Saya dapat melakukan verifikasi ' +
|
||||||
|
'kepada member baru yang gabung ke dalam grup ini. Syaratnya jadikan saya sebagai admin')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
else if (e.message.chat.type == 'private'){
|
||||||
|
e.respond('👋 Halo *' + Utils.getDisplayName(e.message.from) + '*. Saya dapat membantu melakukan verifikasi ' +
|
||||||
|
'kepada member baru yang gabung ke dalam grup. Caranya, tambahkan saya kedalam grup dan jadikan saya sebagai admin',
|
||||||
|
undefined, undefined,
|
||||||
|
Utils.inlineKeyboard([[Button.url('Tambahkan ke grup','t.me/mathcaptchabot?startgroup=new')]]))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
bot.registerClass(new MathCaptcha())
|
||||||
|
if (update) {
|
||||||
|
bot.processUpdate(update);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
242
src/MathCaptcha.js
Normal file
242
src/MathCaptcha.js
Normal file
@ -0,0 +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){
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user