Написание бота Discord с использованием Discord.py Rewrite - PullRequest
1 голос
/ 28 октября 2019

Так что в настоящее время у меня есть дискорд-бот, и я хочу, чтобы он приветствовал новых пользователей в #joining и дал им псевдоним "[0] Member Name". Я не получаю никаких ошибок, но ни одна из этих функций не работает!

РЕДАКТИРОВАТЬ: переписать некоторый код, и я сейчас получаю эту ошибку:

РЕДАКТИРОВАТЬ 2: Все еще не удается изменитьПсевдонимы, но когда пользователь покидает сервер, я получаю эти ошибки от функции, чтобы проверить, является ли пользователь сотрудником. Я не получаю ошибки от message.author, но когда автор сообщения уходит, я начинаю получать эту ошибку. Я попытался сбросить сообщение .author, когда кто-нибудь покинул сервер, но это не помогло! У меня нет никаких идей о том, как остановить эти ошибки!

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\Evan\Anaconda3\envs\testing\lib\site-packages\discord\client.py", line 270, in _run_event
    await coro(*args, **kwargs)
  File "C:/Users/Evan/PycharmProjects/Bot/bot.py", line 107, in on_message
    top_role = message.author.top_role
AttributeError: 'User' object has no attribute 'top_role'

Мой новый отредактированный код

1 Ответ

1 голос
/ 28 октября 2019

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


role = discord.utils.get(discord.Guild.roles, name="Member")

Ошибка, когда вы получаете роль по имени Участник. Лучше получить роль по идентификатору, вы можете сделать это, используя member.guild.get_role(630533613947060244). Ошибка в том, что discord.Guild.roles не является итеративным свойством.


nick = discord.utils.get(str(member.nick))

Не уверен, что вы там собираетесь, вы можете использовать nick = member.nick, чтобы получить строку с псевдонимом участника.


Для редактирования псевдонима вы должны использовать:

await member.edit(nick=f"[0] {member.display_name}")

AttributeError: у объекта 'User' нет атрибута 'top_role'

Вы получаете эту ошибку, потому что хотите получить доступ к атрибуту top_role в экземпляре discord.User, но только для этого атрибута определен только discord.Member. Когда кто-то покидает сервер, вы получаете экземпляр User вместо экземпляра Member.

if isinstance(message.author, discord.Member):
  top_role = message.author.top_role
else:
  top_role = None   # top role not available, user has no roles
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...