#python #discord #bots #discord.py
#python #Discord #боты #discord.py
Вопрос:
Я бы хотел, чтобы мой бот мог отвечать на упоминание определенного пользователя (например, один человек упоминает мою личную учетную запись, и бот отвечает, что меня здесь нет)
Есть ли способ сделать это, используя формат, подобный этому?
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('@user_id'):
await message.channel.send('Im not here leave a message!')
Ответ №1:
Вам нужно будет использовать определенный формат, в котором боты discord получают упоминания. Формат <@!user_id>.
@client.event
async def on_message(message):
if ("<@!put user id here>" in message.content):
await message.channel.send("Im not here leave a message!")
Пример того, как это применялось, и это сработало для меня
@client.event
async def on_message(message):
if ("<@!348256959671173120>" in message.content):
await message.channel.send("Im not here leave a message!")
Комментарии:
1. итак, я переработал свою программу, чтобы следовать этому формату, и все же нада возможно ли, что это устаревший формат или в этом есть что-то еще?
2. Я удалил строку f и фигурные скобки и разместил именно то, что я использовал, чтобы оно работало под ним. Возможно, вы можете попробовать это.
Ответ №2:
Объекты-члены Discord имеют .mentioned_in(message)
метод.
WIZARD_ID = 123456 # <- replace with user ID you want
async def on_message(message):
wizard_of_oz = message.guild.get_member(WIZARD_ID)
if wizard_of_oz.mentioned_in(message):
await message.channel.send("Who dares summon the great Wizard of OZ?!")
Если вы также хотите указать, упоминается ли пользователь по роли, вам также необходимо проверить role_mentions в сообщении. Итак, более полный пример выглядит следующим образом:
def was_mentioned_in(message: discord.Message, member: discord.Member) -> bool:
"""
Whether or not the member (or a role the member has) was mentioned in a message.
"""
if member.mentioned_in(message):
return True
for role in message.role_mentions:
if role in member.roles:
return True
return False
@client.event
async def on_message(message):
wizard_of_oz = message.guild.get_member(WIZARD_ID)
if was_mentioned_in(message, wizard_of_oz):
await message.channel.send("Who dares summon the great Wizard of OZ?!")