[英]Discord.py bot is not detecting user input
So I made a command where you need to guess who the impostor is.所以我做了一个命令,你需要猜测冒名顶替者是谁。 But the bot doesn't seem to pick the user's response ie their choice for who is the impostor..
但是机器人似乎并没有选择用户的反应,即他们选择谁是冒名顶替者。
The code -代码 -
@commands.command(aliases=['gti'])
async def impostor(self, ctx):
def check(message):
return message.author == ctx.author and message.channel == ctx.channel
impostor_list = ['red', 'yellow', 'white', 'purple', 'pink', 'orange', 'lime', 'green', 'cyan', 'brown', 'blue']
impostor = random.choice(impostor_list)
embed = discord.Embed(title="Guess the impostor!", description="Who is sussy? Write their color in chat within 20s to continue!", color = discord.Color.random())
embed.add_field(name="The people are:", value="```red, yellow, white, purple, pink, orange, lime, green, cyan, blue, brown```")
send_em = await ctx.send(embed=embed)
try:
user_response = await self.client.wait_for("message", timeout=20, check=check)
except asyncio.TimeoutError:
return await ctx.send("You took too long to answer.")
else:
if user_response.content == impostor:
correct_em = discord.Embed(title=f"{user_response} was ejected.", description=f"{user_response} was the Impostor. Well done!", color = discord.Color.random())
return await ctx.send(embed=correct_em)
else:
wrong_em = discord.Embed(title=f"{user_response} was ejected.", description=f"{user_response} was not the Impostor.\nYou lose! {impostor} was the Impostor.")
return await ctx.send(embed=wrong_em)
If you have a solution please answer.如果您有解决方案,请回答。 Thanks in advance.
提前致谢。
else
in a try-except
statement : else
is only used after either an if
or an elif
, not in try-except
.try-except
语句中使用else
: else
仅在if
或elif
之后使用,而不在try-except
。 Instead of using else
, you could use finally
, which would be used after the try
or except
is complete.finally
代替else
,它会在try
或except
完成后使用。user_response.content
rather than user_response
on its own! user_response.content
而不是user_response
! For example, in an embed title you may get an error such as HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body In embed.title: Must be 256 or fewer in length.
HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body In embed.title: Must be 256 or fewer in length.
Here is part of the revised code.这是修改后的代码的一部分。
try:
user_response = await self.client.wait_for("message", timeout=20, check=check)
except asyncio.TimeoutError:
return await ctx.send("You took too long to answer.")
# You can use finally, that way it will always be done despite the try-except
# (but in your case, it would only be done after the try
finally:
# most of the time you did user_response without content, which may
# raise an error since it would be over 256 characters in an embed title,
# ergo, don't forget to add .content to them!
if user_response.content == impostor:
correct_em = discord.Embed(title=f"{user_response.content} was ejected.", description=f"{user_response.content} was the Impostor. Well done!", color = discord.Color.random())
return await ctx.send(embed=correct_em)
else:
wrong_em = discord.Embed(title=f"{user_response.content} was ejected.", description=f"{user_response.content} was not the Impostor.\nYou lose! {impostor} was the Impostor.")
return await ctx.send(embed=wrong_em)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.