PrivateFunctions/Set-SlackChannelTopic.ps1

<#
.SYNOPSIS
    This function sets the topic of a channel in Slack.
.DESCRIPTION
    This function sets the topic of a channel in Slack.
    The scope required to call this function is "channels:write".
#>

function Set-SlackChannelTopic {
    [CmdletBinding(PositionalBinding=$false)]
    [OutputType([Bool])]
    param(
        # The authentication token for Slack
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$token,

        # The name of the channel to set
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$channelName,

        # The topic of the channel
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$topic
    )

    # Retrieve the ID for the specified channel and verify that the channel exists
    $channelID = (Get-SlackChannel -Token $token -ChannelName $channelName).id
    if (!$channelID) {
        throw "The channel '$($channelName)' cannot be found in Slack."
    }

    # Prepare the API call parameters
    $invokeRestMethodParams = @{
        Uri     = "https://slack.com/api/channels.setTopic"
        Method  = "POST"
        Headers = @{
            "Content-Type" = "application/json"
            Authorization  = "Bearer $($token)"
        }
        Body    = @{
            channel = "$($channelID)"
            topic   = "$($topic)"
        } | ConvertTo-Json
    }

    # Invoke the call
    $response = Invoke-RestMethod @invokeRestMethodParams

    # Verify that the updating is successful
    if ($response.ok) {
        return $true
    }
    else {
        throw "Failed to set the topic of channel '$($channelName)' with the error message:`r`n$($response.error)."
    }
}