所以我在猜数字机器人。我希望僵尸程序在猜出数字时发送,然后固定僵尸程序发送的消息。我该怎么办?
@client.event
async def on_message(message):
if message.content == str(number) and message.channel.id == 555146955815256065:
author = message.author.id
await message.channel.send("Congratulations <@" + str(author) + ">! You guessed the number, `" + str(number) + "`!")
await message.pin()
我已经做到了,这将固定用户发送的消息,而不是机器人消息,
感谢您的帮助,谢谢!
答案 0 :(得分:1)
在您的原始代码中,您引用的不是机器人发送的消息,而是用户发送的消息,因此很明显,用户消息将被固定。
要修复此问题,您还需要捕获机器人发送的消息。
所以您可以这样做:
@client.event
async def on_message(message):
if message.content == str(number) and message.channel.id == 555146955815256065:
author = message.author.id
await message.channel.send("Congratulations <@" + str(author) + ">! You guessed the number, `" + str(number) + "`!")
if message.id== botid and message.channel.id == 555146955815256065:
await message.pin()
如果在捕获正确的消息时遇到问题,您也可以在其上放置过滤器,以检查它是否使用正则表达式以"Congratulations"
开头。
答案 1 :(得分:0)
使用第一个if
语句,以使消息不会循环
@bot.event
async def on_message(msg):
if msg.author.id != bot.user.id:
message=await msg.channel.send("You guessed it")
await message.pin() #Pins the message the bot sent
await msg.pin() #Pins the message the user sent
答案 2 :(得分:0)
您必须定义机器人发送的消息(例如此处为 botmsg
)并将其固定。否则,它会固定 on_message(message)
中定义的消息,关于机器人反应的消息是什么。
此外,我对消息本身进行了过度处理,因此提及用户并插入数字要容易得多(您也可以将其作为整数来执行,但字符串也可以)。
@client.event
async def on_message(message):
if message.content == str(number) and message.channel.id == 555146955815256065:
botmsg = await message.channel.send(f"Congratulations {message.author.mention}! You guessed the number, `{number}`!")
await botmsg.pin()