如何在 discord.py 中创建 eval 命令?

时间:2021-02-28 20:37:52

标签: python python-3.x discord discord.py

我有一个仅限我和几个朋友使用的不和谐机器人。我想创建一个 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 命令将在一个齿轮中。谢谢!

1 个答案:

答案 0 :(得分:0)

eval 函数应该只执行一个表达式,动态执行使用 exec

>>> 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

aioconsole pypi page