Discord.py wait_for 消息...如何取消息内容和消息写的人?

时间:2021-03-31 10:41:02

标签: python async-await discord discord.py bots

我正在寻找编写一个 shutdown-room 命令,使特定房间中的所有用户静音。 所以,我必须得到写消息的用户和消息内容。

现在我有这个,但在这种情况下,每条消息都受到监控:

def shut_check(msg):
   return msg.content

@client.command()
@commands.has_permissions(manage_messages=True)
async def shut_room(ctx):

   await ctx.send("Please send me the id of the room that you want to shut down.")

   content = await client.wait_for("message", check=check)

现在,我已经发送了消息的内容,但是我如何验证作者消息的是否是 ctx.author ?强>

我有另一个请求,你能向我解释一下 pass_context=True 的目的是什么:

@client.command(pass_context=True)

1 个答案:

答案 0 :(得分:1)

逻辑很简单,在命令中定义check函数。此外,您当前的检查根本没有任何意义,它始终会返回类似 true 的值

@client.command()
async def shut_room(ctx):
    def check(msg):
        return msg.author == ctx.author

    await ctx.send("Please send me the id of the room that you want to shut down.")

    message = await client.wait_for("message", check=check)
    content = message.content

此外,在等待消息时,它不会返回内容本身,而是返回 discord.Message 实例,我认为您对检查功能感到困惑。

解释 check 参数:机器人将等待所需的事件,直到 check 函数返回一个真值。

编辑:

在命令外定义检查函数

def check(ctx):
    def inner(msg): # This is the actual check function, the one that holds the logic
        return msg.author == ctx.author
    return inner

# inside the command
message = await client.wait_for("message", check=check(ctx)) # Note that I'm calling it

我用另一个函数包装了 check 函数,这样我就可以传递 Context 参数。