#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}")
Ссылки:
Ответ №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>