我正在使用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))
谢谢
答案 0 :(得分:0)
我要用我的机器人进行的操作是当用户键入执行命令!opentrade时,该机器人会向用户发送私人信息,并提出一系列问题。然后,机器人将捕获一系列变量中的答案,并使用该变量来处理答案。这是否可能,或者是否必须在调用命令的通道中。
可能。您需要将整个逻辑放入执行命令的协程中。
此外,默认情况下是否为多线程,这意味着2或3个人可以同时调用该命令,这会弄乱答案
如果正确执行检查,将不会找到答案。在您的代码中,您已经实现了检查作者的逻辑,因此其他任何人都无法更改它def check(author)
。
当不同用户多次执行命令时,由于线程是独立的,因此也不会找到答案。
您应该扩展此检查,以便它检查DM通道中的消息。现在,支票的书写方式使调用者可以DM僵尸程序或在行会文本通道中进行回复。
我不确定ctx
变量中保存了什么,但是我确定它具有message
属性。
尝试await ctx.message.author.send()
。如果您遇到错误,请提供错误日志。