如何使用discord.py从某些选项列表中可靠地获取用户输入作为变量?

时间:2019-05-10 17:48:07

标签: python python-3.x discord discord.py discord.py-rewrite

我正在尝试在Discord机器人中进行猜谜游戏。我已经完成游戏,但是不确定如何通过Discord检索用户输入。 我知道该wait_for方法以获得特定的响应。问题在于它仅检查特定的字符串。我正在寻找一种方法来检查可能的字符串列表并存储它检查为真的任何字符串。 (例如:如果将其中一个字符串用作字符串,则将输入内容存储到变量中)

possible_numbers = [i for i in range(1,51)]
def check(m):
    if m.content in possible_numbers:
        return m.content == m.content and m.channel == channel
guess = await client.wait_for('message', check=check, timeout=120.0)

我期望沿着这些思路,可以成功地检查m.content是否在possible_numbers中,如果是,则只需检索m.content并将其存储为“ guess”。 目前,它只输出任何内容,如果我将其更改为:

def check(m):
    return m.content == '1' and m.channel == channel
guess = await client.wait_for('message', check=check, timeout=120.0)

它只会接受要检查的直接字符串。

2 个答案:

答案 0 :(得分:1)

possible_numbers = [str(i) for i in range(1,51)]

您无法将int与带有string的{​​{1}}进行比较。因此,使列表仅包含字符串。

答案 1 :(得分:0)

您也许可以使用一种方法来解释他们发布的全部消息以触发命令?

@bot.event
async def on_message(ctx): # compute every message, not just commands
    message_being_interpreted = ctx.content.lower()
    print(message_being_interpreted ) # will print all messages
    # do things to parse it like this
    if "!guess" in message_being_interpreted:
        pass # or do stuff

如果用户应该使用自己的命令提供参数,例如!guess 17463,这将非常有用,但是您也可以做到这一点,这样用户只需要输入类似17463的猜测,然后他们输入了触发事件的正确猜测。