从Discord.py执行Python命令

从Discord.py执行Python命令,python,python-3.x,discord,discord.py,Python,Python 3.x,Discord,Discord.py,所以我想做的是在discord.py中创建一个求值命令。所以当用户说 .evaluate print("hi") 我希望它将代码发送到python并运行它。我看到了subprocess.Popen或os.system或system通常的方法,但它只运行shell命令。我想知道我是如何做到这一点的?您可以使用python函数。当然,允许人们在您的脚本中执行命令是一种安全风险,请格外小心。由于不确定您想要完成什么,应避免此类活动 尝试: @client.command() 异步定义评估(ctx,*

所以我想做的是在discord.py中创建一个求值命令。所以当用户说

.evaluate print("hi")
我希望它将代码发送到python并运行它。我看到了
subprocess.Popen
os.system
system
通常的方法,但它只运行
shell
命令。我想知道我是如何做到这一点的?

您可以使用python函数。当然,允许人们在您的脚本中执行命令是一种安全风险,请格外小心。由于不确定您想要完成什么,应避免此类活动

尝试:

@client.command()
异步定义评估(ctx,*,cmd=None):
尝试:
评估(cmd)
等待ctx.send(你的机器人朋友执行了你的命令-->{cmd})
除:
print(f'{cmd}是无效命令')
等待ctx.send(f'您的机器人朋友无法执行无效命令-->{cmd}')
控制台输出

None is an invalid command
hi
nocommand(junk) is an invalid command
不协调对话框(使用“?”前缀而不是“.”:

您可以使用python函数。当然,允许人们在脚本中执行命令存在安全风险,请务必小心。不确定您要完成什么,应避免此类活动

尝试:

@client.command()
异步定义评估(ctx,*,cmd=None):
尝试:
评估(cmd)
等待ctx.send(你的机器人朋友执行了你的命令-->{cmd})
除:
print(f'{cmd}是无效命令')
等待ctx.send(f'您的机器人朋友无法执行无效命令-->{cmd}')
控制台输出

None is an invalid command
hi
nocommand(junk) is an invalid command
不协调对话框(使用“?”前缀而不是“.”:

请记住,上面的示例非常简单,可以进行扩展。例如,
exec
有一个
globals
参数,以便您可以在eval语句中使用全局(预定义)变量。您甚至可以格式化代码,以便可以包括:```py`

{您的代码在这里}``

在您的eval命令周围。无论您做什么,都要确保除了您之外没有人可以访问您的eval命令。。说真的,如果他们可以访问您的计算机,他们还不如坐在您的计算机旁

请记住,上面的示例非常简单,可以进行扩展。例如,
exec
有一个
globals
参数,以便您可以在eval语句中使用全局(预定义)变量。您甚至可以格式化代码,以便可以包括:```py`

{您的代码在这里}``


在您的eval命令周围。无论您做什么,都要确保除了您之外没有人可以访问您的eval命令。说真的,如果他们可以访问您的计算机,他们可能会坐在您的计算机旁。

这是命令的所有者

@client.command()
@commands.is_owner()
async def evaluate(ctx, *, cmd=None):
    try:
        eval(cmd)
        await ctx.send(f'Your bot friend executed your command --> {cmd}')
    except:
        print(f'{cmd} is an invalid command')
        await ctx.send(f'Your bot friend could not execute an invalid command --> {cmd}')

这里的命令仅为所有者

@client.command()
@commands.is_owner()
async def evaluate(ctx, *, cmd=None):
    try:
        eval(cmd)
        await ctx.send(f'Your bot friend executed your command --> {cmd}')
    except:
        print(f'{cmd} is an invalid command')
        await ctx.send(f'Your bot friend could not execute an invalid command --> {cmd}')

我如何允许像使用
py#code
这样的块代码如果有人可以访问您的eval命令,他们将能够使用它做可怕的事情。他们可以删除频道、禁止成员,并从您的计算机(或运行bot的vps)获取个人信息。底线是不给任何人。我如何允许使用诸如
py#code
之类的块代码如果有人可以访问您的eval命令,他们将能够使用它做可怕的事情。他们可以删除频道、禁止成员,并从您的计算机(或运行bot的vps)获取个人信息.底线是不要把它给任何人。为什么这很危险?比如说这是一种安全风险?为什么这很危险?比如说这是一种安全风险?