If output from .exec or .term is too long, send as a file instead
Signed-off-by: Justin Crawford <Justin@stacksmash.net>
This commit is contained in:
parent
af06deebc1
commit
55d41e65cc
|
@ -5,7 +5,7 @@ import sys
|
||||||
import html
|
import html
|
||||||
import inspect
|
import inspect
|
||||||
import asyncio
|
import asyncio
|
||||||
from io import StringIO
|
from io import StringIO, BytesIO
|
||||||
from pyrogram import Client, filters
|
from pyrogram import Client, filters
|
||||||
from .. import config, help_dict, log_errors, slave, apps, session, public_log_errors
|
from .. import config, help_dict, log_errors, slave, apps, session, public_log_errors
|
||||||
|
|
||||||
|
@ -57,15 +57,26 @@ async def pyexec(client, message):
|
||||||
wrapped_stdout.seek(0)
|
wrapped_stdout.seek(0)
|
||||||
output = ''
|
output = ''
|
||||||
wrapped_stderr_text = wrapped_stderr.read().strip()
|
wrapped_stderr_text = wrapped_stderr.read().strip()
|
||||||
|
wrapped_stdout_text = wrapped_stdout.read().strip()
|
||||||
if wrapped_stderr_text:
|
if wrapped_stderr_text:
|
||||||
output += f'<code>{html.escape(wrapped_stderr_text)}</code>\n'
|
output += f'<code>{html.escape(wrapped_stderr_text)}</code>\n'
|
||||||
wrapped_stdout_text = wrapped_stdout.read().strip()
|
|
||||||
if wrapped_stdout_text:
|
if wrapped_stdout_text:
|
||||||
output += f'<code>{html.escape(wrapped_stdout_text)}</code>\n'
|
output += f'<code>{html.escape(wrapped_stdout_text)}</code>\n'
|
||||||
for i in returned:
|
for i in returned:
|
||||||
output += f'<code>{html.escape(str(i).strip())}</code>\n'
|
output += f'<code>{html.escape(str(i).strip())}</code>\n'
|
||||||
if not output.strip():
|
if not output.strip():
|
||||||
output = 'Executed'
|
output = 'Executed'
|
||||||
await reply.edit_text(output)
|
|
||||||
|
# send as a file if it's longer than 4096 bytes
|
||||||
|
if len(output) > 4096:
|
||||||
|
out = wrapped_stderr_text + "\n" + wrapped_stdout_text + "\n"
|
||||||
|
for i in returned:
|
||||||
|
out += str(i).strip() + "\n"
|
||||||
|
f = BytesIO(out.strip().encode('utf-8'))
|
||||||
|
f.name = "output.txt"
|
||||||
|
await reply.delete()
|
||||||
|
await message.reply_document(f)
|
||||||
|
else:
|
||||||
|
await reply.edit_text(output)
|
||||||
|
|
||||||
help_dict['exec'] = ('Exec', '{prefix}exec <i><python code></i> - Executes python code')
|
help_dict['exec'] = ('Exec', '{prefix}exec <i><python code></i> - Executes python code')
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import re
|
import re
|
||||||
import html
|
import html
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from io import BytesIO
|
||||||
from pyrogram import Client, filters
|
from pyrogram import Client, filters
|
||||||
from .. import config, help_dict, log_errors, public_log_errors
|
from .. import config, help_dict, log_errors, public_log_errors
|
||||||
|
|
||||||
|
@ -21,7 +22,16 @@ async def shell(client, message):
|
||||||
text += f'<code>{html.escape(stderr)}</code>\n'
|
text += f'<code>{html.escape(stderr)}</code>\n'
|
||||||
if stdout:
|
if stdout:
|
||||||
text += f'<code>{html.escape(stdout)}</code>'
|
text += f'<code>{html.escape(stdout)}</code>'
|
||||||
await reply.edit_text(text)
|
|
||||||
|
# send as a file if it's longer than 4096 bytes
|
||||||
|
if len(text) > 4096:
|
||||||
|
out = stderr.strip() + "\n" + stdout.strip()
|
||||||
|
f = BytesIO(out.strip().encode('utf-8'))
|
||||||
|
f.name = "output.txt"
|
||||||
|
await reply.delete()
|
||||||
|
await message.reply_document(f)
|
||||||
|
else:
|
||||||
|
await reply.edit_text(text)
|
||||||
|
|
||||||
help_dict['shell'] = ('Shell',
|
help_dict['shell'] = ('Shell',
|
||||||
'''{prefix}sh <i><command></i> \\n <i>[stdin]</i> - Executes <i><command></i> in shell
|
'''{prefix}sh <i><command></i> \\n <i>[stdin]</i> - Executes <i><command></i> in shell
|
||||||
|
|
Loading…
Reference in New Issue