/twitch-irc-rs

Twitch IRC library for the Rust programming language

Primary LanguageRustMIT LicenseMIT

twitch-irc-rs

Rust CI status Crates.io Docs.rs

My attempt at a Twitch IRC library for the Rust programming language, using the recently stabilized async rust traits/language features.

Example usage (This is the simple_listener example, see examples/simple_listener.rs and run it with cargo run --example simple_listener):

use twitch_irc::login::StaticLoginCredentials;
use twitch_irc::ClientConfig;
use twitch_irc::TCPTransport;
use twitch_irc::TwitchIRCClient;

#[tokio::main]
pub async fn main() {
    // default configuration is to join chat as anonymous.
    let config = ClientConfig::default();
    let (mut incoming_messages, client) =
        TwitchIRCClient::<TCPTransport, StaticLoginCredentials>::new(config);

    // first thing you should do: start consuming incoming messages,
    // otherwise they will back up.
    let join_handle = tokio::spawn(async move {
        while let Some(message) = incoming_messages.recv().await {
            println!("Received message: {:?}", message);
        }
    });

    // join a channel
    client.join("sodapoppin".to_owned());

    // keep the tokio executor alive.
    // If you return instead of waiting the background task will exit.
    join_handle.await.unwrap();
}

Current features:

  • Connection pool, new connections will be made based upon load
    • Will create a new connection if all existing connections have already joined 90 channels (number is configurable)
    • Will create a new connection if all connections are currently busy (if it has recently sent a lot of messages and you risk a long delay from your messages being queued up server-side)
  • Automatic reconnect of failed connections
  • Automatically rejoins channels if connections fail
  • Modern async interface
  • Automatic rate limiting of new connections
  • Supports automatic token refresh for tokens that are not infinitely lived (also supports infinitely lived tokens separately)
  • Optionally exports metrics, using the metrics crate (Compatible with prometheus and many others).

TODO things:

  • Implementation of twitch-imposed rate limits (PRIVMSG, Whisper)