Итак, я пытаюсь написать бота, который дает кому-то приостановленную роль на определенное время, указанное модератором в команде (я знаю, что переменная называется часами, даже если она будет в секундах как в настоящее время это исправлено. Я исправлю это позже.) В основном, это работает модератором, который говорит в сообщении «! suspend @personmention numberofhours», и приостанавливает упомянутое лицо на указанное время. Проблема, с которой я столкнулся, заключается в том, что по какой-то причине бот продолжает говорить мне, что объект пользователя, найденный в строке, где я определяю переменную нарушителя, не имеет ролей атрибута. Насколько я знаю, каждый член сервера раздора имеет атрибуты ролей. Что я делаю не так, что вызывает следующую ошибку, при которой нарушитель не распознает роли?
Вот сообщение об ошибке, которое я получаю:
line 2943, in remove_roles
new_roles = [x.id for x in member.roles]
AttributeError: 'User' object has no attribute 'roles'
А вот фактический код для сценария, который я пишу.
async def suspend(ctx, mention, hours):
offenderid = mention.replace('<','').replace('>','').replace('!','').replace('@','')
person = ctx.message.author
offender = await bot.get_user_info(offenderid)
if "437778896440524800" in [role.id for role in ctx.message.author.roles] or "437778867940229121" in [role.id for role in ctx.message.author.roles] or "437778794879647755" in [role.id for role in ctx.message.author.roles]:
role = discord.utils.get(ctx.message.server.roles, name="Raider")
await bot.remove_roles(offender, role)
role = discord.utils.get(ctx.message.server.roles, name="Suspended Raider")
await bot.add_roles(offender, role)
time.sleep(int(hours))
role = discord.utils.get(ctx.message.server.roles, name="Suspended Raider")
await bot.remove_roles(offender, role)
role = discord.utils.get(ctx.message.server.roles, name="Raider")
await bot.add_roles(offender, role)