Skip to content

Commit f477cf3

Browse files
author
GodSaveTheDoge
committed
Added stdout support to /exec and /eval
1 parent 5ec9651 commit f477cf3

2 files changed

Lines changed: 31 additions & 11 deletions

File tree

plugins/eval/eval.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import html
2+
import io
23
import sys
34
import traceback
45

@@ -18,26 +19,38 @@ def eval_command(c, msg):
1819
)
1920
return 0
2021
code = msg.text.html[len("/eval "):]
22+
old_stdout = sys.stdout
23+
redirected_stdout = sys.stdout = io.StringIO()
24+
2125
try:
22-
result = eval(code).rstrip("\n ")
26+
eval_result = eval(code)
2327
except Exception as e:
24-
result = "".join(traceback.format_exception(e, e, sys.exc_info()[2]))
28+
eval_result = ""
29+
tb = "".join(traceback.format_exception(e, e, sys.exc_info()[2])).rstrip("\n ")
30+
else:
31+
tb = ""
32+
33+
sys.stdout = old_stdout
34+
stdout_value = redirected_stdout.getvalue().rstrip("\n ")
35+
result = stdout_value + ("\n" + tb if tb else "")
36+
2537
try:
2638
if len(code + str(result)) > 2000:
2739
msg.edit_text("Uploading to nekobin...")
2840
msg.edit_text(
29-
"<b>Code:</b>\n{pasted}\n\n<b>Result:</b>\n{pasted}".format(
41+
"<b>Code:</b>\n{pasted}\n\n<b>Eval Result:</b>\n{pasted}\n\n<b>Result:</b>\n{pasted}".format(
3042
pasted='Too long! <a href="https://nekobin.com/{url}">Pasted</a>'.format(
3143
url=Nekobin.paste(
32-
"Code:\n{}\n\nResult:\n{}".format(str(code), str(result))
44+
"Code:\n{}\n\nEval Result:\n{}\n\nResult:\n{}".format(str(code), str(eval_result),
45+
str(result))
3346
)
3447
)
3548
)
3649
)
3750
else:
3851
msg.edit_text(
39-
"<b>Code:</b>\n<code>{}</code>\n\n<b>Result:</b>\n<code>{}</code>".format(
40-
html.escape(str(code)[:1000]), html.escape(str(result)[:2000])
52+
"<b>Code:</b>\n<code>{}</code>\n\n<b>Eval Result:</b>\n{}\n\n<b>Result:</b>\n<code>{}</code>".format(
53+
html.escape(str(code)), html.escape(eval_result), html.escape(str(result))
4154
),
4255
parse_mode="html",
4356
)

plugins/exec/exec.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,21 @@ def exec_command(c, msg):
1616
)
1717
return 0
1818
code = msg.text.html[len("/exec "):]
19+
20+
old_stdout = sys.stdout
21+
redirected_stdout = sys.stdout = io.StringIO()
22+
1923
try:
20-
old_stdout = sys.stdout
21-
redirected_output = sys.stdout = io.StringIO()
2224
exec(code)
23-
sys.stdout = old_stdout
24-
result = redirected_output.getvalue().rstrip("\n ")
2525
except Exception as e:
26-
result = traceback.format_tb(traceback.extract_tb(sys.last_traceback))
26+
tb = "".join(traceback.format_exception(e, e, sys.exc_info()[2])).rstrip("\n ")
27+
else:
28+
tb = ""
29+
30+
sys.stdout = old_stdout
31+
stdout_value = redirected_stdout.getvalue().rstrip("\n ")
32+
result = stdout_value + ("\n" + tb if tb else "")
33+
2734
try:
2835
msg.edit_text(
2936
"<b>Code:</b>\n<code>{}</code>\n\n<b>Result:</b>\n<code>{}</code>".format(

0 commit comments

Comments
 (0)