如何在discord.py命令中允许多个可能的响应?

时间:2019-04-06 20:23:57

标签: python-3.6 discord.py

我正在尝试建立Discord僵尸程序,但对于discord.py(实际上是Python 3)而言还比较陌生。我想添加命令“ greet”,它将提示用户说“ hello”。它只响应“ hello”,但是,当我希望它同时响应“ hello”和“ Hello”时。

我想解决的唯一事情就是将它们放在status='inactive'语句中,从理论上讲,这应该使Python 3和bot在两个响应之间进行选择(如下所示)。

or

我拥有的原始代码很简单,并且只允许@client.event async def on_message(message): if message.content.startswith('~greet'): await client.send_message(message.channel, 'Say hello') msg = await client.wait_for_message(author=message.author, content=('hello' or 'Hello')) await client.send_message(message.channel, 'Hello.') 的一个响应。

hello

出于某种原因,我无法缠住脑袋,它仍然无法识别@client.event async def on_message(message): if message.content.startswith('~greet'): await client.send_message(message.channel, 'Say hello') msg = await client.wait_for_message(author=message.author, content=('hello' or 'Hello')) await client.send_message(message.channel, 'Hello.') ,并且只允许我说出'Hello'作为回应。

2 个答案:

答案 0 :(得分:1)

or并不像您认为的那样表现。 'hello' or 'Hello'在传递给wait_for_message之前先经过评估,等于'hello'

相反,您可以向check提供wait_for_message函数:

def is_hello(message):
    return message.content.lower() == 'hello'

msg = await client.wait_for_message(author=message.author, check=is_hello)

答案 1 :(得分:0)

您应该使用command表示法,而不要使用on_message检查每条消息,因为这样会使您的代码更具可读性。如果您有10条命令会怎样?您会在on_message中检查10个字符串吗?

如果是重写分支,则commands.Bot接受不区分大小写的参数:

bot = commands.Bot(command_prefix='!', case_insensitive=True)

或者,如果您想对同一命令使用多个单词,则可以使用别名,例如:

@bot.command(aliases=['info', 'stats', 'status'])
    async def about(self):
        # your code here