我有一个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)```
答案 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)
在这种情况下,foo
和bar
是discord.Message
的实例,您可以分别使用foo.content
和bar.content
获取这些消息的内容。