示例#1
0
async def delete_role_named(bot, message):
    """
    Delete a role by name.
    """

    match = find_match(message.content, only_named=True)

    if not match:
        await message.channel.send(
            "Invalid command.\n\n`gk create role named <name>`.")
        return

    name = match.group(1)

    role = find(lambda r: r.name.lower() == name.lower(), message.guild.roles)

    if not role:
        await message.channel.send(f"No role named **\"{name}\"** was found.")
        return

    if not message.author.guild_permissions.manage_roles:
        await message.channel.send(
            "You are not authorized to perform this action.")
        return

    Role.get(role).delete()
    await role.delete()

    await message.channel.send(f"Role named **\"{name}\"** was deleted!")
示例#2
0
async def list_permsets_for(bot, message):
    """
    List all permsets for a specific role.

    Example usage:

        gk list permsets for <role>
    """

    match = find_match(message.content, named=False)

    if not match:
        await message.channel.send(
            "Invalid command.\n\n`gk list permsets for <role>`.")
        return

    role = find(lambda r: r.name.lower() == match.group(1).lower(),
                message.guild.roles)

    if not role:
        await message.channel.send(
            f"No role named **\"{match.group(2)}\"** was found.\n"
            f"Consider creating one? `gk create role named {match.group(1)}`.")
        return

    permset_names = [str(p) for p in Permset.get_all(role)]
    permsets = "\n".join(permset_names)

    await message.channel.send(
        f"Permsets for role **\"{match.group(1)}\"** are:\n\n{permsets}")
示例#3
0
async def create_permset_named(bot, message):
    """
    Creates a permset for a role.

    Example usage:

        gk create permset named <name> for <role>
    """

    match = find_match(message.content)

    if not match:
        await message.channel.send(
            "Invalid command.\n\n`gk create permset named <name> for <role> `."
        )
        return

    role = find(lambda r: r.name.lower() == match.group(2).lower(),
                message.guild.roles)

    if not role:
        await message.channel.send(
            f"No role named **\"{match.group(2)}\"** was found.\n"
            f"Consider creating one? `gk create role named {match.group(2)}`.")
        return

    role_entry = Role.get(role)

    if not role_entry:
        await message.channel.send(
            f"Role named **\"{match.group(1)}\"** is a simple role.")
        return

    if not role_entry.check_member_for_perm(message.author,
                                            Permission.MANAGE_PERMSETS()):
        await message.channel.send(
            "You are not authorized to perform this action.")
        return

    name = clean(match.group(1))

    if Permset.exists(name, role=role):
        await message.channel.send(
            f"Permset named **\"{name}\"** already exists.")
        return

    permset = Permset.create(role, name, Permission.default())

    permissions = await Permission.select_permissions(
        bot,
        message.author,
        Permset.for_user(role, message.author).giveable,
        destination=message.channel)

    if permissions:
        permset.update(permissions=permissions)

    await message.channel.send(f"Permset named **\"{name}\"** was created!")
示例#4
0
async def grant_permset_to(bot, message):
    """
    Grant a user to a permset.

    Example usage:

        gk grant permset named <name> for <role> to <user mention> [<user mention>, ...]
    """

    match = find_match(message.content, to=True)

    if not match:
        await message.channel.send(
            "Invalid command.\n\n`gk create permset named <name> for <role> `")
        return

    role = find(lambda r: r.name.lower() == match.group(2).lower(),
                message.guild.roles)

    if not role:
        await message.channel.send(
            f"No role named **\"{match.group(2)}\"** was found.\n"
            f"Consider creating one? `gk create role named {match.group(2)}`.")
        return

    role_entry = Role.get(role)

    if not role_entry:
        await message.channel.send(
            f"Role named **\"{match.group(1)}\"** is a simple role.")
        return

    if not role_entry.check_member_for_perm(message.author,
                                            Permission.MANAGE_USERS()):
        await message.channel.send(
            "You are not authorized to perform this action.")
        return

    name = clean(match.group(1))
    permset = Permset.get(role, name)

    if not permset:
        await message.channel.send(f"No permset named **\"{name}\"** was found"
                                   )
        return

    for user in message.mentions:
        permset.add_member(user)

    await message.channel.send(
        f"Permset named **\"{name}\"** given to {len(message.mentions)} users!"
    )
示例#5
0
async def delete_permset_named(bot, message):
    """
    Delete a permset for a role.

    Example usage:

        gk delete permset named <name> for <role>
    """

    match = find_match(message.content)

    if not match:
        await message.channel.send(
            "Invalid command.\n\n`gk delete permset named <name> for <role> `")
        return

    role = find(lambda r: r.name.lower() == match.group(2).lower(),
                message.guild.roles)

    if not role:
        await message.channel.send(
            f"No role named **\"{match.group(2)}\"** was found.")
        return

    name = clean(match.group(1))
    permset = Permset.get(role, name)

    if not permset:
        await message.channel.send(
            f"No permset named **\"{name}\"** was found.")
        return

    role_entry = Role.get(role)

    if not role_entry:
        await message.channel.send(
            f"Role named **\"{match.group(1)}\"** is a simple role.")
        return

    if not role_entry.check_member_for_perm(message.author,
                                            Permission.MANAGE_PERMSETS()):
        await message.channel.send(
            "You are not authorized to perform this action.")
        return

    permset.delete()
    await message.channel.send(f"Permset named **\"{name}\"** was deleted!")
示例#6
0
async def create_role_named(bot, message):
    """
    Create a role with name.
    """

    match = find_match(message.content, only_named=True)

    if not match:
        await message.channel.send(
            "Invalid command.\n\n`gk create role named <name>`.")
        return

    name = match.group(1)

    if find(lambda r: r.name.lower() == name.lower(), message.guild.roles):
        await message.channel.send(f"Role name **\"{name}\"** is taken.")
        return

    if not message.author.guild_permissions.manage_roles:
        await message.channel.send(
            "You are not authorized to perform this action.")
        return

    hexx = "%06x" % random.randint(0, 0xFFFFFF)
    colour = Colour(int(hexx, 16))

    role = await message.guild.create_role(
        name=name,
        colour=colour,
        reason="Created for user with complex perms.")

    if Role.create(role, message.author):
        await message.author.add_roles(role)
        await message.channel.send(f"Role named **\"{name}\"** was created!")
        return

    await message.channel.send("Something went wrong...")
    return