Как упомянуть кого-то в «on_message»

#python #discord #discord.py #message #discord.py-rewrite

#python #Discord #Сообщение #discord.py

Вопрос:

Итак, я хочу, чтобы бот упоминал автора в author, который сказал n-слово. Я пытался использовать {message.mention} , но, видимо, его не существует, так как же мне упомянуть кого-то, использующего событие on_message? Вот код:

 @commands.Cog.listener()
async def on_message(self, message):
  if "ni**a" in message.content:
    await message.channel.send(f"<:sniper:711509974588719216> R6 BRUH {message.author}")
  if 'ni**er' in message.content:
    await message.channel.send(f"<:sniper:711509974588719216> R6 BRUH {message.author}")
  if 'Ni**a' in message.content:
    await message.channel.send(f"<:sniper:711509974588719216> R6 BRUH {message.author}")
  if 'Ni**er' in message.content:
    await message.channel.send(f"<:sniper:711509974588719216> R6 BRUH {message.author}")
  

Комментарии:

1. Вероятно, вам следует нормализовать свои строки, прежде чем проверять, есть ли слово в содержимом. Легко обойти вашего бота, просто написав заглавными буквами каждую вторую букву. Попробуйте вместо этого сравнивать только строчную версию, сначала преобразовав содержимое в нижний регистр с message.content.lower() помощью .

Ответ №1:

Если вы хотите упомянуть автора сообщения, вы можете использовать message.author.mention . А также вам не нужно выполнять 4 оператора if, достаточно 1. Вот что вы можете сделать:

 @commands.Cog.listener()
async def on_message(self, message):
  content = message.content.lower()
  if "ni**a" in content or "ni**er" in content:
    await message.channel.send(f"<:sniper:711509974588719216> R6 BRUH {message.author.mention}")
  

Ответ №2:

Объект-член

Чтобы упомянуть кого-то, вам нужно иметь объект-член, связанный с этим человеком.

Объект-член содержит атрибут «упоминание«, который можно использовать для извлечения строки, используемой для упоминания этого члена.


Итак, как это применить?

As message.author является объектом-членом. Мы можем использовать message.author.mention , чтобы получить строку с упоминанием этого участника. В результате получается следующий код:

 @commands.Cog.listener()
async def on_message(self, message):
  if "ni**a" in message.content:
    await message.channel.send(f"<:sniper:711509974588719216> R6 BRUH {message.author.mention}")
  if 'ni**er' in message.content:
    await message.channel.send(f"<:sniper:711509974588719216> R6 BRUH {message.author.mention}")
  if 'Ni**a' in message.content:
    await message.channel.send(f"<:sniper:711509974588719216> R6 BRUH {message.author.mention}")
  if 'Ni**er' in message.content:
    await message.channel.send(f"<:sniper:711509974588719216> R6 BRUH {message.author.mention}")
  

Упростить

И, как уже упоминали некоторые люди, мы можем упростить ваш код до этого:

 @commands.Cog.listener()
async def on_message(self, message):
  content = message.content.lower()
  if "ni**a" in content or "ni**er" in content:
    await message.channel.send(f"<:sniper:711509974588719216> R6 BRUH {message.author.mention}")
  

Ссылки:

Объект-член

Член.упоминание

Объект сообщения

Message.content

Ответ №3:

Если вы хотите упомянуть пользователя, вам всегда нужно это делать:

 await message.channel.send(f"blablabliblu------> {message.authormention}")#you want to mention the message author
#mention a other spezific user
user = client/bot.get_user(user_id)#get the user
await message.channel.sedn(f"hellooooooo---> {user.mention})")
#so you alwas need <someuser.mention>