我创建了一个机器人,该机器人除其他功能外,还可以在聊天中有人说出特定短语时从garfielf视频中发送报价。例如,如果我要说“ lasagna”,它将以“ * lasaga”回应。但是,使用一个特定的短语,它将无限地发送消息,直到我将其关闭为止。仅当有人在服务器中说“我讨厌”时,它才会执行此操作。我尝试创建一个等于client.get_channel(channel_id)的返回值的通道变量,并改用channel.send(),但这存在相同的问题。
@bot.event
async def on_message(message):
await bot.wait_until_ready()
lasaga = "lasagna"
garfield = "garfielf"
where_are_the = "where are the "
wheres_the = "where\'s the "
i_hate = "i hate "
bad_bot = "bad bot"
text = message.content.strip().lower()
# sends response if keyword(s) are in message
if lasaga in text:
await message.channel.send('*lasaga')
if garfield in text:
await message.channel.send(f'I eat, {message.author.name}. It\'s what I do')
if where_are_the in text or wheres_the in text:
await message.channel.send('I eat those food')
if i_hate in text:
await message.channel.send('I hate alram clocks')
if bad_bot in text:
await message.channel.send('sowwy uwu')
我不知道为什么只有一个短语就会发生这种情况。
编辑:这是视频:https://youtu.be/OGbhJjXl9Rk
编辑2:事实证明该机器人正在触发自身。我通过将bot_id设置为机器人的ID并将有问题的if语句更改为此来解决此问题:
if i_hate in text and message.author.id != bot_id:
await message.channel.send('I hate alram clocks')
答案 0 :(得分:1)
机器人不会忽略它自己的消息,因此,如果机器人编写了自己的命令,它将执行它。可以通过忽略自己的消息来解决此问题
async def on_message(self, message):
if message.author == bot.user:
return
# the rest of your code goes here