Python 3.x Python while循环只检查第一个if语句(discord.py)
我正在对我的discord bot执行一个命令,它根据用户对该命令的响应发回响应。我有一个while循环,在这个循环中,我遍历所有可能的答案,如果没有一个是正确的,那么转到else语句。但是,每次循环运行时,它都会根据第一条语句返回答案(如果答案为high),而实际上似乎并不关心其他elif语句。这是否与message.content部分有关,因为它们似乎根本不起作用?以下是循环: 编辑:添加整个事件Python 3.x Python while循环只检查第一个if语句(discord.py),python-3.x,discord.py,Python 3.x,Discord.py,我正在对我的discord bot执行一个命令,它根据用户对该命令的响应发回响应。我有一个while循环,在这个循环中,我遍历所有可能的答案,如果没有一个是正确的,那么转到else语句。但是,每次循环运行时,它都会根据第一条语句返回答案(如果答案为high),而实际上似乎并不关心其他elif语句。这是否与message.content部分有关,因为它们似乎根本不起作用?以下是循环: 编辑:添加整个事件 @commands.Cog.listener() async def on_messa
@commands.Cog.listener()
async def on_message(self, message):
if '.highlow' in message.content:
randomnumber = random.randint(0,100)
hintnumber = random.randint(0,100)
channel = message.channel
await channel.send('Satunnainen luku on valittu väliltä ``0-100``.\n'
f'Vihjeesi on ``{hintnumber}``.\n'
'Vastaa kirjoittamalla ``high``, ``low`` tai ``vihje``.')
def check(message):
return message.content == 'high' or 'low' or 'vihje' and message.channel == channel
msg = await self.client.wait_for('message', check=check)
while True:
if message.author != self.client.user:
if 'high' in message.content:
if randomnumber > hintnumber:
await channel.send(f'Satunnainen luku oli ``{randomnumber}``, joten voitit pelin!'.format(msg))
break
elif randomnumber < hintnumber:
await channel.send(f'Satunnainen luku oli ``{randomnumber}``, joten hävisit pelin!'.format(msg))
break
elif 'low' in message.content:
if randomnumber < hintnumber:
await channel.send(f'Satunnainen luku oli ``{randomnumber}``, joten voitit pelin!'.format(msg))
break
elif randomnumber > hintnumber:
await channel.send(f'Satunnainen luku oli ``{randomnumber}``, joten hävisit pelin!'.format(msg))
break
elif 'vihje' in message.content:
if randomnumber == hintnumber:
await channel.send(f'Satunnainen luku oli ``{randomnumber}``, joten voitit pelin!'.format(msg))
break
elif randomnumber != hintnumber:
await channel.send(f'Satunnainen luku oli ``{randomnumber}``, joten hävisit pelin!'.format(msg))
break
else:
await channel.send('Tuo ei ole oikea vaihtoehto!')
break
@commands.Cog.listener()
_消息上的异步定义(self,message):
如果message.content中的“.highlow”:
randomnumber=random.randint(0100)
hintnumber=random.randint(0100)
channel=message.channel
等待频道。发送('satuninen luku on valittu väliltä`0-100`.\n'
f'Vihjeesi在`{hintnumber}``上。\n
‘Vastaa kirjoittamalla ``高``低``泰``维耶`` `)
def检查(消息):
返回message.content=='high'或'low'或'vihje'和message.channel==频道
msg=wait self.client.wait_for('message',check=check)
尽管如此:
如果message.author!=self.client.user:
如果message.content中为“高”:
如果randomnumber>hintnumber:
等待频道。发送(f'satuninen luku oli`{randomnumber}``,joten voitit pelin!'。格式(msg))
打破
elif randomnumberhintnumber:
wait channel.send(f'satuninen luku oli`{randomnumber}``,joten hävisit pelin!'。格式(msg))
打破
message.content中的elif“vihje”:
如果randomnumber==hintnumber:
等待频道。发送(f'satuninen luku oli`{randomnumber}``,joten voitit pelin!'。格式(msg))
打破
elif随机数!=hintnumber:
wait channel.send(f'satuninen luku oli`{randomnumber}``,joten hävisit pelin!'。格式(msg))
打破
其他:
等待频道发送('Tuo ei ole oikea vaithotehto!')
打破
该命令位于一个齿轮中。问题出在
check()
中。你的条件语句看起来不正确
message.content=='high'或'low'或'vihje'和message.channel==channel
将始终为True
在我看来,您希望check()
在message时返回True
。content
是high、low或vihje之一,而message.channel
是channel
。不幸的是,第一个条件的语法不正确,由于Pythonstr
S的原因,它的计算结果总是True
。其效果是check()
即使在消息时也可以返回True
。内容
是“pinkalicous”甚至None
。将check()重写为:
def检查(消息):
返回{'high','low','vihje'}中的message.content和message.channel==channel
您的条件值实际计算为:
(message.content='high')或('low')或('vihje')和(message.channel==channel)
由于非空的str
S求值为True
,因此您的条件是:
(message.content='high')或(True)或(True)和(message.channel==channel)
#减少到
真的
如果您想亲自查看Python字符串的真实性,请运行以下代码段:
如果“”:
print('空字符串为True')
其他:
print('空字符串为False')
如果“foo”:
打印('非空字符串为True')
其他:
打印('非空字符串为False')
如果“假”:
打印(“‘假’为真”)
其他:
打印(“‘假’为假”)
命令是什么/您是如何定义它的?@Dominik我将整个事件编辑为问题。我将检查函数更改为您建议的,但是现在我收到了以下错误:discord.ext.commands.errors.CommandInvokeError:command引发了异常:禁止:403禁止(错误代码:50013):缺少权限这到底意味着什么?@tontsa28错误应该是不言自明的:bot或用户缺少权限。请看以下内容:@Dominik yeah这是不言自明的,我只是想知道用户或机器人是否缺少权限。已成功修复,但bot缺少对专用通道的权限。