现在,我有一个机器人,我希望能够通过Python命令来控制它。下面是我的>execute命令的代码,我想用它来执行Python代码片段。
async def execute(ctx, *, arg):
if ctx.author.id == 645264167623983124:
try:
exec(arg.replace("```", ""))
await ctx.send(embed=msg(title="Execution complete!", desc="The code ran successfully."))
except Exception as e:
await ctx.send(embed=msg(title="Error", desc=str(e)))
else:
await ctx.send(embed=msg(title="Nuh Uh Uhh", desc="You are not allowed to use this command!"))
但是,我也想使用此命令发送测试消息,如下所示:
>execute await ctx.send("Hello world!")
当我运行这段代码时,它会说:
Error
'await' outside function (<string>, line 1)
但当我在没有等待的情况下运行它时,它会说它运行得很好,但运行该机器人的控制台显示如下:
<string>:1: RuntimeWarning: coroutine 'Messageable.send' was never awaited
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
发布于 2020-10-03 03:19:53
对于异步函数,我使用eval实现了这一点:
arg = arg.replace("```", "")
if arg.startswith("await"):
await eval(arg.replace("await ", ""))
else:
exec(arg)
https://stackoverflow.com/questions/64179222
复制