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 __chat_settings__(chat_id, user_id): welcome_pref, _, _ = sql.get_welc_pref(chat_id) goodbye_pref, _, _ = sql.get_gdbye_pref(chat_id) return "This chat has it's welcome preference set to `{}`.\n" \ "It's goodbye preference is `{}`.".format(welcome_pref, goodbye_pref)
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 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 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)