изменение роли для всех участников сервера

#python #discord.py

#питон #discord.py

Вопрос:

Я хочу создать discord-бота, который после получения сообщения от администратора меняет роли всех участников сервера (исключая администратора) с @everyone на @newrole.

Я попробовал этот код, но есть ошибка:

роль = discord.utils.get(server.roles, имя=»новая роль»)
Ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘роли’

Я использую последнюю версию discord и Python 3.6.

 server = client.get_guild(int(server-id))

@client.event
async def on_message(message):
if message.content.startswith('change role'):
    await message.author.send("Change the role from @everyone to @newrole")
    role = discord.utils.get(server.roles, name="newrole")
    for member in server.members:
        await member.add_roles(role)
 

Ответ №1:

Все участники имеют everyone роль в любое время. Однако участники могут иметь несколько ролей, поэтому вы также можете назначить им свою новую роль. Нет сопрограммы для массового назначения ролей, поэтому вы должны делать это по элементам:

 @client.event
async def on_message(message):
    if message.content.startswith('change role'):
        await message.author.send("Change the role from @everyone to @newrole")
        role = discord.utils.get(message.guild.roles, name="newrole")
        for member in message.guild.members:
            await member.add_roles(role)
 

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

1. Я попробовал этот код, но есть ошибка: role = discord.utils.get(message.guild. роли, имя= «@newrole») Ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘роли’

2. Отправляете ли вы личное сообщение боту, чтобы запустить команду? Тогда он не будет знать, на каком сервере действовать.

3. Да, я отправляю личное сообщение от администратора боту

4. Есть ли в вашем коде определение server , которое вы можете использовать вместо message.guild ?

5. Нет, это не так… Как я могу это сделать?