Modify eval to use traceback

This commit is contained in:
Zeva Rose 2021-06-27 19:40:17 -06:00
parent b164694c43
commit 2fbc720ccc

View file

@ -5,11 +5,12 @@ import re
import ulid import ulid
import base64 import base64
import subprocess import subprocess
from inspect import getsource
import discord import discord
import time import time
import sys import sys
import os import os
import traceback
from inspect import getsource
from discord.ext import commands from discord.ext import commands
from jarvis.utils import build_embed, convert_bytesize from jarvis.utils import build_embed, convert_bytesize
from jarvis.utils.field import Field from jarvis.utils.field import Field
@ -271,9 +272,6 @@ class DevCog(commands.Cog):
@commands.command(pass_context=True, aliases=["eval", "exec", "evaluate"]) @commands.command(pass_context=True, aliases=["eval", "exec", "evaluate"])
@commands.is_owner() @commands.is_owner()
async def _eval(self, ctx, *, code: str): async def _eval(self, ctx, *, code: str):
silent = "-s" in code
code = self.prepare(code.replace("-s", ""))
args = { args = {
"discord": discord, "discord": discord,
"sauce": getsource, "sauce": getsource,
@ -288,11 +286,7 @@ class DevCog(commands.Cog):
exec(f"async def func():{code}", args) exec(f"async def func():{code}", args)
a = time() a = time()
response = await eval("func()", args) response = await eval("func()", args)
if ( if response is None or isinstance(response, discord.Message):
silent
or (response is None)
or isinstance(response, discord.Message)
):
del args, code del args, code
return return
@ -300,11 +294,9 @@ class DevCog(commands.Cog):
f"```py\n{self.resolve_variable(response)}````{type(response).__name__} | {(time() - a) / 1000} ms`" f"```py\n{self.resolve_variable(response)}````{type(response).__name__} | {(time() - a) / 1000} ms`"
) )
except Exception as e: except Exception as e:
await ctx.send( await ctx.send(f"Error occurred:```\n{traceback.format_exc()}```")
f"Error occurred:```\n{type(e).__name__}: {str(e)}```"
)
del args, code, silent del args, code
def setup(bot): def setup(bot):