提问者:小点点

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


我想在一个不和谐的机器人里做一个猜谜游戏。我已经完成了游戏,但不确定如何检索用户输入通过不和。我知道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”。当前,它只输出puts nothing,如果我将其更改为:

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

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


共2个答案

匿名用户

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

不能将int==字符串进行比较。因此,使列表只包含字符串。

匿名用户

您也许可以有一个方法来解释他们发布的整个消息以触发命令?

@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

如果用户应该用命令(如!gues17463)提供参数,那么这将非常有效,但是您也可以这样做,用户只需键入一个类似17463的猜测,然后当他们输入正确的猜测时,它就会触发一些事件。