def check_and_ban(update, user_id, should_message=True): try: spmban = spamwtc.get_ban(int(user_id)) if spmban: update.effective_chat.kick_member(user_id) if should_message: update.effective_message.reply_text( f"This person has been detected as spambot by @SpamWatch and has been removed!\nReason: <code>{spmban.reason}</code>", parse_mode=ParseMode.HTML, ) return else: return except Exception: pass if sql.is_user_gbanned(user_id): update.effective_chat.kick_member(user_id) if should_message: usr = sql.get_gbanned_user(user_id) greason = usr.reason if not greason: greason = "No reason given" update.effective_message.reply_text( f"*Alert! this user was GBanned and have been removed!*\n*Reason*: {greason}", parse_mode=ParseMode.MARKDOWN, ) return
def new_member(update, context): chat = update.effective_chat user = update.effective_user msg = update.effective_message chat_name = chat.title or chat.first or chat.username should_welc, cust_welcome, welc_type = sql.get_welc_pref(chat.id) cust_welcome = markdown_to_html(cust_welcome) welc_mutes = sql.welcome_mutes(chat.id) user_id = user.id human_checks = sql.get_human_checks(user_id, chat.id) time_value = sql.getKickTime(str(chat.id)) if should_welc: sent = None new_members = update.effective_message.new_chat_members for new_mem in new_members: 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 BadRequest: pass reply = False # Ignore spamwatch banned users try: sw = spamwtc.get_ban(int(new_mem.id)) if sw: return except Exception: pass # Ignore gbanned users if is_user_gbanned(new_mem.id): return # Give the owner a special welcome if new_mem.id == OWNER_ID: update.effective_message.reply_text( "Master is in the houseeee, let's get this party started!", reply_to_message_id=reply, ) continue # Make bot greet admins elif new_mem.id == context.bot.id: update.effective_message.reply_text( "Hey {}, I'm {}! Thank you for adding me to {}" " and be sure to join our channel: @Shokotm to know more about updates and tricks!" .format(user.first_name, context.bot.first_name, chat_name), reply_to_message_id=reply, ) context.bot.send_message( MESSAGE_DUMP, "αℓℓυкα have been added to <pre>{}</pre> with ID: \n<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: sent = ENUM_FUNC_MAP[welc_type](chat.id, cust_welcome) # print(bool(sent)) continue # 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_html(new_mem.id, first_name) if new_mem.username: username = "******" + escape(new_mem.username) else: username = mention valid_format = escape_invalid_curly_brackets( cust_welcome, VALID_WELCOME_FORMATTERS) res = valid_format.format( first=escape(first_name), last=escape(new_mem.last_name or first_name), fullname=escape(fullname), username=username, mention=mention, count=count, chatname=escape(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, chatname=escape( chat.title))) # type: Optional[Message] # User exception from mutes: 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": context.bot.restrict_chat_member( chat.id, new_mem.id, permissions=ChatPermissions( can_send_messages=True, can_send_media_messages=False, can_send_other_messages=False, can_invite_users=False, can_pin_messages=False, can_send_polls=False, can_change_info=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 = "Hey {}!".format( mention_html(user.id, new_mem.first_name)) msg.reply_text( "{}\nClick the button below to start talking.".format( new_join_mem), reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton( text="Yus, I'm a human", callback_data="user_join_({})".format( new_mem.id), ) ]]), parse_mode=ParseMode.HTML, reply_to_message_id=reply, ) context.bot.restrict_chat_member( chat.id, new_mem.id, permissions=ChatPermissions( can_send_messages=False, can_invite_users=False, can_pin_messages=False, can_send_polls=False, can_change_info=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: context.bot.delete_message(chat.id, prev_welc) except BadRequest: pass if sent: sql.set_clean_welcome(chat.id, sent.message_id)
def left_member(update, context): chat = update.effective_chat # type: Optional[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 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: 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("RIP Master", 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)
async def fetch_info(replied_user, event): """ Get details from the User object. """ user_id = replied_user.user.id chat = event.chat_id first_name = replied_user.user.first_name last_name = replied_user.user.last_name username = replied_user.user.username user_bio = replied_user.about is_bot = replied_user.user.bot first_name = first_name.replace( "\u2060", "") if first_name else ("This User has no First Name") last_name = last_name.replace( "\u2060", "") if last_name else ("This User has no Last Name") username = "******".format(username) if username else ( "This User has no Username") user_bio = "This User has no About" if not user_bio else user_bio caption = "<b>User info:</b> \n" caption += f"First Name: {first_name} \n" caption += f"Last Name: {last_name} \n" caption += f"Username: {username} \n" caption += f"Is Bot: {is_bot} \n" caption += f"ID: <code>{user_id}</code> \n \n" caption += f"Bio: \n<code>{user_bio}</code>" if user_id == OWNER_ID: caption += "\n\n<i>Aye this guy is my owner.\nI would never do anything against him!</i>" elif user_id in SUDO_USERS: caption += ("\n\n<i>This person is one of my sudo users! " "Nearly as powerful as my owner - so watch it.</i>") elif user_id in SUPPORT_USERS: caption += ( "\n\n<i>This person is one of my support users! " "Not quite a sudo user, but can still gban you off the map.</i>") elif user_id in WHITELIST_USERS: caption += ("\n\n<i>This person has been whitelisted! " "That means I'm not allowed to ban/kick them.</i>") try: sw = spamwtc.get_ban(int(user_id)) if sw: caption += "\n\n<i>This person is banned in Spamwatch!</i>" caption += f"\nResason: <i>{sw.reason}</i>" else: pass except: pass # Don't break on exceptions like if api is down? for mod in USER_INFO: try: mod_info = mod.__user_info__(user_id).strip() except TypeError: mod_info = mod.__user_info__(user_id, chat).strip() if mod_info: caption += "\n\n" + mod_info caption += f"\nPermanent Link To Profile: " caption += f"<a href=\"tg://user?id={user_id}\">{first_name}</a>" return caption