def check_and_ban(update, user_id, should_message=True): chat = update.effective_chat message = update.effective_message try: if sw is not None: sw_ban = sw.get_ban(user_id) if sw_ban: spamwatch_reason = sw_ban.reason chat.kick_member(user_id) if should_message: message.reply_text(tld( chat.id, "antispam_spamwatch_banned").format(spamwatch_reason), parse_mode=ParseMode.HTML) return else: return except Exception: pass if sql.is_user_gbanned(user_id): chat.kick_member(user_id) if should_message: userr = sql.get_gbanned_user(user_id) usrreason = userr.reason if not usrreason: usrreason = tld(chat.id, "antispam_no_reason") message.reply_text(tld( chat.id, "antispam_checkban_user_removed").format(usrreason), parse_mode=ParseMode.MARKDOWN) return
def check_and_ban(update, user_id, should_message=True): chat = update.effective_chat message = update.effective_message try: if sw is not None: if sw_ban := sw.get_ban(user_id): spamwatch_reason = sw_ban.reason chat.kick_member(user_id) if should_message: message.reply_text(tld( chat.id, "antispam_spamwatch_banned").format(spamwatch_reason), parse_mode=ParseMode.HTML) return except Exception: pass
async def user_info(message, user, strings): chat_id = message.chat.id text = strings["user_info"] text += strings["info_id"].format(id=user['user_id']) text += strings["info_first"].format(first_name=str(user['first_name'])) if user['last_name'] is not None: text += strings["info_last"].format(last_name=str(user['last_name'])) if user['username'] is not None: text += strings["info_username"].format( username="******" + str(user['username'])) text += strings['info_link'].format(user_link=str(await get_user_link(user['user_id']))) text += '\n' try: spamwatch = sw.get_ban(int(user['user_id'])) if spamwatch: text += strings["info_sw_ban"] text += strings['info_sw_ban_reason'].format( sw_reason=str(spamwatch.reason)) else: pass except BaseException: pass # avoids crash if api is down if await is_user_admin(chat_id, user['user_id']) is True: text += strings['info_admeme'] for module in [m for m in LOADED_MODULES if hasattr(m, '__user_info__')]: if txt := await module.__user_info__(message, user['user_id']): text += txt
def info(bot: Bot, update: Update, args: List[str]): msg = update.effective_message # type: Optional[Message] user_id = extract_user(update.effective_message, args) chat = update.effective_chat # type: Optional[Chat] if user_id: user = bot.get_chat(user_id) elif not msg.reply_to_message and not args: user = msg.from_user elif not msg.reply_to_message and ( not args or (len(args) >= 1 and not args[0].startswith("@") and not args[0].isdigit() and not msg.parse_entities([MessageEntity.TEXT_MENTION]))): msg.reply_text(tld(chat.id, "misc_info_extract_error")) return else: return text = tld(chat.id, "misc_info_1") text += tld(chat.id, "misc_info_id").format(user.id) text += tld(chat.id, "misc_info_first").format(html.escape(user.first_name)) if user.last_name: text += tld(chat.id, "misc_info_name").format(html.escape(user.last_name)) if user.username: text += tld(chat.id, "misc_info_username").format(html.escape(user.username)) text += tld(chat.id, "misc_info_user_link").format(mention_html(user.id, "link")) try: spamwatch = sw.get_ban(int(user.id)) if spamwatch: text += tld(chat.id, "misc_info_swban1") text += tld(chat.id, "misc_info_swban2").format(spamwatch.reason) text += tld(chat.id, "misc_info_swban3") else: pass except: pass # avoids crash if api is down if user.id == OWNER_ID: text += tld(chat.id, "misc_info_is_owner") else: if user.id == int(254318997): text += tld(chat.id, "misc_info_is_original_owner") if user.id in SUDO_USERS: text += tld(chat.id, "misc_info_is_sudo") else: if user.id in SUPPORT_USERS: text += tld(chat.id, "misc_info_is_support") if user.id in WHITELIST_USERS: text += tld(chat.id, "misc_info_is_whitelisted") for mod in USER_INFO: mod_info = mod.__user_info__(user.id, chat.id).strip() if mod_info: text += "\n\n" + mod_info update.effective_message.reply_text(text, parse_mode=ParseMode.HTML)
def left_member(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] should_goodbye, cust_goodbye, cust_content, goodbye_type = sql.get_gdbye_pref( chat.id) cust_goodbye = markdown_to_html(cust_goodbye) if should_goodbye: left_mem = update.effective_message.left_chat_member if left_mem: if is_user_gbanned(left_mem.id): return if sw is not None: sw_ban = sw.get_ban(left_mem.id) if sw_ban: return # 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( tld(chat.id, 'welcome_bot_owner_left')) return # if media goodbye, use appropriate function for it if goodbye_type not in (sql.Types.TEXT, sql.Types.BUTTON_TEXT): 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 # Formatting text first_name = left_mem.first_name or "PersonWithNoName" # edge case of empty name - occurs for some bugs. 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 formatted_text = cust_goodbye.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) # Build keyboard buttons = sql.get_gdbye_buttons(chat.id) keyb = build_keyboard(buttons) keyboard = InlineKeyboardMarkup(keyb) # Send message ENUM_FUNC_MAP[goodbye_type](chat.id, cust_content, caption=formatted_text, reply_markup=keyboard, parse_mode="html", reply_to_message_id=reply) 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)
def new_member(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] should_welc, cust_welcome, cust_content, welc_type = sql.get_welc_pref( chat.id) cust_welcome = markdown_to_html(cust_welcome) if should_welc: sent = None new_members = update.effective_message.new_chat_members for new_mem in new_members: # Give start information when add bot to group if is_user_gbanned(new_mem.id): return if sw is not None: sw_ban = sw.get_ban(new_mem.id) if sw_ban: return if new_mem.id == bot.id: bot.send_message( MESSAGE_DUMP, "I have been added to {} with ID: <pre>{}</pre>".format( chat.title, chat.id), parse_mode=ParseMode.HTML) bot.send_message(chat.id, tld(chat.id, 'welcome_added_to_grp')) else: if is_user_gbanned(new_mem.id): return # If welcome message is media, send with appropriate function if welc_type not in (sql.Types.TEXT, sql.Types.BUTTON_TEXT): 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 # Formatting text first_name = new_mem.first_name or "PersonWithNoName" # edge case of empty name - occurs for some bugs. 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 formatted_text = cust_welcome.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) # Build keyboard buttons = sql.get_welc_buttons(chat.id) keyb = build_keyboard(buttons) getsec, mutetime, custom_text = sql.welcome_security( chat.id) member = chat.get_member(new_mem.id) # If user ban protected don't apply security on him if is_user_ban_protected(chat, new_mem.id, chat.get_member(new_mem.id)): pass elif getsec: # If mute time is turned on if mutetime: if mutetime[:1] == "0": if member.can_send_messages is None or member.can_send_messages: try: bot.restrict_chat_member( chat.id, new_mem.id, can_send_messages=False) canrest = True except BadRequest: canrest = False else: canrest = False else: mutetime = extract_time( update.effective_message, mutetime) if member.can_send_messages is None or member.can_send_messages: try: bot.restrict_chat_member( chat.id, new_mem.id, until_date=mutetime, can_send_messages=False) canrest = True except BadRequest: canrest = False else: canrest = False # If security welcome is turned on if canrest: sql.add_to_userlist(chat.id, new_mem.id) keyb.append([ InlineKeyboardButton( text=str(custom_text), callback_data="check_bot_({})".format( new_mem.id)) ]) keyboard = InlineKeyboardMarkup(keyb) # Send message ENUM_FUNC_MAP[welc_type](chat.id, cust_content, caption=formatted_text, reply_markup=keyboard, parse_mode="html", reply_to_message_id=reply) 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_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 = [] getsec, mutetime, custom_text = sql.welcome_security(chat.id) member = chat.get_member(new_mem.id) # If user ban protected don't apply security on him if is_user_ban_protected(chat, new_mem.id, chat.get_member(new_mem.id)): pass elif getsec: if mutetime: if mutetime[:1] == "0": if member.can_send_messages is None or member.can_send_messages: try: bot.restrict_chat_member( chat.id, new_mem.id, can_send_messages=False) canrest = True except BadRequest: canrest = False else: canrest = False else: mutetime = extract_time(update.effective_message, mutetime) if member.can_send_messages is None or member.can_send_messages: try: bot.restrict_chat_member( chat.id, new_mem.id, until_date=mutetime, can_send_messages=False) canrest = True except BadRequest: canrest = False else: canrest = False if canrest: sql.add_to_userlist(chat.id, new_mem.id) keyb.append([ InlineKeyboardButton( text=str(custom_text), callback_data="check_bot_({})".format( new_mem.id)) ]) keyboard = InlineKeyboardMarkup(keyb) sent = send(update, res, keyboard, sql.DEFAULT_WELCOME.format( first=first_name)) # type: Optional[Message] 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)