如何在discord.py中执行eval命令?

2024-04-29 15:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个不和谐机器人,只限于我和几个朋友。我想做一个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。我正在使用commands扩展名,eval命令将位于一个cog中。谢谢


Tags: 代码命令权限系统错误eval情况args
1条回答
网友
1楼 · 发布于 2024-04-29 15:35:43

^{}函数应该只执行一个表达式,对于动态执行,请使用^{}

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

^{} pypi page

相关问题 更多 >