如何让我的Python Discord机器人检查消息是否由机器人自己发送?

8
我正在使用Python (v.3.6.1)编写一个Discord机器人,它可以检测到发送到频道的所有消息,并在该频道中回复它们。但是,机器人会自己发送回复,导致无限循环。
@bot.event
async def on_message(message)
    await bot.send_message(message.channel, message.content)```

我该如何解决这个问题?
2个回答

10

message类包含有关消息作者的信息,您可以利用这些信息来确定是否要回复该消息。 author是一个Member对象(如果通道是私人的,则为其超类User),它具有一个id属性,但也支持用户之间的直接逻辑比较。

例如:

@bot.event
async def on_message(message):
    if message.author != bot.user:
        await bot.send_message(message.channel, message.content)

应按预期运行。

1
变量bot.user不再存在,有人可以告诉我它的新版本吗? - Dan A
1
bot.user 现在指向创建机器人的个人,所以这不再起作用。 - Azure

5

我知道这个问题是几年前的,但如果像我一样有人在谷歌搜索这个问题,那么传递给on_message方法的消息对象中包含一个作者对象,在其中有一个名为“bot”的属性,其值为true或false(如果它是一个机器人,则为true)。因此,你可以在函数的开头包含这个if语句来安全地忽略其他机器人发送的任何消息:

def on_message(self, message):
    if (message.author.bot):
        return #if this is true: then it is by a bot.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接