如何让我的 Python Discord 机器人检查消息是不是由机器人本身发送?

Posted

技术标签:

【中文标题】如何让我的 Python Discord 机器人检查消息是不是由机器人本身发送?【英文标题】:How can I make my Python Discord bot check if a message was sent by the bot itself?如何让我的 Python Discord 机器人检查消息是否由机器人本身发送? 【发布时间】:2018-06-03 02:16:18 【问题描述】:

我正在使用 Python (v. 3.6.1) 编写一个 Discord 机器人,它检测在一个频道中发送的所有消息并在同一频道中回复它们。但是,机器人会自行回复消息,从而导致无限循环。

@bot.event
async def on_message(message)
    await bot.send_message(message.channel, message.content)```

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

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

例如:

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

应该按需要发挥作用

【讨论】:

变量 bot.user 不再存在,谁能告诉我这个的新版本 bot.user 现在指向创建机器人的人,所以这不再有效【参考方案2】:

我知道这个问题是多年前的问题,但如果其他人像我一样在谷歌上搜索这个问题,传递给 on_message 的消息对象内部有一个作者对象,它有一个名为“bot”的属性,它是 true 或假(如果是机器人,则为真)。因此,您可以通过在开头包含以下 if 语句来配置您的函数以安全地忽略其他机器人发出的任何消息:

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

【讨论】:

以上是关于如何让我的 Python Discord 机器人检查消息是不是由机器人本身发送?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 Discord 机器人每 10 秒更改一次状态?

如何让我的 Discord 机器人向聊天室发送消息 [重复]

如何让我的 discord.py 机器人提及我的消息中提到的某人?

如何让我的 discord.py 机器人识别它正在被 ping

我如何让我的机器人在 .JSON 文件 discord.js 中写入多行 [重复]

当有人对消息做出反应时,我如何让我的 discord.js 机器人添加角色?