def demote(bot: Bot, update: Update, args: List[str]) -> str: chat = update.effective_chat message = update.effective_message user = update.effective_user log_message = "" user_id = extract_user(message, args) if not user_id: message.reply_text("You don't seem to be referring to a user.") return log_message try: user_member = chat.get_member(user_id) except: return log_message if user_member.status == 'creator': message.reply_text( "This person CREATED the chat, how would I demote them?") return log_message if not user_member.status == 'administrator': message.reply_text("Can't demote what wasn't promoted!") return log_message if user_id == bot.id: message.reply_text( "I can't demote myself! Get an admin to do it for me.") return log_message try: bot.promoteChatMember(chat.id, user_id, can_change_info=False, can_post_messages=False, can_edit_messages=False, can_delete_messages=False, can_invite_users=False, can_restrict_members=False, can_pin_messages=False, can_promote_members=False) bot.sendMessage(chat.id, "Sucessfully demoted <b>{}</b>!".format( user_member.user.first_name or user_id), parse_mode=ParseMode.HTML) log_message += "<b>{}:</b>" \ "\n#DEMOTED" \ "\n<b>Admin:</b> {}" \ "\n<b>User:</b> {}".format(html.escape(chat.title), mention_html(user.id, user.first_name), mention_html(user_member.user.id, user_member.user.first_name)) return log_message except BadRequest: message.reply_text("Could not demote. I might not be admin, or the admin status was appointed by another" \ "user, so I can't act upon them!") return log_message
def addwhitelist(bot: Bot, update: Update, args: List[str]) -> str: message = update.effective_message user = update.effective_user chat = update.effective_chat user_id = extract_user(message, args) user_member = bot.getChat(user_id) rt = "" reply = check_user_id(user_id, bot) if reply: message.reply_text(reply) return "" with open(ELEVATED_USERS_FILE, 'r') as infile: data = json.load(infile) if user_id in SUDO_USERS: rt += "This member is a SUDO, Demoting to SUDO." data['sudos'].remove(user_id) SUDO_USERS.remove(user_id) if user_id in SUPPORT_USERS: rt += "This user is already a SUPPORT, Demoting to SUPPORT" data['supports'].remove(user_id) SUPPORT_USERS.remove(user_id) if user_id in WHITELIST_USERS: message.reply_text("This user is already a WHITELIST USER.") return "" data['whitelists'].append(user_id) WHITELIST_USERS.append(user_id) with open(ELEVATED_USERS_FILE, 'w') as outfile: json.dump(data, outfile, indent=4) update.effective_message.reply_text( rt + f"\nSuccessfully promoted {user_member.first_name} to a Whitelist User!" ) log_message = ( f"#WHITELIST\n" f"<b>Admin:</b> {mention_html(user.id, user.first_name)} \n" f"<b>User:</b> {mention_html(user_member.id, user_member.first_name)}") if chat.type != 'private': log_message = f"<b>{html.escape(chat.title)}:</b>\n" + log_message return log_message
def removesudo(bot: Bot, update: Update, args: List[str]) -> str: message = update.effective_message user = update.effective_user chat = update.effective_chat user_id = extract_user(message, args) user_member = bot.getChat(user_id) reply = check_user_id(user_id, bot) if reply: message.reply_text(reply) return "" with open(ELEVATED_USERS_FILE, 'r') as infile: data = json.load(infile) if user_id in SUDO_USERS: message.reply_text("Demoting to normal user") SUDO_USERS.remove(user_id) data['sudos'].remove(user_id) with open(ELEVATED_USERS_FILE, 'w') as outfile: json.dump(data, outfile, indent=4) log_message = ( f"#UNSUDO\n" f"<b>Admin:</b> {mention_html(user.id, user.first_name)}\n" f"<b>User:</b> {mention_html(user_member.id, user_member.first_name)}" ) if chat.type != 'private': log_message = "<b>{}:</b>\n".format(html.escape( chat.title)) + log_message return log_message else: message.reply_text("This user is not a sudo!") return ""
def unbl_user(bot: Bot, update: Update, args: List[str]) -> str: message = update.effective_message user = update.effective_user user_id = extract_user(message, args) if not user_id: message.reply_text("I doubt that's a user.") return "" if user_id == bot.id: message.reply_text("I always notice myself.") return "" try: target_user = bot.get_chat(user_id) except BadRequest as excp: if excp.message == "User not found": message.reply_text("I can't seem to find this user.") return "" else: raise if sql.is_user_blacklisted(user_id): sql.unblacklist_user(user_id) message.reply_text("*notices user*") log_message = "#UNBLACKLIST" \ "\n<b>Admin:</b> {}" \ "\n<b>User:</b> {}".format(mention_html(user.id, user.first_name), mention_html(target_user.id, target_user.first_name)) return log_message else: message.reply_text("I am not ignoring them at all though!") return ""
def promote(bot: Bot, update: Update, args: List[str]) -> str: message = update.effective_message chat = update.effective_chat user = update.effective_user log_message = "" user_id = extract_user(message, args) if not user_id: message.reply_text("You don't seem to be referring to a user🤷🏻♂.") return log_message try: user_member = chat.get_member(user_id) except: return log_message if user_member.status == 'administrator' or user_member.status == 'creator': message.reply_text( "How am I meant to promote someone that's already an admin?") return log_message if user_id == bot.id: message.reply_text( "I can't promote myself! Get an admin to do it for me.") return log_message # set same perms as bot - bot can't assign higher perms than itself! bot_member = chat.get_member(bot.id) try: bot.promoteChatMember( chat.id, user_id, can_change_info=bot_member.can_change_info, can_post_messages=bot_member.can_post_messages, can_edit_messages=bot_member.can_edit_messages, can_delete_messages=bot_member.can_delete_messages, can_invite_users=bot_member.can_invite_users, # can_promote_members=bot_member.can_promote_members, can_restrict_members=bot_member.can_restrict_members, can_pin_messages=bot_member.can_pin_messages) except BadRequest as err: if err.message == "User_not_mutual_contact": message.reply_text( "I can't promote someone who isn't in the group.") return log_message else: message.reply_text("An error occured while promoting.") return log_message bot.sendMessage(chat.id, "Sucessfully promoted <b>{}</b>❤!".format( user_member.user.first_name or user_id), parse_mode=ParseMode.HTML) log_message += "<b>{}:</b>" \ "\n#PROMOTED" \ "\n<b>Admin:</b> {}" \ "\n<b>User:</b> {}".format(html.escape(chat.title), mention_html(user.id, user.first_name), mention_html(user_member.user.id, user_member.user.first_name)) return log_message