Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Sep 11, 2025

This PR implements a new provider for Kick.com, enabling TagzApp to aggregate chat messages from Kick streams alongside existing providers like Twitch, YouTube, and others.

Implementation Details

The Kick provider follows the same architectural patterns as the existing TwitchChat provider:

  • KickProvider - Main provider class implementing ISocialMediaProvider with real-time chat message handling
  • KickConfiguration - Configuration class extending BaseProviderConfiguration with channel name and API key settings
  • ChatClient - WebSocket-based client connecting to Kick.com's Pusher API for real-time chat
  • KickProfileRepository - Handles user profile image retrieval from Kick.com's API with caching
  • StartKick - Dependency injection setup following existing patterns
  • Kick.Config.Ui.razor - Admin panel configuration UI component for managing Kick provider settings

Key Features

  • Real-time WebSocket connection to Kick.com's chat API using Pusher protocol
  • Profile image caching with 1-hour expiration for performance
  • Reactive configuration management with hot-reload support
  • Health monitoring and status reporting
  • Content aggregation with hashtag filtering support
  • Full test coverage with comprehensive unit tests
  • Admin UI integration - Configuration interface in the Client library for easy setup

Usage

Once configured, administrators can use the admin panel to add their Kick channel name and optionally an API key to start aggregating chat messages from their Kick streams. The provider integrates seamlessly with TagzApp's existing content moderation and display systems.

The configuration UI includes:

  • Channel Name field (required)
  • API Key field (optional, password-masked for security)
  • Enabled checkbox to activate/deactivate the provider
  • Health status display for monitoring connection status
  • Informational guidance for setup
// Example configuration
var kickConfig = new KickConfiguration
{
    ChannelName = "my-kick-channel",
    Enabled = true
};

The implementation maintains consistency with existing providers while adapting to Kick.com's specific API requirements and WebSocket-based chat system.

Fixes #501.

> [!WARNING]
>
>


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copy link
Contributor Author

Copilot AI commented Sep 11, 2025

@csharpfritz 👋 This repository doesn't have Copilot instructions. With Copilot instructions, I can understand the repository better, work faster and produce higher quality PRs.

I can generate a .github/copilot-instructions.md file for you automatically. Click here to open a pre-filled issue and assign it to me. I'll write the instructions, and then tag you for review.

Copilot AI and others added 3 commits September 11, 2025 04:01
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
Copilot AI changed the title [WIP] Kick content provider Add Kick.com provider for chat message aggregation Sep 11, 2025
Copilot AI requested a review from csharpfritz September 11, 2025 04:10
@csharpfritz csharpfritz marked this pull request as ready for review October 5, 2025 15:53
Copy link
Contributor

@csharpfritz csharpfritz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot this looks like a good implementation. we need a provider configuration ui in the Client library so that we can configure this connection to Kick

Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Oct 12, 2025

@copilot this looks like a good implementation. we need a provider configuration ui in the Client library so that we can configure this connection to Kick

Added the provider configuration UI in Kick.Config.Ui.razor following the same pattern as other providers. The UI includes:

  • Channel Name field (required)
  • API Key field (optional, password-masked)
  • Enabled checkbox
  • Health status display
  • Informational alert explaining Kick integration

Also added the necessary registration in GenericProvider.razor and project reference in TagzApp.Blazor.csproj.

Commit: {git_commit_hash}

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • mas.to
    • Triggering command: /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/TagzApp/TagzApp/src/TagzApp.UnitTest/bin/Debug/net9.0/TagzApp.UnitTest.runtimeconfig.json --depsfile /home/REDACTED/work/TagzApp/TagzApp/src/TagzApp.UnitTest/bin/Debug/net9.0/TagzApp.UnitTest.deps.json /home/REDACTED/work/TagzApp/TagzApp/src/TagzApp.UnitTest/bin/Debug/net9.0/testhost.dll --port 45937 --endpoint 127.0.0.1:045937 --role client --parentprocessid 4288 --telemetryoptedin false (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Kick content provider

2 participants