Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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.")