如果有人提到机器人,如何让机器人做出回应?

时间:2018-05-01 10:30:17

标签: python discord discord.py

如果有人提到机器人,我试图让机器人做出回应。我目前的代码是这个

 if message.content.startswith('@435379055253127178'):
    text = await client.send_message(message.channel, "**Baking a cake**")
    await client.send_message(message.channel, "**Baking a cake**")
    await client.edit_message(text, "Hi i'm cake bot nice to meet you!")

然而,我没有回应。

3 个答案:

答案 0 :(得分:0)

提及存储在名为message.mentions

的属性中
if discord.utils.get(message.server.members, '435379055253127178') in message.mentions:
    text = await client.send_message(message.channel, "**Baking a cake**")
    await client.send_message(message.channel, "**Baking a cake**")
    await client.edit_message(text, "Hi i'm cake bot nice to meet you!")

但是如果你想手动检查提及,有时候会有!在@和id之间,它们由<>包装。我会使用正则表达式:

from re import match

if match("<@!?435379055253127178>", message.content) is not None:
    text = await client.send_message(message.channel, "**Baking a cake**")
    await client.send_message(message.channel, "**Baking a cake**")
    await client.edit_message(text, "Hi i'm cake bot nice to meet you!")

这将检查用户的提及是否在消息的前面,类似于您尝试执行的操作。由于.mentions保留了所有提及用户的无序列表。

顺便说一句,如果id是机器人,你就不必对id进行硬编码。

if client.user in message.mentions:
    ...

答案 1 :(得分:0)

这是我做不到的最好方法

import discord
from discord.ext import commands

client = commands.Bot(command_prefix=">")

@client.event    
async def on_message(message):
    for x in message.mentions:
        if(x==client.user):
            await message.channel.send(f":sauropod: did someone mention me?")

    await client.process_commands(message)        

顺便说一句,您不必在发送消息时使用前缀,而不必像命令那样使用该前缀。无论消息中提到机器人的哪个位置,代码都将触发

答案 2 :(得分:0)

最干净的方法如下:

@client.event
async def on_message(message):
    if client.user.mentioned_in(message):
        await message.channel.send("hello!")