TwitchComponent.cs
using System;
using Sandbox;
namespace TwitchAPI;

public class TwitchComponent : Component
{
    [Property] public string Username { get; set; }

    [Property, Group( "Actions" )] public Action<TwitchChatMessage> OnMessageReceived { get; set; }
    [Property, Group( "Actions" )] public Action<TwitchChatMessage> OnMessageRemoved { get; set; }
    [Property, Group( "Actions" )] public Action OnChatCleared { get; set; }


    TwitchChatConnection TwitchChat;

    protected override void OnEnabled()
    {
        if ( string.IsNullOrWhiteSpace( Username ) ) return;

        TwitchChat = new TwitchChatConnection( Username );

        TwitchChat.OnMessageReceived += OnChatMessageReceived;
        TwitchChat.OnMessageRemoved += OnChatMessageRemoved;
        TwitchChat.OnChatCleared += OnChatChatCleared;
    }

    protected override void OnDisabled()
    {
        if ( TwitchChat is not null )
        {
            TwitchChat?.Dispose();

            TwitchChat.OnMessageReceived -= OnChatMessageReceived;
            TwitchChat.OnMessageRemoved -= OnChatMessageRemoved;
            TwitchChat.OnChatCleared -= OnChatChatCleared;
        }
    }

    void OnChatMessageReceived( TwitchChatMessage message )
    {
        OnMessageReceived?.Invoke( message );
    }

    void OnChatMessageRemoved( TwitchChatMessage message )
    {
        OnMessageRemoved?.Invoke( message );
    }

    void OnChatChatCleared()
    {
        OnChatCleared?.Invoke();
    }
}