kick-rust 0.1.0

A Rust library for interacting with Kick.com WebSocket chat and API
Documentation
# kick-rust


A Rust library for interacting with Kick.com WebSocket chat and API. This library provides a simple and robust way to connect to Kick.com chat rooms, receive real-time messages, and interact with the Kick.com API.

## Features


- **WebSocket Chat Client**: Connect to Kick.com chat rooms and receive real-time messages
- **Event Handling**: Comprehensive event system for different types of chat events
- **Automatic Reconnection**: Built-in reconnection logic with configurable intervals
- **Message Parsing**: Automatic parsing of chat messages, emotes, and metadata
- **API Client**: HTTP client for interacting with Kick.com REST API
- **Async/Await**: Full async support using Tokio
- **Type Safety**: Strongly typed events and data structures

## Installation


Add this to your `Cargo.toml`:

```toml
[dependencies]
kick-rust = "0.1.0"
```

## Quick Start


### Basic WebSocket Chat Example


```rust
use kick_rust::KickClient;

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = KickClient::new();

    // Handle chat messages
    client.on_chat_message(|data| {
        println!("{}: {}", data.sender.username, data.content);
    }).await;

    // Handle connection ready
    client.on_ready(|()| {
        println!("Connected to chat!");
    }).await;

    // Connect to a channel
    client.connect("channel_name").await?;

    // Keep the program running
    loop {
        tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
    }
}
```

### Advanced Configuration


```rust
use kick_rust::{KickClient, KickWebSocketOptions};

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = KickClient::with_options(KickWebSocketOptions {
        auto_reconnect: true,
        reconnect_interval: 5000,
        enable_buffer: true,
        buffer_size: 1000,
        debug: true,
        ..Default::default()
    });

    // Set up event handlers
    client.on_chat_message(|msg| {
        println!("Chat: {} - {}", msg.sender.username, msg.content);
    }).await;

    client.on_user_banned(|event| {
        println!("User banned: {}", event.username);
    }).await;

    client.on_subscription(|event| {
        println!("New subscription from: {}", event.username);
    }).await;

    // Connect with timeout
    client.connect_with_timeout("channel_name", std::time::Duration::from_secs(10)).await?;

    // Your application logic here
    loop {
        tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
    }
}
```

### API Client Usage


```rust
use kick_rust::KickApiClient;

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = KickApiClient::new();
    
    // Get channel information
    let channel = client.get_channel("channel_name").await?;
    println!("Channel: {} ({})", channel.user.username, channel.id);
    
    // Get chatroom information
    let chatroom = client.get_chatroom("channel_name").await?;
    println!("Chatroom ID: {}", chatroom.id);
    
    Ok(())
}
```

## Event Types


The library supports various event types:

- `ChatMessage`: Regular chat messages
- `MessageDeleted`: When a message is deleted
- `UserBanned`: When a user is banned
- `UserUnbanned`: When a user is unbanned
- `Subscription`: New subscriptions
- `GiftedSubscriptions`: Gifted subscriptions
- `PinnedMessageCreated`: When a message is pinned
- `StreamHost`: Stream hosting events
- `PollUpdate`: Poll updates
- `PollDelete`: Poll deletions

## Configuration Options


```rust
KickWebSocketOptions {
    debug: false,                    // Enable debug logging
    auto_reconnect: true,            // Auto-reconnect on disconnect
    reconnect_interval: 5000,        // Reconnection interval in ms
    enable_buffer: false,            // Enable message buffer
    buffer_size: 1000,              // Buffer size
    filtered_events: vec![],         // Events to filter out
    custom_user_agent: None,         // Custom user agent
    rotate_user_agent: true,         // Rotate user agent
}
```

## Requirements


- Rust 1.70 or higher
- Tokio runtime

## License


This project is licensed under either of:

- Apache License, Version 2.0, ([LICENSE-APACHE]LICENSE-APACHE or
  https://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT]LICENSE-MIT or
  https://opensource.org/licenses/MIT)

## Contributing


Contributions are welcome! Please feel free to submit a Pull Request.

## Support


If you encounter any issues or have questions, please file an issue on the [GitHub repository](https://github.com/nglmercer/kick-rust).
```

Now let me check if there are license files: