你如何让你的机器人忽略回复提及?

时间:2021-07-25 16:02:42

标签: python discord discord.py

在我的机器人中,当提到机器人时,我有一个回复事件。问题是,当你通过回复它提到机器人时,它会回复。我怎样才能解决这个问题?这是我的代码:

@commands.Cog.listener()
async def on_message(self, msg):

    guild = msg.guild

    prefix = get_prefix(self.client, guild)

    if msg.author == self.client.user:
        
        return
    
    if msg.mention_everyone:
        
        return

    if self.client.user.mentioned_in(msg):

        embed = discord.Embed(description=f"The prefix for this server is `{prefix}`   <:info:857962218150953000>", color=0x505050)

        await msg.channel.send(embed=embed)

2 个答案:

答案 0 :(得分:0)

改变

if self.client.user.mentioned_in(msg):

if msg.guild.me.mention in msg.content:

为什么会发生这种情况

discord 消息在其消息中使用一个特殊字段来指定是否提及某人,如果消息在该字段中包含某人,则该消息将 ping 那个人。提到的_in 就是这样工作的,因此您可以确定某个消息是否在 ping 某个人。当我们使用 msg.guild.mention 部分时,我们手动检查提及而不是 discord 告诉我们是否有人被提及,因为 discord 将回复计为提及

答案 1 :(得分:0)

我已将以下代码用于类似的应用程序。 注意 - 将 client.user.id 中的 'client' 替换为您使用过的 bot.user.id

@client.event
async def on_message(message):
    if message.content in [f'<@{client.user.id}', f'<@!{client.user.id}>']:
        await message.channel.send("Hey! My prefix is ```,```")

    await client.process_commands(message)