猜谜游戏,discord.py 机器人

Posted

技术标签:

【中文标题】猜谜游戏,discord.py 机器人【英文标题】:Guessing game, discord.py bot 【发布时间】:2021-07-25 09:59:30 【问题描述】:

我正在尝试制作一个不和谐的机器人猜谜游戏(使用 python),但它一直失败。我查看了许多类似的帖子,但没有发现任何帮助。

@bot.command(name='play')
async def play(ctx):
  number = random.randint(1,100)
  await ctx.send('I have a number in mind between 1 and 100, guess')
  for i in range(0,5):
    guess = await client.wait_for('message') **(see below the code)
        if guess.content == number:
          await ctx.send('You got it!')
        elif guess.content < number:
          await ctx.send('Higher!')
        elif guess.content > number:
          await ctx.send('Lower!')
      else:
        await ctx.send("You lost, type $play to play again.")

** 通常它会说: , check=check, 但这似乎不起作用,它说,检查未定义或类似的东西

代码似乎卡在:for i in range(0,5):,或:guess = await client.wait_for('message')

有人可以帮忙吗?或者发布一个有效的猜谜游戏+解释?

【问题讨论】:

check=check 假设您之前已经定义了check。例如,您可以检查消息是否来自作者。 【参考方案1】:

如 cmets 中所述,您需要包含自己的 check如下所示:

    def check(m):
        return m.author == ctx.author and m.channel == ctx.message.channel

这确保只有来自命令作者的消息被识别和接受。我们将其包含在代码中。

另外,你不能使用&lt;/&gt; number,你会得到如下错误:

TypeError: '<' not supported between instances of 'str' and 'int'.

要解决此问题,只需将 number 更改为 str:

</> str(number)

可能的代码是:

@bot.command(name='play')
async def play(ctx):
    def check(m):
        return m.author == ctx.author and m.channel == ctx.message.channel

    number = random.randint(1, 100)
    await ctx.send('I have a number in mind between 1 and 100, guess')

    for i in range(0, 5):
        guess = await bot.wait_for('message', check=check)

        if guess.content == number:
            await ctx.send('You got it!')

        elif guess.content < str(number):
            await ctx.send('Higher!')

        elif guess.content > str(number):
            await ctx.send('Lower!')

        else:
            return # Or something else
        
    else:
        await ctx.send("You lost, type $play to play again.")

【讨论】:

感谢您的回复@Dominik,但我现在已经尝试了几个代码,我什至取出了'for'部分,但代码似乎卡在了“guess = await client.wait_for( 'message', check=check),它没有给出错误它只是不做任何事情,当我去执行另一个命令时它确实有效。它很奇怪,就像机器人不会停止等待消息 顺便说一句,我尝试了你的代码,没有任何问题但不起作用,我得到了“错误”,这不是错误,我在上面的评论中谈到了 在 5 次猜测后,机器人不再接受答案,您定义了这一点。我测试了代码,它对我来说很好。我有个错字,叫bot.wait_for 谢谢现在尝试一下,您在每种情况下都帮助我理解了 check=check 的事情 你是个圣人,它可以工作,有点笨拙必须修复一些东西,但机器人正在回复【参考方案2】:

我想你想知道,两天后(每天几个小时)我让它(几乎)完美地工作,有时它会给出错误的提示,但我无法解决这个问题。下面是代码(我最终使用了@bot.event):

if msg.startswith('$play'):
    number = random.randint(1,100)
    await message.channel.send('I have a number in mind between 1 and 100, you have 5 guesses, guess.')
    for guesses in range(0,5):
      guess = await bot.wait_for('message')
      print(number)
      if guess.content < str(number):
        if guesses == 4:
          await message.channel.send("Too many guesses, try again.")
          await message.channel.send("The number I was thinking of was " + str(number) + ".")
          break
        else:
          await message.channel.send("Higher!")
      elif guess.content > str(number):
        if guesses == 4:
          await message.channel.send("Too many guesses, try again.")
          await message.channel.send("The number I was thinking of was " + str(number) + ".")
          break
        else:
          await message.channel.send("Lower!")
      else:
        await message.channel.send("You got it! You guessed " + str(guesses+1) + " times.")
        break

【讨论】:

以上是关于猜谜游戏,discord.py 机器人的主要内容,如果未能解决你的问题,请参考以下文章

命令中的 Discord.py 命令?

Discord 机器人帮助命令 [discord.py]

Discord 音乐机器人 - 队列 (discord.py)

两个机器人之间的通信? (discord.py)

Discord.py - 机器人没有响应

我无法使用 discord.py 向我的 discord 机器人添加命令