这个问题的措词不好,但是对于我制造的一个不和谐的机器人,它在message.content中查找“ s!rps”,如果在聊天中发送了“ s!rps”,则要求提供Rock,Paper或剪刀。我希望它更新每条新消息的消息内容,但message.content保持为s!rps并创建一个无限循环。如何在每条新消息中更新message.content?
if "s!rps" in message.content:
MAI = message.author.id
msg = "Do you pick Rock, Paper, or Scissors?".format(message)
await client.send_message(message.channel, msg)
while True:
cr = random.randint(1,3)
if message.content.startswith("Rock"):
if message.author.id == MAI:
choice = 1
break
elif message.content.startswith("Paper"):
if message.author.id == MAI:
choice = 2
break
elif message.content.startswith("Scissors"):
if message.author.id == MAI:
choice = 3
break
elif message.content.startswith("rock"):
if message.author.id == MAI:
choice = 1
break
elif message.content.startswith("paper"):
if message.author.id == MAI:
choice = 2
break
elif message.content.startswith("scissors"):
if message.author.id == MAI:
choice = 3
break
else:
if message.author.id == MAI:
if message.content != "s!rps":
msg = ("\"%s\" isn't a valid input." % message.content).format(message)
await client.send_message(message.channel,msg)
if choice == "Rock":
choiceNum = 1
if choice == "Paper":
choiceNum = "2"
if choice == 3:
choiceWord = ""
if cr == 1:
crWord = "Rock"
if cr == 2:
crWord = "Paper"
if cr == 3:
crWord = "Scissors"
if (cr-choice+5)%3 == 1:
msg = ("You picked %s, I picked %s, you win!" % (choiceWord, crWord)).format(message)
await client.send_message(message.channel, msg)
if (cr-choice+5)%3 == 2:
msg = ("You picked %s, I picked %s, I win!" % (choiceWord, crWord)).format(message)
await client.send_message(message.channel, msg)
if cr == choice:
msg = ("We both picked %s, it's a tie." % choiceWord).format(message)
await client.send_message(message.channel, msg)
答案 0 :(得分:2)
您的消息内容在整个方法中都是固定的,您永远不会更新或等待新消息。同样,该循环可能会完全阻塞您的工作流程!放下while循环,而改为使用Client.wait_for_message
(如果重写,则使用Client.wait_for
)。
我将执行以下操作,在事件内部定义一个内部函数,该函数可以在等待特定消息时用作检查:
def check(m):
answers = ["rock", "paper", "scissors"]
if any(answer == m.content.lower() for answer in answers):
return True
else:
client.send_message(m.channel, "{0.content} is not a viable option".format(m))
return False
然后,摆脱while循环,即将您的代码修改为:
MAI = message.author.id
msg = "Do you pick Rock, Paper, or Scissors?".format(message)
await client.send_message(message.channel, msg)
answer_msg = await client.wait_for_message(author = MAI, check = check)
answer = answer_msg.content.lower()
if answer == "rock":
choice = 1
elif answer == "scissors":
.....
请注意,wait_for_message具有author参数,以确保消息作者确实是您想要的消息作者,这意味着您的if message.author.id == MAI
将得到考虑。现在它也不区分大小写。