import contextlib
import io
@bot.command()
async def eval(ctx, *, code):
str_obj = io.StringIO() #Retrieves a stream of data
try:
with contextlib.redirect_stdout(str_obj):
exec(code)
except Exception as e:
return await ctx.send(f"```{e.__class__.__name__}: {e}```")
await ctx.send(f'```{str_obj.getvalue()}```')
Имейте в виду, что приведенный выше пример очень прост и может быть расширен. Например, exec
имеет аргумент globals
, так что вы можете использовать глобальные (предопределенные) переменные в ваших операторах eval. Вы даже можете отформатировать свой код так, чтобы вы могли включать: `` `py
{ваш код здесь}` `
вокруг вашей команды eval. Что бы вы ни делали, убедитесь, что никто не имеет доступа к вашей команде eval, кроме вас . Серьезно, они могут сидеть за вашим компьютером, если у них есть к нему доступ.