@pyshvel

Как выполнить аргумент из команды как код?

Например, ввожу !command await ctx.send('Hello!')
и бот выполнит это и отправит Hello!
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
@Hawchik_dev
предлагаю вам сделать эваль.

код:
import ast
def insert_returns(body):
	if isinstance(body[-1], ast.Expr):
		body[-1] = ast.Return(body[-1].value)
		ast.fix_missing_locations(body[-1])
		if isinstance(body[-1], ast.If):
			insert_returns(body[-1].body)
			insert_returns(body[-1].orelse)
		if isinstance(body[-1], ast.With):
			insert_returns(body[-1].body)


@bot.command(aliases = ["eval", "exec"])
async def e(ctx, *, cmd):
		if ctx.author.id == 643017747273351179:
			try:
				fn_name = "_eval_expr"
				cmd = cmd.strip("` ")
				cmd = "\n".join(f" {i}" for i in cmd.splitlines())
				body = f"async def {fn_name}():\n{cmd}"
				parsed = ast.parse(body)
				body = parsed.body[0].body
				insert_returns(body)
				env = { "bot": bot, 'discord': discord, 'commands': commands, 'ctx': ctx, '__import__': __import__ }
				exec(compile(parsed, filename="<ast>", mode="exec"), env)
				result = (await eval(f"{fn_name}()", env))
			except Exception as error:
				emb = discord.Embed(title="\❌ Произошла ошибка", description=str(error), color=0xff0000)
				await ctx.send(embed=emb)
		else:
			await ctx.send("Отказано в доступе")
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
lxstvayne
@lxstvayne
Люблю Python
exec(YOUR_CODE)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы