Я пытаюсь заставить своего бота реагировать, если кто-то упоминает о нем. Мой текущий код - это
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!")
Однако ответа я не получил.
Упоминания хранятся в атрибуте с именем 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
хранит неупорядоченный список всех упомянутых пользователей.
Кстати, если идентификатор - это бот, вам не придется жестко кодировать идентификатор.
if client.user in message.mentions:
...
Я так делаю, не могу сказать, лучший ли это способ
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)
кстати, вам не нужно использовать префикс при отправке сообщения, в отличие от команд, чтобы это работало. код сработает независимо от того, где бот упоминается в сообщении
Самый чистый способ сделать это выглядит следующим образом:
@client.event
async def on_message(message):
if client.user.mentioned_in(message):
await message.channel.send("hello!")