猜谜游戏,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
这确保只有来自命令作者的消息被识别和接受。我们将其包含在代码中。
另外,你不能使用</> 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 机器人的主要内容,如果未能解决你的问题,请参考以下文章