Public/Authoral/Read-FromChat.ps1

class ChatAuthor {
    [string]$username;
    [AllowNull()][string]$avatar_url;
}

class ChatMessage {
    [string]$content;
    [datetime]$createdAt;
    [ChatAuthor]$author;
}



function Read-FromChat {
    param(
    )
    begin {
        class NotificationHandler {
            [void] Handler($listener, $params) {
                [PSCustomObject]$message = $params;

                if ($message.author.username -ne $env:RabbitMQ_User) {
                    $message_params = @{
                        ToastTitle = $message.content;
                        Group      = $message.author.username
                    }
                    if ($null -ne $message.author.avatar_url) {
                        $message_params.Add("IconUri", $message.author.avatar_url)
                    }

                    Show-Notification @message_params
                }
            }
        }

        $receiver = New-Object MessagesReceiver
        $notificationHandler = New-Object NotificationHandler

        if ($null -eq $env:RabbitMQ_User) {
            throw "Voce deve criar as variaveis de usuario e senha da conexao ao rabbit no seu perfil powershell antes de utilizar este commando!

            Crie as variaves abaixo:
            [string]$env:RabbitMQ_User = 'username'
            [string]$env:RabbitMQ_Password = 'userpassword'
            "

        }
    }
    process {
        $handleRabbitMessage = {
            param($listener, $params)
            $notificationHandler.Handler($listener, $params)
        }

        $receiver.RegisterObserver($handleRabbitMessage)

        $receiver.Listen(
            "chat",
            "Chat",
            "Direct",
            "chat_communication"
        )
    }
}

Set-Alias listen Read-FromChat