Пример #1
0
def ban(bot: Bot, update: Update, args: List[str]) -> str:
    chat = update.effective_chat  # type: Optional[Chat]
    user = update.effective_user  # type: Optional[User]
    chat_name = chat.title or chat.first or chat.username
    message = update.effective_message  # type: Optional[Message]

    user_id, reason = extract_user_and_text(message, args)

    if not user_id:
        message.reply_text("You don't seem to be referring to a user.")
        return ""

    try:
        member = chat.get_member(user_id)
    except BadRequest as excp:
        if excp.message == "User not found":
            message.reply_text("I can't seem to find this user")
            return ""
        else:
            raise

    if is_user_ban_protected(chat, user_id, member):
        message.reply_text("I really wish I could ban admins...")
        return ""

    if user_id == bot.id:
        message.reply_text("I'm not gonna ban myself..f**k off!")
        return ""

    log = "<b>{}:</b>" \
          "\n#BANNED" \
          "\n<b>Admin:</b> {}" \
          "\n<b>User:</b> {} (<code>{}</code>)".format(html.escape(chat.title),
                                                       mention_html(user.id, user.first_name),
                                                       mention_html(member.user.id, member.user.first_name),
                                                       member.user.id)
    if reason:
        log += "\n<b>Reason:</b> {}".format(reason)

    try:
        chat.kick_member(user_id)
        bot.send_sticker(chat.id, BAN_STICKER)
        message.reply_text(
            f"Admin {mention_html(user.id, user.first_name)} has banned {mention_html(member.user.id, member.user.first_name)} in "
            + f"{chat_name}",
            parse_mode=ParseMode.HTML)
        return log

    except BadRequest as excp:
        if excp.message == "Reply message not found":
            # Do not reply
            message.reply_text('Banned!', quote=False)
            return log
        else:
            LOGGER.warning(update)
            LOGGER.exception("ERROR banning user %s in chat %s (%s) due to %s",
                             user_id, chat.title, chat.id, excp.message)
            message.reply_text("I can't ban that user.")

    return ""
Пример #2
0
def kick(bot: Bot, update: Update, args: List[str]) -> str:
    chat = update.effective_chat  # type: Optional[Chat]
    user = update.effective_user  # type: Optional[User]
    message = update.effective_message  # type: Optional[Message]
    chat_name = chat.title or chat.first or chat.username

    user_id, reason = extract_user_and_text(message, args)

    if not user_id:
        return ""

    try:
        member = chat.get_member(user_id)
    except BadRequest as excp:
        if excp.message == "User not found":
            message.reply_text("I can't seem to find this user")
            return ""
        else:
            raise

    if is_user_ban_protected(chat, user_id):
        message.reply_text("I really wish I could kick admins...")
        return ""

    if user_id == bot.id:
        message.reply_text("Yeahhh I'm not gonna do that")
        return ""

    res = chat.unban_member(user_id)  # unban on current user = kick
    if res:
        bot.send_sticker(chat.id, KICK_STICKER)  # banhammer marie sticker
        bot.sendMessage(chat.id,
                        "{} has been Kicked by {}!".format(
                            mention_html(member.user.id,
                                         member.user.first_name),
                            mention_html(user.id, user.first_name)),
                        parse_mode=ParseMode.HTML)
        log = "<b>{}:</b>" \
              "\n#KICKED" \
              "\n<b>Admin:</b> {}" \
              "\n<b>User:</b> {} (<code>{}</code>)".format(html.escape(chat.title),
                                                           mention_html(user.id, user.first_name),
                                                           mention_html(member.user.id, member.user.first_name),
                                                           member.user.id)
        if reason:
            log += "\n<b>Reason:</b> {}".format(reason)

        return log

    else:
        message.reply_text("Well damn, I can't kick that user.")

    return ""
Пример #3
0
def sban(bot: Bot, update: Update, args: List[str]) -> str:
    chat = update.effective_chat  # type: Optional[Chat]
    user = update.effective_user  # type: Optional[User]
    message = update.effective_message  # type: Optional[Message]

    update.effective_message.delete()

    user_id, reason = extract_user_and_text(message, args)

    if not user_id:
        return ""

    try:
        member = chat.get_member(user_id)
    except BadRequest as excp:
        if excp.message == "User not found":
            return ""
        else:
            raise

    if is_user_ban_protected(chat, user_id, member):
        return ""

    if user_id == bot.id:
        return ""

    log = "<b>{}:</b>" \
          "\n#SILENT BAN" \
          "\n<b>• Admin:</b> {}" \
          "\n<b>• User:</b> {}" \
          "\n<b>• ID:</b> <code>{}</code>".format(html.escape(chat.title), mention_html(user.id, user.first_name),
                                                  mention_html(member.user.id, member.user.first_name), user_id)
    if reason:
        log += "\n<b>• Reason:</b> {}".format(reason)

    try:
        chat.kick_member(user_id)
        return log

    except BadRequest as excp:
        if excp.message == "Reply message not found":
            return log
        else:
            LOGGER.warning(update)
            LOGGER.exception("ERROR banning user %s in chat %s (%s) due to %s",
                             user_id, chat.title, chat.id, excp.message)
    return ""
Пример #4
0
def new_member(bot: Bot, update: Update):

    chat = update.effective_chat
    user = update.effective_user
    msg = update.effective_message
    chat_name = chat.title or chat.first or chat.usernam
    should_welc, cust_welcome, welc_type = sql.get_welc_pref(chat.id)
    welc_mutes = sql.welcome_mutes(chat.id)
    user_id = user.id
    human_checks = sql.get_human_checks(user_id, chat.id)
    if should_welc:
        sent = None
        new_members = update.effective_message.new_chat_members
        for new_mem in new_members:
            # Give the owner a special welcome
            if new_mem.id == OWNER_ID:
                update.effective_message.reply_photo(
                    MEANII_IMG,
                    "Oh, my lub just join your family 💙\nIf you want to know more about him just visit his personal website anilchauhanxda.github.io"
                )

                return "#USER_JOINED\nBot Owner Just Joined The Chat"

            # Give the ALLUKA
            elif new_mem.id in ALLUKA:
                update.effective_message.reply_photo(
                    ALLUKA_IMG,
                    "Woah! I just join this family!\n <i>If you're nice to me, you have to be nice to Nanika too!! If you're going to protect me, you have to protect Nanika too!! But if you're going to be mean to Nanika, I hate you!!</i>\n To know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                bot.send_sticker(chat.id, BAN_STICKER)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            # Welcome SUNNY
            elif new_mem.id in HISOKA:
                update.effective_message.reply_photo(
                    HISOKA_IMG,
                    "blop! blop! <b>Hisoka Morow</b> join your family!\n <i>'My greatest pleasure comes when such people crumple to their knees and I look down upon their disbelieving faces as their plans fail.♥'</i>\nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                bot.send_sticker(chat.id, HISOKA_WELCOME)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            # Welcome BHAVIK
            elif new_mem.id in GING:
                update.effective_message.reply_photo(
                    GING_IMG,
                    "haye!! <b>Ging</b> is just join your family!!\n <i>I'm enjoying the journey. So if your destination is the same as mine, enjoy the side trips. A lot. Something more important than the thing you're hunting could be right there by the side of the road.'</i>\nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            # Welcome Whitelisted
            elif new_mem.id in SHIZUKU:
                update.effective_message.reply_photo(
                    SHIZUKU_IMG,
                    "oh!! <b>Shizuku Murasaki</b> (シズク゠ムラサキ, Shizuku Murasaki) is just join your family!! \n<i>'Breaking the rules means rejecting the Spiders, and Chrollo, too. That I never want to do.'</i> \nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            elif new_mem.id in SILVA:
                update.effective_message.reply_photo(
                    SILVA_IMG,
                    "Woaw!! My father is just enter!!<b>Silva Zoldyck </b> (シズク゠ムラサキ, Shizuku Murasaki) is just join this family!! \n<i>''Never overreach your limits...! Make your move only when you're 100% positive you can make the kill. Otherwise, bide your time...!! It's foolish to show your hand when the odds are against you.'</i> \nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            elif new_mem.id in GON:
                update.effective_message.reply_photo(
                    GON_IMG,
                    "Woaw!! <b>Gon Freecss (ゴン゠フリークス, Gon Furīkusu)</b>is just join this family!! \n<i>''I can't stand being on the losing end forever!!'</i> \nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            elif new_mem.id in ILLUMI_ZOLDYCK:
                update.effective_message.reply_photo(
                    ILLUMI_ZOLDYCK_IMG,
                    "Haye!! My elder brother <b>Illumi Zoldyck (イルミ゠ゾルディック, Irumi Zorudikku) is just join this family!!</b> just enter here.\n<i>''Now I can tell you, that you would not make a good Hunter. Your calling is as an assassin. There's no fire in you, just darkness. It sustains you, drains you of any desire. Your only joy is in causing death, and even that is fleeting. That is how Dad and I molded you.'</i> \nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            elif new_mem.id in LEORIO:
                update.effective_message.reply_photo(
                    LEORIO_IMG,
                    "woh!! The simple guy  <b>Leorio Paradinight</b> is just join this family!!\n<i>'I'm a simple guy. Figured I'd become a doctor... so I could cure some kid with the same disease, tell his parents they owed me nothing! Me... A doctor! Now there's a joke!! Do you know how much it costs to even try to become a doctor? The mind boggles!! It's always about money! Always!! That's why I want it!'</i> \nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            elif new_mem.id in BISCUIT:
                update.effective_message.reply_photo(
                    BISCUIT_IMG,
                    "Haye!! The sleeveless girl  <b>Biscuit Krueger</b> is just join this family!!\n<i>'After 50 years of lying through my teeth, I can tell whether someone's telling the truth.'</i> \nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            elif new_mem.id in CHROLLO:
                update.effective_message.reply_photo(
                    CHROLLO_IMG,
                    "wow!! The founder and leader of the Phantom Troupe <b>Chrollo Lucilfer</b> is just join your family!!\n<i>'Making the abilities yours while exploring the darkness within the soul of the original owner... that's the true pleasure of Skill Hunter.'</i> \nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            elif new_mem.id in KILLUA:
                update.effective_message.reply_photo(
                    KILLUA_IMG,
                    "wow!! My bro <b>Killua Zoldyck </b> is just join your family!!\n<i>'I'm so tired of killing... I just want to be a kid. Hanging out, doing stuff with Gon. That's it.'</i> \nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            elif new_mem.id in MERUEM:
                update.effective_message.reply_photo(
                    MERUEM_IMG,
                    "wow!! <b>Meruem </b> is HERE!!\n<i>'Who am I? Why am I here? A king with no name. A borrowed castle. My subjects are mindless drones. If this is the mandate of Heaven I have been given... I fear... I fear nothing... except the tedium that it will bring!!!'</i> \nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

            elif new_mem.id in KITE:
                update.effective_message.reply_photo(
                    KITE_IMG,
                    "wow!! <b>Kite  (カイト)</b> is HERE!!\n<i>'Kite is killed by Neferpitou, but is soon rebuilt into a manipulated puppet to train the ants. He is later captured by Knuckle and Shoot.'</i> \nTo know about my family do /familylist ",
                    parse_mode=ParseMode.HTML,
                    disable_web_page_preview=True)
                return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
                    html.escape(chat.title),
                    mention_html(user.id, user.first_name), user.id)

        # Don't welcome yourself
            elif new_mem.id == bot.id:
                update.effective_message.reply_text(
                    "Heya!! thank you for choosing me :)")
                continue

            else:
                # If welcome message is media, send with appropriate function
                if welc_type != sql.Types.TEXT and welc_type != sql.Types.BUTTON_TEXT:
                    ENUM_FUNC_MAP[welc_type](chat.id, cust_welcome)
                    return
                # else, move on
                first_name = new_mem.first_name or "PersonWithNoName"  # edge case of empty name - occurs for some bugs.

                if cust_welcome:
                    if cust_welcome == sql.DEFAULT_WELCOME:
                        cust_welcome = random.choice(
                            sql.DEFAULT_WELCOME_MESSAGES).format(
                                first=first_name)
                    #LOGGER.info("Custom Message: {}".format(cust_welcome))
                    if new_mem.last_name:
                        fullname = "{} {}".format(first_name,
                                                  new_mem.last_name)
                    else:
                        fullname = first_name
                    count = chat.get_members_count()
                    mention = mention_markdown(new_mem.id, first_name)
                    if new_mem.username:
                        username = "******" + escape_markdown(new_mem.username)
                    else:
                        username = mention

                    valid_format = escape_invalid_curly_brackets(
                        cust_welcome, VALID_WELCOME_FORMATTERS)
                    res = valid_format.format(
                        first=escape_markdown(first_name),
                        last=escape_markdown(new_mem.last_name or first_name),
                        fullname=escape_markdown(fullname),
                        username=username,
                        mention=mention,
                        count=count,
                        chatname=escape_markdown(chat.title),
                        id=new_mem.id)
                    buttons = sql.get_welc_buttons(chat.id)
                    keyb = build_keyboard(buttons)
                else:
                    res = random.choice(
                        sql.DEFAULT_WELCOME_MESSAGES).format(first=first_name)
                    LOGGER.info("res is {}".format(res))
                    keyb = []

                keyboard = InlineKeyboardMarkup(keyb)

                sent = send(update, res, keyboard,
                            random.choice(sql.DEFAULT_WELCOME_MESSAGES).format(
                                first=escape_markdown(
                                    first_name)))  # type: Optional[Message]

                #User exceptions from welcomemutes
                if is_user_ban_protected(chat, new_mem.id,
                                         chat.get_member(
                                             new_mem.id)) or human_checks:
                    continue
                #Join welcome: soft mute
                if welc_mutes == "soft":
                    bot.restrict_chat_member(chat.id,
                                             new_mem.id,
                                             can_send_messages=True,
                                             can_send_media_messages=False,
                                             can_send_other_messages=False,
                                             can_add_web_page_previews=False,
                                             until_date=(int(time.time() +
                                                             24 * 60 * 60)))
                #Join welcome: strong mute
                if welc_mutes == "strong":
                    new_join_mem = "[{}](tg://user?id={})".format(
                        new_mem.first_name, user.id)
                    msg.reply_text(
                        "{}, click the button below to prove you're not bot".
                        format(new_join_mem),
                        reply_markup=InlineKeyboardMarkup([[
                            InlineKeyboardButton(
                                text="Yes, I'm not bot 🤖",
                                callback_data="user_join_({})".format(
                                    new_mem.id))
                        ]]),
                        parse_mode=ParseMode.MARKDOWN)
                    bot.restrict_chat_member(chat.id,
                                             new_mem.id,
                                             can_send_messages=False,
                                             can_send_media_messages=False,
                                             can_send_other_messages=False,
                                             can_add_web_page_previews=False)
        prev_welc = sql.get_clean_pref(chat.id)
        if prev_welc:
            try:
                bot.delete_message(chat.id, prev_welc)
            except BadRequest as excp:
                pass

            if sent:
                sql.set_clean_welcome(chat.id, sent.message_id)
        return "{}\n#USER_JOINED\n<b>User</b>:{}\n<b>ID</b>:{}".format(
            html.escape(chat.title), mention_html(user.id, user.first_name),
            user.id)
Пример #5
0
def rban(bot: Bot, update: Update, args: List[str]):
    message = update.effective_message

    if not args:
        message.reply_text("You don't seem to be referring to a chat/user.")
        return

    user_id, chat_id = extract_user_and_text(message, args)

    if not user_id:
        message.reply_text("You don't seem to be referring to a user.")
        return
    elif not chat_id:
        message.reply_text("You don't seem to be referring to a chat.")
        return

    try:
        chat = bot.get_chat(chat_id.split()[0])
    except BadRequest as excp:
        if excp.message == "Chat not found":
            message.reply_text(
                "Chat not found! Make sure you entered a valid chat ID and I'm part of that chat."
            )
            return
        else:
            raise

    if chat.type == 'private':
        message.reply_text("I'm sorry, but that's a private chat!")
        return

    if not is_bot_admin(chat, bot.id) or not chat.get_member(
            bot.id).can_restrict_members:
        message.reply_text(
            "I can't restrict people there! Make sure I'm admin and can ban users."
        )
        return

    try:
        member = chat.get_member(user_id)
    except BadRequest as excp:
        if excp.message == "User not found":
            message.reply_text("I can't seem to find this user")
            return
        else:
            raise

    if is_user_ban_protected(chat, user_id, member):
        message.reply_text("I really wish I could ban admins...")
        return

    if user_id == bot.id:
        message.reply_text("I'm not gonna BAN myself, are you crazy?")
        return

    try:
        chat.kick_member(user_id)
        message.reply_text("Banned from chat!")
    except BadRequest as excp:
        if excp.message == "Reply message not found":
            # Do not reply
            message.reply_text('Banned!', quote=False)
        elif excp.message in RBAN_ERRORS:
            message.reply_text(excp.message)
        else:
            LOGGER.warning(update)
            LOGGER.exception("ERROR banning user %s in chat %s (%s) due to %s",
                             user_id, chat.title, chat.id, excp.message)
            message.reply_text("Well damn, I can't ban that user.")
Пример #6
0
def temp_ban(bot: Bot, update: Update, args: List[str]) -> str:
    chat = update.effective_chat  # type: Optional[Chat]
    chat_name = chat.title or chat.first or chat.username
    user = update.effective_user  # type: Optional[User]
    message = update.effective_message  # type: Optional[Message]

    user_id, reason = extract_user_and_text(message, args)

    if not user_id:
        message.reply_text("You don't seem to be referring to a user.")
        return ""

    try:
        member = chat.get_member(user_id)
    except BadRequest as excp:
        if excp.message == "User not found":
            message.reply_text("I can't seem to find this user")
            return ""
        else:
            raise

    if is_user_ban_protected(chat, user_id, member):
        message.reply_text("I really wish I could ban admins...")
        return ""

    if user_id == bot.id:
        message.reply_text("I'm not gonna BAN myself, are you crazy?")
        return ""

    if not reason:
        message.reply_text(
            "You haven't specified a time to ban this user for!")
        return ""

    split_reason = reason.split(None, 1)

    time_val = split_reason[0].lower()
    if len(split_reason) > 1:
        reason = split_reason[1]
    else:
        reason = ""

    bantime = extract_time(message, time_val)

    if not bantime:
        return ""

    log = "<b>{}:</b>" \
          "\n#TEMP BANNED" \
          "\n<b>Admin:</b> {}" \
          "\n<b>User:</b> {} (<code>{}</code>)" \
          "\n<b>Time:</b> {}".format(html.escape(chat.title),
                                     mention_html(user.id, user.first_name),
                                     mention_html(member.user.id, member.user.first_name),
                                     member.user.id,
                                     time_val)
    if reason:
        log += "\n<b>Reason:</b> {}".format(reason)

    try:
        chat.kick_member(user_id, until_date=bantime)
        bot.send_sticker(chat.id, BAN_STICKER)  # banhammer marie sticker
        message.reply_text(f"<b>{html.escape(member.user.first_name)}</b>" +
                           f" will be banned for {time_val} from " +
                           f"{chat_name}",
                           parse_mode=ParseMode.HTML)
        return log

    except BadRequest as excp:
        if excp.message == "Reply message not found":
            # Do not reply
            message.reply_text(
                "Banned! User will be banned for {}.".format(time_val),
                quote=False)
            return log
        else:
            LOGGER.warning(update)
            LOGGER.exception("ERROR banning user %s in chat %s (%s) due to %s",
                             user_id, chat.title, chat.id, excp.message)
            message.reply_text("Well damn, I can't ban that user.")

    return ""
Пример #7
0
def new_member(bot: Bot, update: Update):
    chat = update.effective_chat  # type: Optional[Chat]
    user = update.effective_user  # type: Optional[User]
    msg = update.effective_message  # type: Optional[Message]
    chat_name = chat.title or chat.first or chat.username  # type: Optional:[chat name]
    should_welc, cust_welcome, welc_type = sql.get_welc_pref(chat.id)
    welc_mutes = sql.welcome_mutes(chat.id)
    casPrefs = sql.get_cas_status(str(chat.id))  #check if enabled, obviously
    autoban = sql.get_cas_autoban(str(chat.id))
    chatbanned = sql.isBanned(str(chat.id))
    defense = sql.getDefenseStatus(str(chat.id))
    time_value = sql.getKickTime(str(chat.id))
    if chatbanned:
        bot.leave_chat(int(chat.id))
    elif casPrefs and not autoban and cas.banchecker(user.id):
        bot.restrict_chat_member(chat.id,
                                 user.id,
                                 can_send_messages=False,
                                 can_send_media_messages=False,
                                 can_send_other_messages=False,
                                 can_add_web_page_previews=False)
        msg.reply_text(
            "Warning! This user is CAS Banned. I have muted them to avoid spam. Ban is advised."
        )
        isUserGbanned = gbansql.is_user_gbanned(user.id)
        if not isUserGbanned:
            report = "CAS Banned user detected: <code>{}</code>".format(
                user.id)
            send_to_list(bot, SUDO_USERS + SUPPORT_USERS, report, html=True)
        if defense:
            bantime = int(time.time()) + 60
            chat.kick_member(new_mem.id, until_date=bantime)
    elif casPrefs and autoban and cas.banchecker(user.id):
        chat.kick_member(user.id)
        msg.reply_text(
            "CAS banned user detected! User has been automatically banned!")
        isUserGbanned = gbansql.is_user_gbanned(user.id)
        if not isUserGbanned:
            report = "CAS Banned user detected: <code>{}</code>".format(
                user.id)
            send_to_list(bot, SUDO_USERS + SUPPORT_USERS, report, html=True)
    elif defense and (user.id not in SUDO_USERS + SUPPORT_USERS):
        bantime = int(time.time()) + 60
        chat.kick_member(user.id, until_date=bantime)
    elif should_welc:
        sent = None
        new_members = update.effective_message.new_chat_members
        for new_mem in new_members:
            # Give the owner a special welcome
            if new_mem.id == OWNER_ID:
                update.effective_message.reply_text(
                    "Oh🤴Genos,My Owner has just joined your group.")
                continue

            # Welcome Devs
            elif new_mem.id in DEV_USERS:
                update.effective_message.reply_text(
                    "Whoa! A member of the Heroes Association just joined!")

            # Welcome Sudos
            elif new_mem.id in SUDO_USERS:
                update.effective_message.reply_text(
                    "Huh! A Sudo User just joined! Stay Alert!")

            # Welcome Support
            elif new_mem.id in SUPPORT_USERS:
                update.effective_message.reply_text(
                    "Huh! Someone with a Support User just joined!")

            # Welcome Whitelisted
            elif new_mem.id in WHITELIST_USERS:
                update.effective_message.reply_text(
                    "Oof! A Whitelist User just joined!")

            # Make bot greet admins
            elif new_mem.id == bot.id:
                update.effective_message.reply_text(
                    "Hey {}, I'm {}! Thank you for adding me to {}"
                    " and be sure to check /help in PM for more commands and tricks!"
                    .format(user.first_name, bot.first_name, chat_name))
                bot.send_message(
                    MESSAGE_DUMP,
                    "I have been added to {} with \nID: <pre>{}</pre>".format(
                        chat.title, chat.id),
                    parse_mode=ParseMode.HTML)
            else:
                # If welcome message is media, send with appropriate function
                if welc_type != sql.Types.TEXT and welc_type != sql.Types.BUTTON_TEXT:
                    ENUM_FUNC_MAP[welc_type](chat.id, cust_welcome)
                    return
                # else, move on
                first_name = new_mem.first_name or "PersonWithNoName"  # edge case of empty name - occurs for some bugs.

                if cust_welcome:
                    if new_mem.last_name:
                        fullname = "{} {}".format(first_name,
                                                  new_mem.last_name)
                    else:
                        fullname = first_name
                    count = chat.get_members_count()
                    mention = mention_markdown(new_mem.id, first_name)
                    if new_mem.username:
                        username = "******" + escape_markdown(new_mem.username)
                    else:
                        username = mention

                    valid_format = escape_invalid_curly_brackets(
                        cust_welcome, VALID_WELCOME_FORMATTERS)
                    res = valid_format.format(
                        first=escape_markdown(first_name),
                        last=escape_markdown(new_mem.last_name or first_name),
                        fullname=escape_markdown(fullname),
                        username=username,
                        mention=mention,
                        count=count,
                        chatname=escape_markdown(chat.title),
                        id=new_mem.id)
                    buttons = sql.get_welc_buttons(chat.id)
                    keyb = build_keyboard(buttons)
                else:
                    res = sql.DEFAULT_WELCOME.format(first=first_name,
                                                     chatname=chat.title)
                    keyb = []

                keyboard = InlineKeyboardMarkup(keyb)

                sent = send(
                    update, res, keyboard,
                    sql.DEFAULT_WELCOME.format(
                        first=first_name,
                        chatname=chat.title))  # type: Optional[Message]

                #Sudo user exception from mutes:
                if is_user_ban_protected(chat, new_mem.id,
                                         chat.get_member(new_mem.id)):
                    continue

                #Safe mode
                newMember = chat.get_member(int(new_mem.id))
                if welc_mutes == "on" and ((newMember.can_send_messages is None
                                            or newMember.can_send_messages)):
                    buttonMsg = msg.reply_text(
                        "Click the button below to prove you're human",
                        reply_markup=InlineKeyboardMarkup([[
                            InlineKeyboardButton(
                                text="I'm not a bot! 🤖",
                                callback_data="userverify_({})".format(
                                    new_mem.id))
                        ]]))
                    bot.restrict_chat_member(chat.id,
                                             new_mem.id,
                                             can_send_messages=False,
                                             can_send_media_messages=False,
                                             can_send_other_messages=False,
                                             can_add_web_page_previews=False)

            delete_join(bot, update)

        prev_welc = sql.get_clean_pref(chat.id)
        if prev_welc:
            try:
                bot.delete_message(chat.id, prev_welc)
            except BadRequest as excp:
                pass

            if sent:
                sql.set_clean_welcome(chat.id, sent.message_id)
Пример #8
0
def ban(bot: Bot, update: Update, args: List[str]) -> str:
    chat = update.effective_chat  # type: Optional[Chat]
    user = update.effective_user  # type: Optional[User]
    chat_name = chat.title or chat.first or chat.username
    message = update.effective_message  # type: Optional[Message]

    user_id, reason = extract_user_and_text(message, args)

    if not user_id:
        message.reply_text(
            "р┤Ер┤╡р╡╗ р┤ир┤┐р┤ир╡Нр┤ир╡Жр┤Хр╡Нр┤Хр┤╛р┤│р╡Бр┤В р┤╡р┤▓р┤┐р┤пр┤╡р┤ир┤╛ЁЯШБЁЯШБЁЯШБ."
        )
        return ""

    try:
        member = chat.get_member(user_id)
    except BadRequest as excp:
        if excp.message == "User not found":
            message.reply_text("I can't seem to find this user")
            return ""
        else:
            raise

    if is_user_ban_protected(chat, user_id, member):
        message.reply_text(
            "р┤ир┤┐р┤ир╡Нр┤ир╡Ж р┤Хр┤гр╡Нр┤Яр┤кр╡Нр┤кр╡Лр┤┤р╡З р┤Ор┤ир┤┐р┤Хр╡Нр┤Хр╡Н р┤др╡Лр┤ир╡Нр┤ир┤┐р┤пр┤др╡Н р┤Жр┤гр╡Н р┤ир╡А р┤ор┤гр╡Нр┤Яр┤др╡Нр┤др┤░р┤В р┤Хр┤╛р┤гр┤┐р┤Хр╡Нр┤Хр╡Бр┤ор╡Жр┤ир╡Нр┤ир╡Н ЁЯШЗЁЯШЗЁЯШЗ..."
        )
        return ""

    if user_id == bot.id:
        message.reply_text("I'm not gonna ban myself..f**k off!")
        return ""

    log = "<b>{}:</b>" \
          "\n#BANNED" \
          "\n<b>Admin:</b> {}" \
          "\n<b>User:</b> {} (<code>{}</code>)".format(html.escape(chat.title),
                                                       mention_html(user.id, user.first_name),
                                                       mention_html(member.user.id, member.user.first_name),
                                                       member.user.id)
    if reason:
        log += "\n<b>Reason:</b> {}".format(reason)

    try:
        chat.kick_member(user_id)
        bot.send_sticker(chat.id, BAN_STICKER)
        bot.sendMessage(chat.id,
                        "ЁЯФи {} was banned by {}!".format(
                            mention_html(member.user.id,
                                         member.user.first_name),
                            mention_html(user.id, user.first_name)),
                        parse_mode=ParseMode.HTML)
        return log

    except BadRequest as excp:
        if excp.message == "Reply message not found":
            # Do not reply
            message.reply_text('Banned!', quote=False)
            return log
        else:
            LOGGER.warning(update)
            LOGGER.exception("ERROR banning user %s in chat %s (%s) due to %s",
                             user_id, chat.title, chat.id, excp.message)
            message.reply_text("I can't ban that user.")

    return ""