【问题标题】:Discord.py wait_for()Discord.py wait_for()
【发布时间】:2020-05-21 17:09:10
【问题描述】:

我有一个on_message()事件,但是我想转成一个命令,问题是当我改变它时,wait_for()函数不起作用。 @client.command() 中是否有与 wait_for() 等效的内容?

我的代码:

@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)```

【问题讨论】:

  • “不起作用”是什么意思?会发生什么? wait_for 和命令没有任何关系,它应该在这里工作。

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


【解决方案1】:

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

在您为回复 Patrick Haugh 的评论而发送的视频中,您使用了 discord.ext.commands 框架,所以我将在这里使用它。 order 命令中的 ctx 参数是 Context,而不是像在视频中那样在频道上调用 send(),而应该在这样的上下文中调用它:ctx.send('foo')

另外,在第 18 和 21 行,您使用

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

正如here 所解释的,可以用作Client.wait_for() 的第一个参数的事件在event reference 中给出,只需删除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 获取这些消息的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2019-03-05
    • 2021-07-03
    • 2020-08-25
    • 2020-11-27
    相关资源
    最近更新 更多