include/Slack.ps1

@{
    Name          = 'Slack'
    Configuration = @{
        WebHook = @{Required = $true; Type = [string]; Default = $null }
        BotName = @{Required = $false; Type = [string]; Default = $null }
        Channel = @{Required = $false; Type = [string]; Default = $null }
        Icons   = @{Required = $false; Type = [hashtable]; Default = @{
                'ERROR'     = ':fire:'
                'WARNING'   = ':warning:'
                'INFO'      = ':exclamation:'
                'DEBUG'     = ':eyes:'
                'NOTICE'    = ':speech_balloon:'
                'VERBOSE'   = ':mag:'
                'SUCCESS'   = ':white_check_mark:'
                'CRITICAL'  = ':bangbang:'
                'ALERT'     = ':x:'
                'EMERGENCY' = ':red_circle:'
            }
        }
        Level   = @{Required = $false; Type = [string]; Default = $Logging.Level }
        Format  = @{Required = $false; Type = [string]; Default = $Logging.Format }
    }
    Logger        = {
        param(
            [hashtable] $Log,
            [hashtable] $Configuration
        )

        $Text = @{
            text = Format-Pattern -Pattern $Configuration.Format -Source $Log
        }

        if ($Configuration.BotName)
        {
            $Text['username'] = $Configuration.BotName
        }

        if ($Configuration.Channel)
        {
            $Text['channel'] = $Configuration.Channel
        }

        $Text['icon_emoji'] = $Configuration.Icons[$Log.LevelNo]

        $payload = 'payload={0}' -f ($Text | ConvertTo-Json -Compress)

        Invoke-RestMethod -Method POST -Uri $Configuration.WebHook -Body $payload | Out-Null
    }
}