discord.py бот не предоставляет роль, предоставленную при присоединении к участнику

#python #python-3.x #discord.py

Вопрос:

Я попытался настроить это событие для бота, в котором он предоставил бы роль участнику, который присоединяется. По какой-то причине он не дает роли, но и не выдает никаких ошибок.

 @client.event
def on_member_join(member):
  role = discord.utils.get(member.server.roles, id="868708006504833034")
  await client.add_roles(member, role)
 

Ответ №1:

 @client.event
def on_member_join(member):
  role = discord.utils.get(member.server.roles, id="868708006504833034")
  await client.add_roles(member, role)
 

С вашим кодом есть несколько проблем

  • в строке 2 функция не является асинхронной, discord.py события должны быть асинхронными, поэтому замените def их async def
  • в строке 3 идентификаторы всегда являются int, поэтому вы бы сделали это int, но вы даже не должны использовать discord.utils.get , так как вы можете просто сделать member.guild.get_role(id) . Примечание: идентификатор должен быть int
  • в строке 4 client.add_roles устарел, он был заменен на member.add_roles. Так что вам придется переодеться client.add_roles(member, role) в member.add_roles(role)

Таким образом, полный обновленный код будет

 @client.event
async def on_member_join(member):
  role = member.guild.get_role(868708006504833034)
  await member.add_roles(role)
 

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

1. Хм, не могли бы вы опубликовать полный обновленный код?

2. У вас есть какие-то намерения?

3. Да, я так думаю.

4. ну, я думаю, что это не сработает, убедитесь, что вы установили для намерения участников значение true, официальные документы о намерениях: discordpy.readthedocs.io/en/latest/intents.html . специально смотрите discordpy.readthedocs.io/en/latest/…

Ответ №2:

Идентификатор-это интигер:

   role = discord.utils.get(member.server.roles, id=868708006504833034)
 

Попробовать это.

Ответ №3:

Используйте это:

 @client.event
async def on_member_join(member):
      await member.add_roles(discord.utils.get(member.guild.roles, id=868708006504833034))
 

Я думаю, что это может работать правильно