# Moon-Userbot - telegram userbot # Copyright (C) 2020-present Moon Userbot Organization # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . from subprocess import Popen, PIPE, TimeoutExpired import os from time import perf_counter from pyrogram import Client, filters from pyrogram.types import Message from pyrogram.errors import MessageTooLong from utils.misc import modules_help, prefix @Client.on_message(filters.command(["shell", "sh"], prefix) & filters.me) async def shell(_, message: Message): if len(message.command) < 2: return await message.edit("Specify the command in message text") cmd_text = message.text.split(maxsplit=1)[1] cmd_args = cmd_text.split() cmd_obj = Popen( cmd_args, stdout=PIPE, stderr=PIPE, text=True, ) char = "#" if os.getuid() == 0 else "$" text = f"{char} {cmd_text}\n\n" await message.edit(text + "Running...") try: start_time = perf_counter() stdout, stderr = cmd_obj.communicate(timeout=60) except TimeoutExpired: text += "Timeout expired (60 seconds)" else: stop_time = perf_counter() if stdout: text += f"Output:\n{stdout}\n\n" if stderr: text += f"Error:\n{stderr}\n\n" text += f"Completed in {round(stop_time - start_time, 5)} seconds with code {cmd_obj.returncode}" try: await message.edit(text) except MessageTooLong: await message.edit(text[:-100]) cmd_obj.kill() modules_help["shell"] = {"sh [command]*": "Execute command in shell"}