多场景用户输入 Discord.py

Posted

技术标签:

【中文标题】多场景用户输入 Discord.py【英文标题】:Multiple Scenario User Input Discord.py 【发布时间】:2021-05-14 01:01:31 【问题描述】:

根据给定的提示(消息 1),用户应该能够向左、向右或保持不动做出响应,并且不和谐机器人将提供自定义消息(消息 2-4 之一)。我试图创建多个检查来检测不同的用户响应,但无济于事。我在网上找了其他解决方案,其中一些提到了使用asyncio,但我对它不是太熟悉,即使使用它也无法解决问题。任何帮助表示赞赏,我对python相当陌生。谢谢。

代码如下:

if message.content.startswith('gametest'):
        channel = message.channel
        await channel.send('Would you like to play?')

        def check(m):
            return m.content == 'yes' and m.channel == channel

        msg = await client.wait_for('message', check=check)
        await channel.send('Message1')

        def check2(m):
            return m.content == 'left' and m.channel == channel
        def check3(m):
            return m.content == 'right' and m.channel == channel
        def check4(m):
            return m.content == 'stay still' and m.channel == channel

        msg2 = await client.wait_for('message', timeout=30.0, check=check2)
        await channel.send('Message2')

        msg3 = await client.wait_for('message', timeout=30.0, check=check3)
        await channel.send('Message3')

        msg4 = await client.wait_for('message', timeout=30.0, check=check4)
        await channel.send('Message4')

【问题讨论】:

【参考方案1】:

可以比较消息内容是否在列表中

>>> content = 'right'
>>> valid_responses = ['right', 'left', 'stay still']
>>> content in valid_responses
True

你可以在check函数中使用同样的原理

def check(m):
    return m.content in ['right', 'left', 'stay still'] and m.channel == channel

如果您希望它不区分大小写,可以使用str.lower() 方法

def check(m):
    return m.content.lower() in ['right', 'left', 'stay still'] and m.channel == channel

【讨论】:

以上是关于多场景用户输入 Discord.py的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 discord.py 获取不和谐用户的用户 ID

从用户名 Discord.py 获取用户 ID

在 Discord.py 中添加/删除角色使用控制台输入重写

如何从不和谐中获取用户输入并将其存储为变量以在方程式中使用?不和谐.py

如何更改昵称(discord.py)

Discord.py bot - 如何让机器人在 DM 中向我发送用户的消息?