有没有一种方法可以pm作者,并使用wait_for命令来捕获他们键入的值?

时间:2020-06-05 00:09:48

标签: discord discord.py-rewrite

我正在使用python编写一个discord机器人来记录期权交易。我要使用机器人进行的操作是,当用户键入命令!opentrade时,机器人会向用户发送私人信息,并提出一系列问题。然后,机器人将捕获一系列变量中的答案,并使用该变量来处理答案。这是否可能,或者是否必须在调用命令的通道中。此外,默认情况下是否为多线程,这意味着2或3个人可以同时调用该命令,这会弄乱答案

到目前为止,我有以下内容,但无法正常工作:

async def opentrade(ctx):

def check(author):
    def inner_check(message): 
        if message.author != author:
            return False
        try: 
            int(message.content) 
            return True 
        except ValueError: 
            return False
    return inner_check

try:
    await ctx.author.send('Enter the underlying: ')
    underlying = await client.wait_for('message', check=check(ctx.author), timeout=30)
    print (underlying)
except Exception as err:
    await ctx.channel.send("Something went wrong: {}".format(err))

谢谢

1 个答案:

答案 0 :(得分:0)

我要用我的机器人进行的操作是当用户键入执行命令!opentrade时,该机器人会向用户发送私人信息,并提出一系列问题。然后,机器人将捕获一系列变量中的答案,并使用该变量来处理答案。这是否可能,或者是否必须在调用命令的通道中。

可能。您需要将整个逻辑放入执行命令的协程中。

此外,默认情况下是否为多线程,这意味着2或3个人可以同时调用该命令,这会弄乱答案

如果正确执行检查,将不会找到答案。在您的代码中,您已经实现了检查作者的逻辑,因此其他任何人都无法更改它def check(author)
当不同用户多次执行命令时,由于线程是独立的,因此也不会找到答案。

您应该扩展此检查,以便它检查DM通道中的消息。现在,支票的书写方式使调用者可以DM僵尸程序或在行会文本通道中进行回复。


我不确定ctx变量中保存了什么,但是我确定它具有message属性。

尝试await ctx.message.author.send()。如果您遇到错误,请提供错误日志。