Как получить роли пользователя на discord.py переписать - PullRequest
1 голос
/ 23 апреля 2019

Новый discord.py - переписать пользователя здесь.

Я пишу бота, который имеет интерфейс разногласий: он подключен к нескольким серверам (гильдия), и в настоящее время мне нужна система авторизации, чтобы ограничить его использование. Я думал, что смогу получить все роли пользователей и проанализировать их позже, когда потребуется. Итак, я сделал:

    @client.event
    async def on_ready():
        ... 
        for guild in client.guilds:
            for member in guild.members:
                for role in member.roles:
                    if role.name == "Test":
                        print("USER_ID: %d - ROLE: %s" % (member.id, role.name))

но мне это не нравится. Я должен хранить их, и это не эффективно. Также я должен обновить фоновую подпрограмму, чтобы проверить, присоединяются ли новые участники / меняются ли роли. Поэтому мой вопрос: есть ли простой способ проверить роли пользователя на лету во взаимных гильдиях при получении сообщения? Прокрутка официального API - единственный способ получить взаимные гильдии пользователя - profile (), но, как бот, я получаю Запрещенную ошибку, как говорит API.

    @client.event
    async def on_message(message):
        ...
        profile = await message.author.profile()
discord.errors.Forbidden: FORBIDDEN (status code: 403): Bots cannot use this endpoint

(обновление) ADDENDUM:

Мне нужно проверять роли пользователя даже в личных сообщениях, поэтому необходимо получить mut_guilds

1 Ответ

0 голосов
/ 23 апреля 2019

Я просмотрел документацию и не думаю, что есть более простой способ сделать это.

@commands.command(pass_context=True)
async def test(self, ctx):
    for role in ctx.guild.roles:
        if role.name == 'Your role name':
            #Code

Просто, когда вызывается определенная команда, вы проверяете сообщение для каждой роли в гильдии.было отправлено, и если имя роли совпадает с выбранным именем роли, оно выполнит определенный код.

...