我有一个仅限我和几个朋友使用的不和谐机器人。我想创建一个 eval 命令,这样我就可以向他们炫耀,因为他们对代码一无所知,但也可供我一般使用(我有一个权限系统设置,所以它的使用仅限于我,别担心)。
我已经做了很多谷歌搜索,我得到的最接近的是这个:
@commands.command()
@commands.guild_only()
async def eval(self, ctx, *, args):
result = eval(args)
await ctx.send(result)
但这不适用于多行代码。例如,我试过这个代码:
&eval a=2
b=2
c=a*b
print(str(a), str(b), str(c))
它返回此错误:Invalid syntax
并指向 a=2
作为错误。对于其他解决方案,例如来自创建者 github 的解决方案,它表示 eval() takes 1 positional argument but 2 were given
。我正在使用命令扩展名,eval
命令将在一个齿轮中。谢谢!
答案 0 :(得分:0)
>>> code = """
... a = 2
... b = 2
... c = a * b
... print(a, b, c)
... """
>>> exec(code)
2 2 4
您也可以使用 aioconsole.aexec
作为非阻塞方式
>>> from aioconsole import aexec
>>>
>>> code = """
... a = 2
... b = 2
... c = a * b
... print(a, b, c)
... """
>>> await aexec(code) # It should be awaited inside another coroutine, not doing so for explanation purposes
2 2 4