Discord.py — добавить функции в DM

#python #discord #discord.py #roles

#python #Discord #discord.py #роли

Вопрос:

По сути, я пытаюсь создать бота, который дает пользователю определенную роль, когда пользователь отправляет DM с определенным ключевым словом боту в качестве DM. Ключевое слово stuff и все работает отлично. Сервер проанализирован правильно, но я думаю, что в какой-то момент я допустил ошибку при получении роли или добавлении роли. Вот конкретная часть моего кода, которая используется для роли:

 server = client.get_guild(<my server id here>)
role = discord.utils.get(server.roles, name="Member")
await user.add_roles(ctx.message.author, role)
  

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

1. Возникает ли какое-либо исключение? Добавьте try except в этот код, чтобы перехватить их.

Ответ №1:

У пользователя в DMs нет ролей, у члена гильдии есть роли, поэтому вам нужно получить участника с этим идентификатором пользователя для этого сервера.

Также метод add_roles принимает только роли, не являющиеся объектом пользователя / члена

 server = client.get_guild(<your server id here>)
role = discord.utils.get(server.roles, name="Member")
member = server.get_member(user.id)
await member.add_roles(role)
  

Ответ №2:

Вам нужно извлечь member объект, а не user объект, поскольку user объект не связан с гильдией.

 server = client.get_guild(server_id)
role = discord.utils.get(server.roles, name="Member")
member = server.get_member(ctx.message.author.id)
await member.add_roles(role)
  

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

1. Спасибо за ваш ответ. Я получил его, чтобы определенно получить нужного пользователя и сервер, но add_roles все еще не работает. Я не получил точную обратную трассировку, но ролей добавлено не было. Может быть, я не извлекаю правильную роль? В противном случае я не могу понять, почему возникают эти проблемы

2. Извините, теперь мне удалось создать правильное исключение и я увидел, что у бота просто отсутствуют разрешения на сервере. Извините, что трачу ваше время, и большое спасибо вам, бот, за ваши очень полезные ответы. Merci Beacoup! 🙂