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 casquery(update: Update, context: CallbackContext): bot, args = context.bot, context.args 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: Update, context: CallbackContext): bot = context.bot 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 and int(user_id) != 1087968824: user = bot.get_chat(user_id) elif user_id and (int(user_id) == 1087968824 or 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)) if chatbanned: bot.leave_chat(int(chat.id)) if 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 adviced." ) isUserGbanned = gbansql.is_user_gbanned(user.id) report = "CAS Banned user detected: <code>{}</code>\nGlobally Banned: {}".format( user.id, isUserGbanned) send_to_list(bot, SUDO_USERS + SUPPORT_USERS, report, html=True) 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) report = "CAS Banned user detected: <code>{}</code>\nGlobally Banned: {}".format( user.id, isUserGbanned) send_to_list(bot, SUDO_USERS + SUPPORT_USERS, report, html=True) 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( "Master is in the houseeee, let's get this party started!") continue # Give the sudos/support a special welcome too elif new_mem.id in SUDO_USERS or new_mem.id in SUPPORT_USERS: update.effective_message.reply_text( "Welcome to the Dark Side! May the force be with you...") 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 if welc_mutes == "on": msg.reply_text( "Click the button below to prove you're human", reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton( text="Yes, I'm a human", 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(update: Update, context: CallbackContext): bot, args = context.bot, context.args 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 del_msg = message.reply_text("searching info data of user....",parse_mode=ParseMode.HTML) text = (f"<b>• General :-</b>\n\n" f"∘ ID: <code>{user.id}</code>\n" f"∘ First Name: {html.escape(user.first_name)}") if user.last_name: text += f"\n∘ Last Name: {html.escape(user.last_name)}" if user.username: text += f"\n∘ Username: @{html.escape(user.username)}" isafk = is_afk(user.id) try: text += "\n\n∘ Currently AFK: " if user.id == bot.id: text += "<code>???</code>" else: text += str(isafk) except: pass try: if user.id == bot.id: num_chats = "???" else: num_chats = get_user_num_chats(user.id) text += f"\n∘ Mutual Chats: <code>{num_chats}</code> " except BadRequest: pass try: status = status = bot.get_chat_member(chat.id, user.id).status if status: if status in "left": text += "\n∘ Chat Status: <em>Not Here!</em>" elif status == "member": text += "\n∘ Chat Status: <em>Is Here!</em>" elif status in "administrator": text += "\n∘ Chat Status: <em>Admin!</em>" elif status in "creator": text += "\n∘ Chat Status: <em>Creator!</em>" except BadRequest: pass 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"\n∘ Admin Title: <code>{custom_title}</code> \n" except BadRequest: pass if user.id ==1286562476: text += "\n🚶🏻♂️Uff,This person is sudo \n HE IS is the cutie!." if user.id == OWNER_ID: text += "\nThis person is my Owner\nI would never do anything against him!." elif user.id in DEV_USERS: text += "\nThis person is my dev\nI would never do anything against him!." 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! " \ " He can 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." elif user.id == bot.id: text+= "\n\nI've Seen Them In... Wow. Are They Stalking Me? They're In All The Same Places I Am... Oh. It's Me.\n" text +="\n" text += "\nCAS banned: " result = cas.banchecker(user.id) text += str(result) for mod in USER_INFO: if mod.__mod_name__ == "info": continue 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 try: profile = bot.get_user_profile_photos(user.id).photos[0][-1] _file = bot.get_file(profile["file_id"]) _file.download(f"{user.id}.png") message.reply_document( document=open(f"{user.id}.png", "rb"), caption=(text), parse_mode=ParseMode.HTML, disable_web_page_preview=True) except IndexError: message.reply_text(text, parse_mode=ParseMode.HTML, disable_web_page_preview=True) finally: del_msg.delete()
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>User Information:</b>\n" f"🆔: <code>{user.id}</code>\n" f"👤<b>Name:</b> {html.escape(user.first_name)}") if user.last_name: text += f"\n🚹<b>Last Name:</b> {html.escape(user.last_name)}" if user.username: text += f"\n<b>♻️Username:</b> @{html.escape(user.username)}" text += f"\n☣️<b>Permanent user link:</b> {mention_html(user.id, 'link🚪')}" num_chats = sql.get_user_num_chats(user.id) text += f"\n🌐<b>Chat count:</b> <code>{num_chats}</code>" text += "\n<b>🎭Number of profile pics:</b> {}".format( bot.get_user_profile_photos(user.id).total_count) text += "\n<b>Support Channel</b> : @mAI_bOTs" 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"\n🛡This user holds the title⚜️ <b>{custom_title}</b> here." except BadRequest: pass if user.id == OWNER_ID: text += "\n🚶🏻♂️Uff,This person is my Owner🤴\nI would never do anything against him!." elif user.id == 861055237: text += "\n🚴♂️Pling,This person is my Creator/developer🤷♂️\nI would never do anything against him!." elif user.id in SUDO_USERS: text += "\n🚴♂️Pling,This person is one of my sudo users! " \ "Nearly as powerful as my owner🕊so watch it.." elif user.id in SUPPORT_USERS: text += "\n🚴♂️Pling,This 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 += "\n🚴♂️Pling,This person has been whitelisted! " \ "That means I'm not allowed to ban/kick them." elif user.id == bot.id: text += "\n💃Lol🧞♂️It's Me😉" 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 try: profile = bot.get_user_profile_photos(user.id).photos[0][-1] bot.sendChatAction(chat.id, "upload_photo") bot.send_photo(chat.id, photo=profile, caption=(text), parse_mode=ParseMode.HTML, disable_web_page_preview=True) except IndexError: update.effective_message.reply_text(text, parse_mode=ParseMode.HTML, disable_web_page_preview=True)
def new_member(update: Update, context: CallbackContext): bot = context.bot 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, cust_media, 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)) isUserGbanned = gbansql.is_user_gbanned(user.id) if isUserGbanned: return 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, permissions=ChatPermissions( 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." ) 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.ban_member(user.id, until_date=bantime) elif casPrefs and autoban and cas.banchecker(user.id): chat.ban_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.ban_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( "Master is in the houseeee, let's get this party started!") continue # Give the sudos/support a special welcome too if new_mem.id in SUDO_USERS or new_mem.id in SUPPORT_USERS: update.effective_message.reply_text( "Welcome to the Dark Side! May the force be with you...") continue # Make bot greet admins if 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: 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_member_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) # If welcome message is media, send with appropriate function if welc_type not in (sql.Types.TEXT, sql.Types.BUTTON_TEXT): sent = ENUM_FUNC_MAP[welc_type]( chat.id, cust_media, caption=res, reply_to_message_id=msg.message_id, parse_mode=ParseMode.MARKDOWN, ) else: 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)): text = "" if time_value: text = " else you'll be kicked after {} seconds.".format( str(time_value)) buttonMsg = msg.reply_text( "Click the button below to prove you're human" + text, 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, permissions=ChatPermissions( can_send_messages=False, can_send_media_messages=False, can_send_other_messages=False, can_add_web_page_previews=False, ), ) if time_value: time.sleep(time_value) member = chat.get_member(int(new_mem.id)) if not (member.can_send_messages or member.status == "left"): print("kicking user..") bantime = int(time.time()) + 60 try: chat.ban_member(new_mem.id, until_date=bantime) except: pass buttonMsg.delete() sent.delete() update.message.delete() 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)