def left_member(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] should_goodbye, cust_goodbye, goodbye_type = sql.get_gdbye_pref(chat.id) if should_goodbye: left_mem = update.effective_message.left_chat_member if left_mem: # Ignore bot being kicked if left_mem.id == bot.id: return # Give the owner a special goodbye if left_mem.id == OWNER_ID: update.effective_message.reply_text( "MY Master ANSHI DQ Left the group") 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_markdown(left_mem.id, first_name) if left_mem.username: username = "******" + escape_markdown(left_mem.username) else: username = mention valid_format = escape_invalid_curly_brackets( cust_goodbye, VALID_WELCOME_FORMATTERS) res = valid_format.format( first=escape_markdown(first_name), last=escape_markdown(left_mem.last_name or first_name), fullname=escape_markdown(fullname), username=username, mention=mention, count=count, chatname=escape_markdown(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) delete_join(bot, update)
def goodbye(bot: Bot, update: Update, args: List[str]): chat = update.effective_chat # type: Optional[Chat] if len(args) == 0 or args[0] == "noformat": noformat = args and args[0] == "noformat" pref, goodbye_m, goodbye_type = sql.get_gdbye_pref(chat.id) update.effective_message.reply_text( "This chat has it's goodbye setting set to: `{}`.\n*The goodbye message " "(not filling the {{}}) is:*".format(pref), parse_mode=ParseMode.MARKDOWN) if goodbye_type == sql.Types.BUTTON_TEXT: buttons = sql.get_gdbye_buttons(chat.id) if noformat: goodbye_m += revert_buttons(buttons) update.effective_message.reply_text(goodbye_m) else: keyb = build_keyboard(buttons) keyboard = InlineKeyboardMarkup(keyb) send(update, goodbye_m, keyboard, sql.DEFAULT_GOODBYE) else: if noformat: ENUM_FUNC_MAP[goodbye_type](chat.id, goodbye_m) else: ENUM_FUNC_MAP[goodbye_type](chat.id, goodbye_m, parse_mode=ParseMode.MARKDOWN) elif len(args) >= 1: if args[0].lower() in ("on", "yes"): sql.set_gdbye_preference(str(chat.id), True) update.effective_message.reply_text( "I'll be sorry when people leave!") elif args[0].lower() in ("off", "no"): sql.set_gdbye_preference(str(chat.id), False) update.effective_message.reply_text( "They leave, they're dead to me.") else: # idek what you're writing, say yes or no update.effective_message.reply_text( "I understand 'on/yes' or 'off/no' only!")
def welcome(bot: Bot, update: Update, args: List[str]): chat = update.effective_chat # type: Optional[Chat] # if no args, show current replies. if len(args) == 0 or args[0].lower() == "noformat": noformat = args and args[0].lower() == "noformat" pref, welcome_m, welcome_type = sql.get_welc_pref(chat.id) update.effective_message.reply_text( "This chat has it's welcome setting set to: `{}`.\n*The welcome message " "(not filling the {{}}) is:*".format(pref), parse_mode=ParseMode.MARKDOWN) if welcome_type == sql.Types.BUTTON_TEXT: buttons = sql.get_welc_buttons(chat.id) if noformat: welcome_m += revert_buttons(buttons) update.effective_message.reply_text(welcome_m) else: keyb = build_keyboard(buttons) keyboard = InlineKeyboardMarkup(keyb) send(update, welcome_m, keyboard, sql.DEFAULT_WELCOME) else: if noformat: ENUM_FUNC_MAP[welcome_type](chat.id, welcome_m) else: ENUM_FUNC_MAP[welcome_type](chat.id, welcome_m, parse_mode=ParseMode.MARKDOWN) elif len(args) >= 1: if args[0].lower() in ("on", "yes"): sql.set_welc_preference(str(chat.id), True) update.effective_message.reply_text("I'll be polite then!") elif args[0].lower() in ("off", "no"): sql.set_welc_preference(str(chat.id), False) update.effective_message.reply_text( "I'll go loaf around and not welcome anyone then.") else: # idek what you're writing, say yes or no update.effective_message.reply_text( "I understand 'on/yes' or 'off/no' only!")
def left_member(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] should_goodbye, cust_goodbye, goodbye_type = sql.get_gdbye_pref(chat.id) if should_goodbye: left_mem = update.effective_message.left_chat_member if left_mem: # Ignore bot being kicked if left_mem.id == bot.id: return # Give the owner a special goodbye if left_mem.id == OWNER_ID: update.effective_message.reply_photo( MEANII_IMG, "Oi! My lub is left ur family..") return # Give the devs a special goodbye elif left_mem.id in ALLUKA: update.effective_message.reply_text( "My brother KILLUA is gonna kill you!!") bot.send_sticker(chat.id, ALLUKA_BYE) return elif left_mem.id in HISOKA: update.effective_message.reply_text( "Don't warry I'll comeback SOON!! ") bot.send_sticker(chat.id, HISOKA_BYE) 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 cust_goodbye == sql.DEFAULT_GOODBYE: cust_goodbye = random.choice( sql.DEFAULT_GOODBYE_MESSAGES).format(first=first_name) if left_mem.last_name: fullname = "{} {}".format(first_name, left_mem.last_name) else: fullname = first_name count = chat.get_members_count() mention = mention_markdown(left_mem.id, first_name) if left_mem.username: username = "******" + escape_markdown(left_mem.username) else: username = mention valid_format = escape_invalid_curly_brackets( cust_goodbye, VALID_WELCOME_FORMATTERS) res = valid_format.format( first=escape_markdown(first_name), last=escape_markdown(left_mem.last_name or first_name), fullname=escape_markdown(fullname), username=username, mention=mention, count=count, chatname=escape_markdown(chat.title), id=left_mem.id) buttons = sql.get_gdbye_buttons(chat.id) keyb = build_keyboard(buttons) else: res = random.choice( sql.DEFAULT_GOODBYE_MESSAGES).format(first=first_name) keyb = [] keyboard = InlineKeyboardMarkup(keyb) send( update, res, keyboard, random.choice( sql.DEFAULT_GOODBYE_MESSAGES).format(first=first_name))
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)
def get(bot, update, notename, show_none=True, no_format=False): chat_id = update.effective_chat.id note = sql.get_note(chat_id, notename) message = update.effective_message # type: Optional[Message] if note: # If we're replying to a message, reply to that message (unless it's an error) if message.reply_to_message: reply_id = message.reply_to_message.message_id else: reply_id = message.message_id if note.is_reply: if MESSAGE_DUMP: try: bot.forward_message(chat_id=chat_id, from_chat_id=MESSAGE_DUMP, message_id=note.value) except BadRequest as excp: if excp.message == "Message to forward not found": message.reply_text( "This message seems to have been lost - I'll remove it " "from your notes list.") sql.rm_note(chat_id, notename) else: raise else: try: bot.forward_message(chat_id=chat_id, from_chat_id=chat_id, message_id=note.value) except BadRequest as excp: if excp.message == "Message to forward not found": message.reply_text( "Looks like the original sender of this note has deleted " "their message - sorry! Get your bot admin to start using a " "message dump to avoid this. I'll remove this note from " "your saved notes.") sql.rm_note(chat_id, notename) else: raise else: text = note.value keyb = [] parseMode = ParseMode.MARKDOWN buttons = sql.get_buttons(chat_id, notename) if no_format: parseMode = None text += revert_buttons(buttons) else: keyb = build_keyboard(buttons) keyboard = InlineKeyboardMarkup(keyb) try: if note.msgtype in (sql.Types.BUTTON_TEXT, sql.Types.TEXT): bot.send_message(chat_id, text, reply_to_message_id=reply_id, parse_mode=parseMode, disable_web_page_preview=True, reply_markup=keyboard) else: ENUM_FUNC_MAP[note.msgtype](chat_id, note.file, caption=text, reply_to_message_id=reply_id, parse_mode=parseMode, disable_web_page_preview=True, reply_markup=keyboard) except BadRequest as excp: if excp.message == "Entity_mention_user_invalid": message.reply_text( "Looks like you tried to mention someone I've never seen before. If you really " "want to mention them, forward one of their messages to me, and I'll be able " "to tag them!") elif FILE_MATCHER.match(note.value): message.reply_text( "This note was an incorrectly imported file from another bot - I can't use " "it. If you really need it, you'll have to save it again. In " "the meantime, I'll remove it from your notes list.") sql.rm_note(chat_id, notename) else: message.reply_text( "This note could not be sent, as it is incorrectly formatted. Ask in " "@allukabot if you can't figure out why!") LOGGER.exception("Could not parse message #%s in chat %s", notename, str(chat_id)) LOGGER.warning("Message was: %s", str(note.value)) return elif show_none: message.reply_text("This note doesn't exist")
def reply_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] message = update.effective_message # type: Optional[Message] to_match = extract_text(message) if not to_match: return if message.reply_to_message: message = message.reply_to_message chat_filters = sql.get_chat_triggers(chat.id) for keyword in chat_filters: pattern = r"( |^|[^\w])" + re.escape(keyword) + r"( |$|[^\w])" if re.search(pattern, to_match, flags=re.IGNORECASE): filt = sql.get_filter(chat.id, keyword) buttons = sql.get_buttons(chat.id, filt.keyword) if len(buttons) > 0: keyb = build_keyboard(buttons) keyboard = InlineKeyboardMarkup(keyb) if filt.is_sticker: message.reply_sticker(filt.reply) elif filt.is_document: message.reply_document(filt.reply) elif filt.is_image: message.reply_photo(filt.reply, reply_markup=keyboard) elif filt.is_audio: message.reply_audio(filt.reply) elif filt.is_voice: message.reply_voice(filt.reply) elif filt.is_video: message.reply_video(filt.reply) elif filt.has_markdown: keyb = build_keyboard(buttons) keyboard = InlineKeyboardMarkup(keyb) should_preview_disabled = True if "telegra.ph" in filt.reply or "youtu.be" in filt.reply: should_preview_disabled = False try: message.reply_text( filt.reply, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=should_preview_disabled, reply_markup=keyboard) except BadRequest as excp: if excp.message == "Unsupported url protocol": message.reply_text( "You seem to be trying to use an unsupported url protocol. Telegram " "doesn't support buttons for some protocols, such as tg://. Please try " "again, or ask in @Sur_vivor for help.") elif excp.message == "Reply message not found": bot.send_message(chat.id, filt.reply, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True, reply_markup=keyboard) else: message.reply_text( "This note could not be sent, as it is incorrectly formatted. Ask in " "@Sur_vivor if you can't figure out why!") LOGGER.warning("Message %s could not be parsed", str(filt.reply)) LOGGER.exception( "Could not parse filter %s in chat %s", str(filt.keyword), str(chat.id)) else: # LEGACY - all new filters will have has_markdown set to True. message.reply_text(filt.reply) break
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)
def new_member(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] should_welc, cust_welcome, welc_type = sql.get_welc_pref(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_text( "🧞♂my Master ANSHI DQ in the houseeee, let's get this party started!" ) continue # Don't welcome yourself elif new_mem.id == bot.id: 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 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, escape_markdown(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) keyb = [] keyboard = InlineKeyboardMarkup(keyb) sent = send(update, res, keyboard, sql.DEFAULT_WELCOME.format( first=first_name)) # type: Optional[Message] 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)