Discord.py wait_for()

时间:2020-05-21 17:09:10

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

我有一个on_message()事件,但是我想上交一个命令,问题是当我更改它时,wait_for()函数不起作用。 wait_for()中有与@client.command()等价的东西吗?

我的代码:

@client.event
async def on_message(message):
    channel = message.author
    def check(m):
        return m.channel == message.channel and m.author != client.user

    if message.content.startswith("!order"):
        await channel.send("in game name")
        in_game_name = await client.wait_for('message', check=check)

        await channel.send("in game ID")
        in_game_ID = await client.wait_for('message', check=check)

    else:
        await client.process_commands(message)```

1 个答案:

答案 0 :(得分:3)

首先,该视频显示了您的漫游器的登录令牌。这是一个只有您自己知道的秘密密钥,我建议删除该视频并立即更改密钥here {em> !有权访问该密钥的人可以控制您的机器人。

在您回复Patrick Haugh的评论的视频中,您使用了discord.ext.commands框架,因此我将在这里使用它。 ctx命令中的order参数是Context,与其像在视频中那样在频道上调用send(),还不如在视频中调用这:ctx.send('foo')

此外,在第18和21行上,您使用

await client.wait_for('ctx', check=check)

here所述,可以在event reference中给出可用作Client.wait_for()第一个参数的事件,只需删除on_前缀即可。对于您的情况,我认为您想要on_message,所以看起来像这样:

@client.command()
async def order(self, ctx: commands.Context):
    def check(message: discord.Message):
        return message.channel == ctx.channel and message.author != ctx.me

    await ctx.send('foo')
    foo = await client.wait_for('message', check=check)

    await ctx.send('bar')
    bar = await client.wait_for('message', check=check)

在这种情况下,foobardiscord.Message的实例,您可以分别使用foo.contentbar.content获取这些消息的内容。