Ошибка атрибута Проблема Объект «Пользователь» не имеет атрибута «Роли» - PullRequest
0 голосов
/ 17 мая 2019

У меня небольшая проблема с проверкой ролей пользователя. В настоящее время я получаю

if member_role in message.author.roles] AttributeError: 'User' object has no attribute 'roles'

Кажется, я не могу передать roles с аргументом message при проверке, есть ли у автора сообщения их роли.

Помощь оценена.

Вот мой код, с которым я работаю:

   async def on_message(self, message):
        if not isinstance(message.channel, discord.DMChannel) or 
message.author.id == self.bot.user.id:
            # not a DM, or it's just the bot itself
            return

    channel = self.bot.get_channel(578731262550736910)
    if not channel:
        print("Mail channel not found! Reconfigure bot!")
    time = datetime.utcnow()
    guild = self.bot.get_guild(555844758778544158)
    member_role = get(guild.roles, name='Members')
    muted_role = get(guild.roles, name='Modmail Muted')

    content = message.clean_content
    verified = [member for member in guild.members 
               if member_role in message.author.roles]

    muted = [member for member in guild.members 
               if muted_role in message.author.roles]

    if muted:
        await message.channel.send("You're not allowed to use modmail.")
        return

    if verified:
        embed = discord.Embed(title="? You've got modmail!")
        embed.add_field(name="Sent by:", value=f"{message.author.mention} ({message.author.id})" ,inline=False)
        embed.add_field(name="Message:", value=content[:1000] or "blank")
        embed.set_footer(text="Mods: React with icon below this message to notify us that you're dealing with this modmail. (First reaction    already set by the bot)")
        if message.attachments:
            embed.add_field(name="Attachments", value=", ".join([i.url for i in message.attachments]))
        if len(content[1000:]) > 0:
            embed.add_field(name="Message (continued):", value=content[1000:])
        msg = await channel.send(embed=embed)
        await msg.add_reaction('?')
        try:
            embed = discord.Embed(title=f"Thanks {message.author.display_name}! your message has been sent to the Mods.", timestamp=time)
            embed.set_footer(text="Message Sent")
            await message.add_reaction('?')
            await message.channel.send(embed=embed)
        except discord.ext.commands.errors.CommandInvokeError:
            await message.channel.send('?')
        else:
            await message.channel.send("Only members can use modmail.")

1 Ответ

0 голосов
/ 17 мая 2019

как подсказал @Patrick Haugh в ответах, которые я использовал get_member.

user_id = message.author.id
author = guild.get_member(user_id)
...