在Discord bot命令中使用python exec()的问题

时间:2019-02-01 21:30:10

标签: python-3.x discord.py

我有基本相同的代码,其中一个是闲置的; 该命令是一个简单的eval命令,因此我可以从我的机器人运行python代码。当我对此进行测试时,我学会了如何在空闲状态下进行操作,因此我将其复制到了bot中。出于某种原因,IDLE中的代码仍无法在漫游器中正常工作。

我的博特代码:

try:
  cmd = "\n".join(f"    {i}" for i in command.splitlines())
  func = "def eval_cmd():\n"+cmd
  print(func)
  exec(func)
  embed = discord.Embed(title=" ", description="Code Evaluation: ", color=discord.Color.green())
  embed.add_field(name=":inbox_tray: Input", value="```{}```".format(command), inline=False)
  embed.add_field(name=":outbox_tray: Output", value="```{}```".format(eval_cmd()), inline=False)
  embed.set_author(name=message.author.name, icon_url=message.author.avatar_url)
  await client.send_message(message.channel, embed=embed)

except Exception as ex:
  template = "An exception of type {0} occurred. Arguments:\n{1!r}"
  error_message = template.format(type(ex).__name__, ex.args)
  await client.send_message(message.channel, embed=discord.Embed(color=discord.Color.red(), description="You encountered an error: \n```{}```".format(error_message)))

我的IDLE码:

command = '''
pi = 3.14
rad = 5
area = pi * rad**2
return area'''

cmd = "\n".join(f"  {i}" for i in command.splitlines())

func = "def eval_cmd(): "+cmd
print(func)

exec(func)
print(eval_cmd())

IDLE中的代码可以正常工作,并且eval_cmd()的值为78.5-应该是这样。在exec(func)运行时,机器人内部只会返回None。

这是与不和谐的问题吗?还是我失去了一些东西。

0 个答案:

没有答案