我正在寻找编写一个 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)
答案 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
参数。