def casquery(bot: Bot, update: Update, args: List[str]): msg = update.effective_message # type: Optional[Message] try: user_id = msg.text.split(' ')[1] except: msg.reply_text("There was a problem parsing the query.") return text = "Your query returned: " result = cas.banchecker(user_id) text += str(result) msg.reply_text(text)
def caschecker(update, context): args = context.args #/info logic msg = update.effective_message # type: Optional[Message] user_id = extract_user(update.effective_message, args) if user_id and int(user_id) != 777000: user = context.bot.get_chat(user_id) elif user_id and int(user_id) == 777000: msg.reply_text( "This is Telegram. Unless you manually entered this reserved account's ID, it is likely a broadcast from a linked channel." ) return 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("I can't extract a user from this.") return else: return text = "<b>CAS Check</b>:" \ "\nID: <code>{}</code>" \ "\nFirst Name: {}".format(user.id, html.escape(user.first_name)) if user.last_name: text += "\nLast Name: {}".format(html.escape(user.last_name)) if user.username: text += "\nUsername: @{}".format(html.escape(user.username)) text += "\n\nCAS Banned: " result = cas.banchecker(user.id) text += str(result) if result: parsing = cas.offenses(user.id) if parsing: text += "\nTotal of Offenses: " text += str(parsing) parsing = cas.timeadded(user.id) if parsing: parseArray = str(parsing).split(", ") text += "\nDay added: " text += str(parseArray[1]) text += "\nTime added: " text += str(parseArray[0]) text += "\n\nAll times are in UTC" update.effective_message.reply_text(text, parse_mode=ParseMode.HTML)
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( "My master has just join your group.") continue # 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)) 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) keyb = [] keyboard = InlineKeyboardMarkup(keyb) sent = send(update, res, keyboard, sql.DEFAULT_WELCOME.format( first=first_name)) # 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 info(bot: Bot, update: Update, args: List[str]): message = update.effective_message chat = update.effective_chat user_id = extract_user(update.effective_message, args) if user_id: user = bot.get_chat(user_id) elif not message.reply_to_message and not args: user = message.from_user elif not message.reply_to_message and ( not args or (len(args) >= 1 and not args[0].startswith("@") and not args[0].isdigit() and not message.parse_entities([MessageEntity.TEXT_MENTION]))): message.reply_text("I can't extract a user from this.") return else: return text = (f"<b>Characteristics:</b>\n" f"ID: <code>{user.id}</code>\n" f"First Name: {html.escape(user.first_name)}") if user.last_name: text += f"\nLast Name: {html.escape(user.last_name)}" if user.username: text += f"\nUsername: @{html.escape(user.username)}" text += f"\nPermanent user link: {mention_html(user.id, 'link')}" num_chats = sql.get_user_num_chats(user.id) text += f"\nChat count: <code>{num_chats}</code>" try: user_member = chat.get_member(user.id) if user_member.status == 'administrator': result = requests.post( f"https://api.telegram.org/bot{TOKEN}/getChatMember?chat_id={chat.id}&user_id={user.id}" ) result = result.json()["result"] if "custom_title" in result.keys(): custom_title = result['custom_title'] text += f"\nThis user holds the title <b>{custom_title}</b> here." except BadRequest: pass if user.id == OWNER_ID: text += "\nThis person is my owner - I would never do anything against them!." elif user.id in DEV_USERS: text += "\nThis person is my dev - I would never do anything against them!." elif user.id in SUDO_USERS: text += "\nThis person is one of my sudo users! " \ "Nearly as powerful as my owner - so watch it.." elif user.id in SUPPORT_USERS: text += "\nThis person is one of my support users! " \ "Not quite a sudo user, but can still gban you off the map." elif user.id in WHITELIST_USERS: text += "\nThis person has been whitelisted! " \ "That means I'm not allowed to ban/kick them." text += "\n" text += "\nCAS banned: " result = cas.banchecker(user.id) text += str(result) for mod in USER_INFO: if mod.__mod_name__ == "Users": continue try: mod_info = mod.__user_info__(user.id) except TypeError: mod_info = mod.__user_info__(user.id, chat.id) if mod_info: text += "\n" + mod_info update.effective_message.reply_text(text, parse_mode=ParseMode.HTML, disable_web_page_preview=True)