Public/Webhooks/Get-MMIncomingWebhook.ps1

# Retrieves incoming webhooks from MatterMost

function Get-MMIncomingWebhook {
    <#
    .SYNOPSIS
        Gets incoming webhooks. Returns a single webhook by ID or a list filtered by team.
    .EXAMPLE
        Get-MMIncomingWebhook
    .EXAMPLE
        Get-MMIncomingWebhook -HookId 'abc123'
    .EXAMPLE
        Get-MMIncomingWebhook -TeamName 'my-team'
    .EXAMPLE
        Get-MMTeam -Name 'my-team' | Get-MMIncomingWebhook
    #>

    [CmdletBinding(DefaultParameterSetName = 'List')]
    [OutputType('MMIncomingWebhook')]
    param(
        [Parameter(Mandatory, ParameterSetName = 'ById')]
        [string]$HookId,

        [Parameter(ParameterSetName = 'List')]
        [string]$TeamId,

        [Parameter(ParameterSetName = 'ByTeamName')]
        [string]$TeamName,

        [Parameter(ParameterSetName = 'ByTeamPipeline', ValueFromPipelineByPropertyName)]
        [Alias('id', 'team_id')]
        [string]$TeamIdFromPipe,

        [Parameter(ParameterSetName = 'List')]
        [Parameter(ParameterSetName = 'ByTeamName')]
        [Parameter(ParameterSetName = 'ByTeamPipeline')]
        [int]$Page = 0,

        [Parameter(ParameterSetName = 'List')]
        [Parameter(ParameterSetName = 'ByTeamName')]
        [Parameter(ParameterSetName = 'ByTeamPipeline')]
        [int]$PerPage = 60
    )

    process {
        if ($PSCmdlet.ParameterSetName -eq 'ById') {
            Invoke-MMRequest -Endpoint "hooks/incoming/$HookId" -Method GET | ConvertTo-MMIncomingWebhook
            return
        }

        $resolvedTeamId = switch ($PSCmdlet.ParameterSetName) {
            'ByTeamName'     { (Get-MMTeam -Name $TeamName).id }
            'ByTeamPipeline' { $TeamIdFromPipe }
            default          { $TeamId }
        }

        $query = "page=$Page&per_page=$PerPage"
        if ($resolvedTeamId) { $query += "&team_id=$resolvedTeamId" }

        Invoke-MMRequest -Endpoint "hooks/incoming?$query" -Method GET |
            ForEach-Object { $_ | ConvertTo-MMIncomingWebhook }
    }
}