twitch_chat_wrapper/
lib.rs

1mod bot;
2pub mod chat_message;
3
4use bot::Bot;
5pub use chat_message::ChatMessage;
6use eyre::Result;
7use std::sync::mpsc::{Receiver, Sender};
8pub use twitchchat;
9use twitchchat::UserConfig;
10
11pub fn run(
12    receive_for_chat: Receiver<String>,
13    send_incomming_chat_message: Sender<ChatMessage>,
14) -> Result<()> {
15    dotenv::dotenv().ok();
16    let user_config = get_user_config()?;
17    let channels = channels_to_join()?;
18    let bot = Bot;
19
20    // run the bot in the executor
21    smol::run(async move {
22        bot.run(
23            &user_config,
24            &channels,
25            receive_for_chat,
26            send_incomming_chat_message,
27        )
28        .await
29    })
30}
31
32fn get_env_var(key: &str) -> Result<String> {
33    let my_var = std::env::var(key)?;
34    Ok(my_var)
35}
36
37fn channels_to_join() -> Result<Vec<String>> {
38    let channels = get_env_var("TWITCH_CHANNEL")?
39        .split(',')
40        .map(ToString::to_string)
41        .collect();
42    Ok(channels)
43}
44
45fn get_user_config() -> Result<twitchchat::UserConfig> {
46    let name = get_env_var("TWITCH_NAME")?;
47    let token = get_env_var("TWITCH_TOKEN")?;
48
49    let config = UserConfig::builder()
50        .name(name)
51        .token(token)
52        .enable_all_capabilities()
53        .build()?;
54
55    Ok(config)
56}