async def ban_hammer(_, message: Message): if await CheckAdmin(message) is True: reply = message.reply_to_message if reply: user = reply.from_user["id"] else: user = get_arg(message) if not user: await message.edit( "You need to specify a user by replying, or providing a username or user id...!" ) return try: get_user = await app.get_users(user) await app.kick_chat_member( chat_id=message.chat.id, user_id=get_user.id, ) await message.edit( f"Banned [{get_user.first_name}](tg://user?id={get_user.id}) from the chat." ) except Exception as e: await message.edit(f"{e}") else: await message.edit("User need to be Admin to use this command")
async def demote(client, message: Message): if await CheckAdmin(message) is False: await message.edit("User need to be Admin to use this Command") return reply = message.reply_to_message if reply: user = reply.from_user["id"] else: user = get_arg(message) if not user: await message.edit( "User is Missing `CanPromoteMembers` Rights to use this Command" ) return get_user = await app.get_users(user) try: await app.promote_chat_member( message.chat.id, user, is_anonymous=False, can_change_info=False, can_delete_messages=False, can_edit_messages=False, can_invite_users=False, can_promote_members=False, can_restrict_members=False, can_pin_messages=False, can_post_messages=False, ) await message.edit( f"Successfully Demoted [{get_user.first_name}](tg://user?id={get_user.id})" ) except Exception as e: await message.edit(f"{e}")
async def demote(client, message: Message): try: reply = message.reply_to_message if reply: user = reply.from_user["id"] else: user = get_arg(message) get_user = await app.get_users(user) await app.promote_chat_member( message.chat.id, user, is_anonymous=False, can_change_info=False, can_delete_messages=False, can_edit_messages=False, can_invite_users=False, can_promote_members=False, can_restrict_members=False, can_pin_messages=False, can_post_messages=False, ) await message.edit( f"Successfully Demoted [{get_user.first_name}](tg://user?id={get_user.id})" ) except Exception as e: await message.edit(f"{e}")
async def promote(client, message: Message): try: title = "Admin" reply = message.reply_to_message if reply: user = reply.from_user["id"] title = str(get_arg(message)) else: args = get_args(message) user = args[0] if len(args) > 1: title = " ".join(args[1:]) get_user = await app.get_users(user) await app.promote_chat_member(message.chat.id, user, can_manage_chat=True, can_change_info=True, can_delete_messages=True, can_restrict_members=True, can_invite_users=True, can_pin_messages=True, can_manage_voice_chats=True) await message.edit( f"Successfully Promoted [{get_user.first_name}](tg://user?id={get_user.id}) with title {title}" ) except Exception as e: await message.edit(f"{e}") if title: try: await app.set_administrator_title(message.chat.id, user, title) except: pass
async def unban(_, message: Message): reply = message.reply_to_message if reply: user = reply.from_user["id"] else: user = get_arg(message) try: get_user = await app.get_users(user) await app.unban_chat_member(chat_id=message.chat.id, user_id=get_user.id) await message.edit( f"Unbanned [{get_user.first_name}](tg://user?id={get_user.id}) from the chat." ) except Exception as e: await message.edit(f"{e}")
async def help(client, message): args = get_arg(message) if not args: text = "**Available Commands**\n\n" for key, value in HELP.items(): text += f"{key}: {value}\n\n" await message.edit(text) return else: module_help = CMD_HELP.get(args, False) if not module_help: await message.edit("Invalid module name specified") return else: await message.edit(module_help)
async def mute_hammer(_, message: Message): reply = message.reply_to_message if reply: user = reply.from_user["id"] else: user = get_arg(message) try: get_user = await app.get_users(user) await app.restrict_chat_member(chat_id=message.chat.id, user_id=get_user.id, permissions=mute_permission) await message.edit( f"[{get_user.first_name}](tg://user?id={get_user.id}) has been muted.**" ) except Exception as e: await message.edit(f"{e}")
async def invite(client, message): reply = message.reply_to_message if reply: user = reply.from_user["id"] else: user = get_arg(message) if not user: await message.edit("**I can't invite no-one, can I?**") return get_user = await app.get_users(user) try: await app.add_chat_members(message.chat.id, get_user.id) await message.edit( f"Successfully added [{get_user.first_name}](tg://user?id={get_user.id}) to this chat" ) except Exception as e: await message.edit(f"{e}")
async def promote(client, message: Message): if await CheckAdmin(message) is False: await message.edit("User need to be Admin to use this command") return title = "Admin" reply = message.reply_to_message if reply: user = reply.from_user["id"] title = str(get_arg(message)) else: args = get_args(message) if not args: await message.edit( "User is Missing `CanPromoteMembers` Rights to use this Command" ) return user = args[0] if len(args) > 1: title = " ".join(args[1:]) get_user = await app.get_users(user) try: await app.promote_chat_member(message.chat.id, user, can_manage_chat=True, can_change_info=True, can_delete_messages=True, can_restrict_members=True, can_invite_users=True, can_pin_messages=True, can_manage_voice_chats=True) await message.edit( f"Successfully Promoted [{get_user.first_name}](tg://user?id={get_user.id}) with title {title}" ) except Exception as e: await message.edit(f"{e}") if title: try: await app.set_administrator_title(message.chat.id, user, title) except: pass
async def upstream(client, message): status = await message.edit("`Checking for updates, please wait....`") conf = get_arg(message) off_repo = UPSTREAM_REPO_URL try: txt = "`Oops.. Updater cannot continue due to " txt += "some problems occured`\n\n**LOGTRACE:**\n" repo = Repo() except NoSuchPathError as error: await status.edit(f"{txt}\n`directory {error} is not found`") repo.__del__() return except GitCommandError as error: await status.edit(f"{txt}\n`Early failure! {error}`") repo.__del__() return except InvalidGitRepositoryError as error: if conf != "now": pass repo = Repo.init() origin = repo.create_remote("upstream", off_repo) origin.fetch() repo.create_head("master", origin.refs.master) repo.heads.master.set_tracking_branch(origin.refs.master) repo.heads.master.checkout(True) ac_br = repo.active_branch.name if ac_br != "master": await status.edit( f"**[UPDATER]:**` You are on ({ac_br})\n Please change to master branch.`" ) repo.__del__() return try: repo.create_remote("upstream", off_repo) except BaseException: pass ups_rem = repo.remote("upstream") ups_rem.fetch(ac_br) changelog = await gen_chlog(repo, f"HEAD..upstream/{ac_br}") if "now" not in conf: if changelog: changelog_str = f"**New UPDATE available for [[{ac_br}]]({UPSTREAM_REPO_URL}/tree/{ac_br}):\n\nCHANGELOG**\n\n{changelog}" if len(changelog_str) > 4096: await status.edit( "`Changelog is too big, view the file to see it.`") file = open("output.txt", "w+") file.write(changelog_str) file.close() await app.send_document( message.chat.id, "output.txt", caption=f"Do {PREFIX}`update now` to update.", reply_to_message_id=status.message_id, ) remove("output.txt") else: return await status.edit( f"{changelog_str}\n\nDo `.update now` to update.", disable_web_page_preview=True, ) else: await status.edit( f"\n`Your BOT is` **up-to-date** `with` **[[{ac_br}]]({UPSTREAM_REPO_URL}/tree/{ac_br})**\n", disable_web_page_preview=True, ) repo.__del__() return if HEROKU_API is not None: import heroku3 heroku = heroku3.from_key(HEROKU_API) heroku_app = None heroku_applications = heroku.apps() if not HEROKU_APP_NAME: await status.edit( "`Please set up the HEROKU_APP_NAME variable to be able to update userbot.`" ) repo.__del__() return for app in heroku_applications: if app.name == HEROKU_APP_NAME: heroku_app = app break if heroku_app is None: await status.edit( f"{txt}\n`Invalid Heroku credentials for updating userbot dyno.`" ) repo.__del__() return await status.edit( "`Userbot dyno build in progress, please wait for it to complete.`" ) ups_rem.fetch(ac_br) repo.git.reset("--hard", "FETCH_HEAD") heroku_git_url = heroku_app.git_url.replace( "https://", "https://*****:*****@") if "heroku" in repo.remotes: remote = repo.remote("heroku") remote.set_url(heroku_git_url) else: remote = repo.create_remote("heroku", heroku_git_url) try: remote.push(refspec=f"HEAD:refs/heads/{ac_br}", force=True) except GitCommandError as error: pass await status.edit("`Successfully Updated!\nRestarting, please wait...`" ) else: # Classic Updater, pretty straightforward. try: ups_rem.pull(ac_br) except GitCommandError: repo.git.reset("--hard", "FETCH_HEAD") await updateme_requirements() await status.edit( "`Successfully Updated!\nBot is restarting... Wait for a second!`", ) # Spin a new instance of bot args = [sys.executable, "./resources/startup/deploy.sh"] execle(sys.executable, *args, environ) return