SlackWeb.psm1

#Requires -Version 3.0

$ModulePath = $PSScriptRoot

foreach ($FunctionType in @('Private', 'Public')) {
    $Path = Join-Path -Path $ModulePath -ChildPath ('{0}\*.ps1' -f $FunctionType)
    if (Test-Path -Path $Path) {
        Get-ChildItem -Path $Path -Recurse | ForEach-Object -Process { . $_.FullName }
    }
}

$ModuleConfiguration = Get-SlackWebConfiguration
$ModuleWideMessageRepliesRateLimitSeconds = $ModuleConfiguration.MessageRepliesRateLimitSeconds
$ModuleWideFormBoundaryCommonPart = $ModuleConfiguration.FormBoundaryCommonPart
$ModuleWideUA = $ModuleConfiguration.UA
$ModuleWideToken = $ModuleConfiguration.Token
$ModuleWideCookie = $ModuleConfiguration.Cookie

$WriteDownConfig = $false
if (-not $ModuleWideToken) {
    Write-Warning -Message 'Your token value is not defined. Please, set it now.'
    $ModuleWideToken = Read-Host -Prompt 'Your token, please'
    $WriteDownConfig = $true
}
if (-not $ModuleWideCookie) {
    Write-Warning -Message 'Your d-cookie value is not defined. Please, set it now.'
    $ModuleWideCookie = Read-Host -Prompt 'Your d-cookie, please'
    $WriteDownConfig = $true
}

if ($WriteDownConfig) {
    Set-SlackWebConfiguration -InitialConfiguration
}

$Headers = @{
    'method'          = 'GET'
    'authority'       = '{0}.slack.com'
    'scheme'          = 'https'
    'path'            = ('/api/auth.test?token={0}' -f $ModuleWideToken)
    'accept'          = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
    'accept-encoding' = 'gzip, deflate, br'
}
$InitUri = 'https://slack.com/api/auth.test?token={0}' -f $ModuleWideToken
$Response = Invoke-CustomWebRequest -Uri $InitUri -Headers $Headers
$TeamInfo = $Response.Content | ConvertFrom-Json
[uri]$TeamInfoUri = $TeamInfo.url
$ModuleWideTeamUri = $TeamInfoUri.Host.Substring(0, $TeamInfoUri.Host.IndexOf('.'))
$ModuleWideTeamID = $TeamInfo.team_id