我正在尝试在discord.py 上制作一个常见问题解答机器人,到目前为止进展顺利。我想添加一个额外的功能,当机器人检测到常见问题解答时,机器人不会直接发送答案,而是会发送一条提示消息,其中包含两种反应(竖起大拇指和竖起大拇指),具体取决于所选的反应根据用户的要求,机器人要么发送答案,要么删除提示消息。
现在,当询问常见问题解答时,机器人会检测到它并发送提示,询问用户是否想要答案,甚至做出反应。问题是,一旦机器人完成对“拇指朝下”表情符号的反应,提示消息就会被删除。我希望它等待用户做出反应并相应地继续。
我究竟做错了什么?请帮忙。提前致谢!
@bot.event
async def on_message(message):
await bot.process_commands(message)
if (message.author.bot):
return
if(isQuestion(message.content)):
(answer_text, question_text) = answer_question(message.content)
if answer_text:
botmessage = await message.channel.send(f"""Do you want the answer to: {question_text} ?""")
await botmessage.add_reaction('\N{THUMBS UP SIGN}')
await botmessage.add_reaction('\N{THUMBS DOWN SIGN}')
def checkUp(reaction, user):
return user == message.author and str(reaction.emoji) == '\N{THUMBS UP SIGN}' or str(reaction.emoji) == '\N{THUMBS DOWN SIGN}'
try:
reaction, user = await bot.wait_for('reaction_add', timeout=60.0, check=checkUp)
except asyncio.TimeoutError:
await botmessage.delete()
else:
print(reaction.emoji)
if reaction.emoji == '\N{THUMBS UP SIGN}':
await botmessage.delete()
await message.channel.send(answer_text)
elif reaction.emoji == '\N{THUMBS DOWN SIGN}':
await botmessage.delete()
问题很可能出在您的“checkUp”函数中,因为您缺少括号。
user == message.author and str(reaction.emoji) == '\N{THUMBS UP SIGN}' or str(reaction.emoji) == '\N{THUMBS DOWN SIGN}'
当遇到这样的布尔链时,我不太确定 python 的默认行为,但它可能会这样放置括号:
(user == message.author and str(reaction.emoji) == '\N{THUMBS UP SIGN}') or (str(reaction.emoji) == '\N{THUMBS DOWN SIGN}')
你看到问题了吗?现在只要someone如果对该消息表示反对,则检查返回 True。这意味着它可以做出反应对自己之前的反应(尽管您之前可能已经执行过此操作,但我们在这里讨论的是异步)。
Fix:
像这样放置括号:
user == message.author and (str(reaction.emoji) == '\N{THUMBS UP SIGN}' or str(reaction.emoji) == '\N{THUMBS DOWN SIGN}')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)