def check_and_ban(update, user_id, should_message=True): try: spmban = spamwtc.get_ban(int(user_id)) cas_banned = check_cas(user_id) if spmban or cas_banned: update.effective_chat.kick_member(user_id) if should_message: if spmban and cas_banned: banner = "@Spamwatch and Combot Anti Spam" reason = f"\n<code>{spmban.reason}</code>\n\nand <a href='{cas_banned}'>CAS Banned</a>" elif cas_banned: banner = "Combot Anti Spam" reason = f"<a href='{cas_banned}''>CAS Banned</a>" elif spmban: banner = "@Spamwatch" reason = f"<code>{spmban.reason}</code>" send_message( update.effective_message, "#SPAM_SHIELD\n\nOrang ini telah terdeteksi sebagai robot spam" f"oleh {banner} dan telah dihapusd!\nAlasan: {reason}", parse_mode=ParseMode.HTML, ) return except Exception: pass if gban_db.is_user_gbanned(user_id): update.effective_chat.kick_member(user_id) if should_message: usr = gban_db.get_gbanned_user(user_id) greason = usr["reason"] if not greason: greason = "Tidak ada alasan yang diberikan" send_message( update.effective_message, f"*Waspada! pengguna ini telah diblokir dan telah dihapus!*\n*Alasan*: {greason}", parse_mode=ParseMode.MARKDOWN, ) return
def __user_info__(user_id): is_gbanned = gban_db.is_user_gbanned(user_id) spmban = spamwtc.get_ban(int(user_id)) cas_banned = check_cas(user_id) text = "<b>Globally banned</b>: {}" if int(user_id) in DEV_USERS + SUDO_USERS + SUPPORT_USERS: return "" if user_id in (777000, 1087968824): return "" if cas_banned or spmban or is_gbanned: text = text.format("Yes") if is_gbanned: user = gban_db.get_gbanned_user(user_id) text += "\n<b>Alasan:</b> {}".format(html.escape(user["reason"])) else: text = text.format("No") return text
def left_member(update, context): chat = update.effective_chat should_goodbye, cust_goodbye, goodbye_type = sql.get_gdbye_pref(chat.id) cust_goodbye = markdown_to_html(cust_goodbye) if should_goodbye: reply = update.message.message_id cleanserv = sql.clean_service(chat.id) # Clean service welcome if cleanserv: try: dispatcher.bot.delete_message(chat.id, update.message.message_id) except Unauthorized: return except BadRequest: pass reply = False left_mem = update.effective_message.left_chat_member if left_mem: # Ignore gbanned users if is_user_gbanned(left_mem.id): return # Ignore spamwatch banned users try: sw = spamwtc.get_ban(int(left_mem.id)) if sw: return except BaseException: pass # Ignore bot being kicked if left_mem.id == context.bot.id: return # Give the owner a special goodbye if left_mem.id == OWNER_ID: update.effective_message.reply_text("Selamat jalan, masterku", reply_to_message_id=reply) return # if media goodbye, use appropriate function for it if (goodbye_type != sql.Types.TEXT and goodbye_type != sql.Types.BUTTON_TEXT): ENUM_FUNC_MAP[goodbye_type](chat.id, cust_goodbye) return first_name = (left_mem.first_name or "PersonWithNoName" ) # edge case of empty name - occurs for some bugs. if cust_goodbye: if left_mem.last_name: fullname = "{} {}".format(first_name, left_mem.last_name) else: fullname = first_name count = chat.get_members_count() mention = mention_html(left_mem.id, first_name) if left_mem.username: username = "******" + escape(left_mem.username) else: username = mention valid_format = escape_invalid_curly_brackets( cust_goodbye, VALID_WELCOME_FORMATTERS) res = valid_format.format( first=escape(first_name), last=escape(left_mem.last_name or first_name), fullname=escape(fullname), username=username, mention=mention, count=count, chatname=escape(chat.title), id=left_mem.id, ) buttons = sql.get_gdbye_buttons(chat.id) keyb = build_keyboard(buttons) else: res = sql.DEFAULT_GOODBYE keyb = [] keyboard = InlineKeyboardMarkup(keyb) send(update, res, keyboard, sql.DEFAULT_GOODBYE)
def gban(update, context): message = update.effective_message chat = update.effective_chat args = context.args user_id, reason = extract_user_and_text(message, args) if not user_id: message.reply_text("Anda sepertinya tidak mengacu pada pengguna.") return if user_id == OWNER_ID: message.reply_text( "Usaha yang bagus -_- tapi aku tidak akan pernah memberinya.") return if int(user_id) in DEV_USERS: message.reply_text( "Whatt ... Bagaimana saya bisa gban seseorang yang merawat saya +_+" ) return if int(user_id) in SUDO_USERS: message.reply_text( "Saya memata-matai, dengan mata kecil saya ... perang pengguna sudo! Mengapa kalian saling menyerang?" ) return if int(user_id) in SUPPORT_USERS: message.reply_text( "OOOH seseorang mencoba memberi dukungan kepada pengguna! *meraih popcorn*" ) return if user_id in (777000, 1087968824): message.reply_text( "Bagaimana saya bisa melarang seseorang yang saya tidak tahu siapa itu." ) return if user_id == context.bot.id: message.reply_text( "-_- Lucu sekali, ayo gban sendiri kenapa tidak? Usaha yang bagus." ) return if not reason: message.reply_text( "Harap sebutkan alasannya. Saya tidak akan mengizinkan gban :)") return try: user_chat = context.bot.get_chat(user_id) except BadRequest as excp: message.reply_text(excp.message) return if user_chat.type != "private": message.reply_text("Itu bukan pengguna!") return if user_chat.first_name == "": message.reply_text( "Ini adalah akun yang telah dihapus! tidak ada gunanya memberi mereka..." ) return if gban_db.is_user_gbanned(user_id): if not reason: message.reply_text( "Pengguna ini sudah diblokir; Saya akan mengubah alasannya, tetapi Anda belum memberi saya satu pun..." ) return old_reason = gban_db.update_gban_reason( user_id, user_chat.username or user_chat.first_name, reason) user_id, new_reason = extract_user_and_text(message, args) if old_reason: banner = update.effective_user bannerid = banner.id bannername = banner.first_name new_reason = f"{new_reason} // GBanned oleh {bannername} banner id: {bannerid}" context.bot.sendMessage( GBAN_LOGS, "<b>Global Ban Reason Update</b>" "\n<b>Sudo Admin:</b> {}" "\n<b>User:</b> {}" "\n<b>ID:</b> <code>{}</code>" "\n<b>Previous Reason:</b> {}" "\n<b>New Reason:</b> {}".format( mention_html(banner.id, banner.first_name), mention_html(user_chat.id, user_chat.first_name or "Deleted Account"), user_chat.id, old_reason, new_reason, ), parse_mode=ParseMode.HTML, ) message.reply_text( "Pengguna ini sudah diblokir, karena alasan berikut:\n" "<code>{}</code>\n" "Saya telah pergi dan memperbaruinya dengan alasan baru Anda!". format(html.escape(old_reason)), parse_mode=ParseMode.HTML, ) else: message.reply_text( "Pengguna ini sudah diblokir, tetapi tidak ada alasan yang ditetapkan; Saya telah pergi dan memperbaruinya!" ) return message.reply_text( f"<b>Pelarangan Global untuk</b> {mention_html(user_chat.id, user_chat.first_name)}" f"\n<b>ID Pengguna</b>: <code>{user_chat.id}</code>" f"\n<b>Alasan</b>: <code>{reason or 'Tidak ada alasan yang diberikan'}</code>", parse_mode=ParseMode.HTML, ) banner = update.effective_user bannerid = banner.id bannername = banner.first_name reason = f"{reason} // GBanned oleh {bannername} banner id: {bannerid}" context.bot.sendMessage( GBAN_LOGS, "<b>New Global Ban</b>" "\n#GBAN" "\n<b>Status:</b> <code>Enforcing</code>" "\n<b>Sudo Admin:</b> {}" "\n<b>User:</b> {}" "\n<b>ID:</b> <code>{}</code>" "\n<b>Reason:</b> {}".format( mention_html(banner.id, banner.first_name), mention_html(user_chat.id, user_chat.first_name), user_chat.id, reason or "No reason given", ), parse_mode=ParseMode.HTML, ) try: context.bot.kick_chat_member(chat.id, user_chat.id) except BadRequest as excp: if excp.message in GBAN_ERRORS: pass gban_db.gban_user(user_id, user_chat.username or user_chat.first_name, reason)
def ungban(update, context): message = update.effective_message args = context.args user_id = extract_user(message, args) if not user_id: message.reply_text("Anda sepertinya tidak mengacu pada pengguna.") return user_chat = context.bot.get_chat(user_id) if user_chat.type != "private": message.reply_text("Itu bukan pengguna!") return if not gban_db.is_user_gbanned(user_id): message.reply_text("Pengguna ini tidak dilarang!") return banner = update.effective_user message.reply_text( "Saya akan memberi {} kesempatan kedua, secara global.".format( user_chat.first_name)) context.bot.sendMessage( GBAN_LOGS, "<b>Regression of Global Ban</b>" "\n#UNGBAN" "\n<b>Status:</b> <code>Ceased</code>" "\n<b>Sudo Admin:</b> {}" "\n<b>User:</b> {}" "\n<b>ID:</b> <code>{}</code>".format( mention_html(banner.id, banner.first_name), mention_html(user_chat.id, user_chat.first_name), user_chat.id, ), parse_mode=ParseMode.HTML, ) chats = get_all_chats() for chat in chats: chat_id = chat["chat_id"] # Check if this group has disabled gbans if not gban_db.does_chat_gban(chat_id): continue try: member = context.bot.get_chat_member(chat_id, user_id) if member.status == "kicked": context.bot.unban_chat_member(chat_id, user_id) except BadRequest as excp: if excp.message in UNGBAN_ERRORS: pass else: message.reply_text( "Tidak dapat membatalkan gban karena: {}".format( excp.message)) context.bot.send_message( OWNER_ID, "Tidak dapat membatalkan gban karena: {}".format( excp.message), ) return except TelegramError: pass gban_db.ungban_user(user_id) message.reply_text("Tidak di larang lagi.")