# internal function to transmit a chunk of text to Discord function SendDiscordMessage { param ( [string] $message = $(throw "-message is required"), [string] $webhook = $(throw "-webhook is required"), [string] $botName = $(throw "-botName is required"), [int] $color = -1, [string] $title = "" ) # force utf-8, because that is what Discord needs $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding $header = "Content-Type: application/json" # convert string into json, escaping the given message $title = ConvertTo-Json -InputObject $title $message = ConvertTo-Json -InputObject $message.trim() $botName = ConvertTo-Json -InputObject $botName # rewrite json string, because "\u001b[m" needs to "\u001b[0m" instead # windows is fine with the missing zero, but Discord needs it $message = $message -Replace "\\u001b\[m", "\u001b[0m" # only enable colors if needed $prefix = '' if ($message -contains "\u001b") { $prefix = 'ansi\n' } if ($message -eq '""') { # message empty, so denote as such $message = '"\ud83d\udea9 MESSAGE EMPTY \ud83d\udea9"' } else { # remove wrapping quotes around json string, replace with color-enabled block quotes $message = '"```' + $prefix + $message.SubString(1, $message.length - 2) + '\n```"' } # build post data: {"username": "$botName", "content": "$message"} $content = "{" if ($botName -ne '""') { $content += '"username": ' + $botName + ', ' } $content += '"embeds": [{"description": ' + $message if ($color -ge 0) { $content += ', "color": ' + $color } if ($title -ne '""') { $content += ', "title": ' + $title } $content += '}]}' # post data is complex, so we have to pipe it into curl # display the resulting id/message returned from Discord echo "$content" | curl.exe -s -H "$header" -X "POST" -d "@-" "$webhook" | ConvertFrom-Json | Select-Object -Property id, message }