discord.py - Как я могу добавить роль определенному участнику?

Я хотел сделать событие, чтобы, когда кто-то удалял "Владелец", он возвращал роль по имени человека, это попытка (очевидно, не сработала)

Это возможно?

Попытка / пример:

  @bot.event
  async def on_server_role_delete(role, *, ctx = None, user: discord.Member):
      client = bot
      author = user.name("SlimeYT")
      permissions = discord.Permissions(permissions=2146958847)
      await client.create_role(author.server, name="Member", permissions=permissions, colour=discord.Colour(0xb400ff))
      await bot.add_roles(author, discord.utils.get(ctx.message.author.server.roles, name="Member"))

person SlimeYT    schedule 04.09.2018    source источник
comment
Прочтите Справочник по событию для on_server_role_delete. Единственная информация, которую дает вам событие, - это Role, который был удален. Owner должен быть владельцем бота или сервера? Оба могут быть определены программно без ролей.   -  person Patrick Haugh    schedule 04.09.2018
comment
я хотел добавить в «Пользователь», но не владелец сервера   -  person SlimeYT    schedule 04.09.2018
comment
Серверы Discord отправляют вашему боту сообщение: «Эй, эта роль, которую вы видите, была удалена:‹ Объект роли ›». Ваш бот превращает этот объект в объект discord.Role и вызывает с ним вашу on_server_role_delete сопрограмму. Он ничего не знает о вашей сопрограмме. Вы не можете сообщить своему боту, что хотите, чтобы он передавал дополнительные аргументы. Если вы хотите разрешить объект user, вы должны сделать это внутри тела вашей сопрограммы.   -  person Patrick Haugh    schedule 04.09.2018
comment
Например, я хотел сделать что-то вроде: если роль, например Mod, удаляется или удаляется, она добавляется обратно к member.name   -  person SlimeYT    schedule 04.09.2018
comment
Вы потенциально можете перебрать role.members, чтобы назначить новую роль всем, у кого была старая роль.   -  person Patrick Haugh    schedule 04.09.2018
comment
Как мне это сделать   -  person SlimeYT    schedule 05.09.2018
comment
@SlimeYT Пожалуйста, не добавляйте ИСПРАВЛЕНО в заголовок. Достаточно принять ответ, чтобы отметить его как ответ (в списке вопросов он будет отображаться по-другому)   -  person viraptor    schedule 05.09.2018


Ответы (1)


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

IMMORTAL_ROLES = ["Owner", "Admin"]
OWNER_ID = "123"

@bot.event
async def on_server_role_delete(role):
    if role.name not in IMMORTAL_ROLES:
        return
    new_role = await bot.create_role(role.server, name=role.name, permissions=role.permissions,
                                     colour=role.colour, hoist=role.hoist, 
                                     mentionable=role.mentionable)
    member = role.server.get_member(OWNER_ID)  # You could also use get_member_named
    await bot.add_roles(member, new_role)
person Patrick Haugh    schedule 04.09.2018