예제 #1
0
async def receive_command(command: Command) -> bool:
    """Returns whether the received command was recognized and executed."""
    if command.name not in registered_aliases:
        return False
    
    name = registered_aliases[command.name]
    func_wrapper = registered_commands[name]
    
    # Let the user know the command was recognized, and that a response should follow.
    await command.trigger_typing()

    if not permissions.can_execute(command):
        await command.respond(
            response = f"✗ Lacking permission.",
            embed = permissions_embed(
                # Can only lack permission in a guild.
                guild_id         = command.guild_id(),
                command_wrappers = [func_wrapper]
            )
        )
        return False

    if len(func_wrapper.required_args) > len(command.args):
        missing_args = func_wrapper.required_args[len(command.args):]
        missing_arg_str = "`<" + "`>, <`".join(missing_args) + ">`"
        await command.respond_err(f"Missing required argument(s) {missing_arg_str}.")
        return False

    parsed_args = parse_args(command.args, arg_count=len(func_wrapper.required_args) + len(func_wrapper.optional_args))
    await func_wrapper.execute(command, *parsed_args)

    return True
예제 #2
0
async def test_disable():
    mock_command = MockCommand("disable", "disable", context=MockMessage(channel=MockChannel(guild=MockGuild(_id=3))))
    set_permission_filter(guild_id=3, command_wrapper=get_wrapper("disable"), permission_filter="user:<@0>")

    assert await receive_command(mock_command)
    assert "✓" in mock_command.response
    expected_embed = permissions_embed(guild_id=3, command_wrappers=[get_wrapper("disable")])
    assert mock_command.response_embed.fields[0].name == expected_embed.fields[0].name
    assert mock_command.response_embed.fields[0].value == expected_embed.fields[0].value
    assert not get_permission_filter(guild_id=3, command_wrapper=get_wrapper("disable"))
예제 #3
0
async def cmd_disable(command: Command, commands_str: str):
    if not command.guild_id():
        await command.respond_err("Cannot change permissions in DM channels.")
        return

    command_wrappers = get_command_wrappers(commands_str)
    for command_wrapper in command_wrappers:
        permissions.set_permission_filter(guild_id=command.guild_id(),
                                          command_wrapper=command_wrapper,
                                          permission_filter=None)

    await command.respond(response="✓ Command permissions changed.",
                          embed=permissions_embed(
                              guild_id=command.guild_id(),
                              command_wrappers=command_wrappers))
예제 #4
0
async def cmd_enable(command: Command, commands_str: str, perms_filter: Optional[str]=None):
    if not command.guild_id():
        await command.respond_err("Cannot change permissions in DM channels.")
        return
    
    if perms_filter and not await validate_filter(command, perms_filter, filter_context):
        # `validate_filter` responds for us.
        return

    command_wrappers = get_command_wrappers(commands_str)
    for command_wrapper in command_wrappers:
        permissions.set_permission_filter(
            guild_id          = command.guild_id(),
            command_wrapper   = command_wrapper,
            permission_filter = perms_filter or f"role:<@&{command.context.guild.default_role.id}>"
        )
    
    await command.respond(
        response = "✓ Command permissions changed.",
        embed    = permissions_embed(
            guild_id         = command.guild_id(),
            command_wrappers = command_wrappers
        )
    )