diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..768d6db --- /dev/null +++ b/src/main.rs @@ -0,0 +1,232 @@ +use twitch_irc::login::StaticLoginCredentials; +use twitch_irc::TwitchIRCClient; +use twitch_irc::{ClientConfig, SecureTCPTransport}; +use twitch_irc::message::ServerMessage; +use dotenv::dotenv; +use std::env; + +/* + NOTE: This project is a mess, because I have literally zero idea on how to code + in Rust. Just take the good stuff and fix the messy things lul +*/ + +#[tokio::main] +pub async fn main() { + + // Load all lines from .env + dotenv().ok(); + + // Temp variables for loading .env + let mut fetch_login_name = String::from(""); + let mut fetch_oauth = String::from(""); + + // Read env keys + match env::var("TWITCH_LOGIN_NAME") { + Ok(value) => { + println!("TWITCH_LOGIN_NAME value is: {}", value); + fetch_login_name.push_str(value.as_str()); + } + Err(_) => { + eprintln!("TWITCH_LOGIN_NAME is not set or is an invalid UTF-8 string."); + } + } + match env::var("TWITCH_OAUTH_TOKEN") { + Ok(value) => { + println!("TWITCH_OAUTH_TOKEN value is: {}", value); + fetch_oauth.push_str(value.as_str()); + } + Err(_) => { + eprintln!("TWITCH_OAUTH_TOKEN is not set or is an invalid UTF-8 string"); + } + } + + // default configuration is to join chat as anonymous. + //let config = ClientConfig::default(); + + // Login with oauth + display name + let login_name = fetch_login_name.to_owned(); + let oauth_token = fetch_oauth.to_owned(); + let config = ClientConfig::new_simple( + StaticLoginCredentials::new(login_name, Some(oauth_token)) + ); + + // uuh wtf is this + let (mut incoming_messages, client) = + TwitchIRCClient::::new(config); + + // join a channel + // This function only returns an error if the passed channel login name is malformed, + // so in this simple case where the channel name is hardcoded we can ignore the potential + // error with `unwrap`. + let join_channel = "notohh".to_owned(); + client.join(join_channel.to_owned()).unwrap(); + + let mut allow_all = true.to_owned(); + let mut enable = true.to_owned(); + + //client.say(join_channel.to_owned(), "wokege".to_owned()).await.unwrap(); + + // 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 { + match message { + ServerMessage::Privmsg(msg) => { + //println!("(#{}) {}: {}", msg.channel_login, msg.sender.name, msg.message_text); + + if msg.sender.name == "T3neppa" { + if msg.message_text.contains("!allow") { + if msg.message_text.contains("everyone") { + allow_all = true; + client.say(join_channel.to_owned(), "allow -> everyone".to_owned()).await.unwrap(); + } + if msg.message_text.contains("limited") { + allow_all = false; + client.say(join_channel.to_owned(), "allow -> neppa".to_owned()).await.unwrap(); + } + } + + if msg.message_text.starts_with("!e") { + enable = true; + client.say(join_channel.to_owned(), "pogs freedom".to_owned()).await.unwrap(); + } + if msg.message_text.starts_with("!d") { + enable = false; + client.say(join_channel.to_owned(), "sadg".to_owned()).await.unwrap(); + } + + let words: Vec<&str> = msg.message_text.split_whitespace().collect(); + + for word in words { + println!("{}", word); + } + } + + if msg.sender.name == "T3neppa" || (allow_all && enable) { + println!("(#{}) {}: {}", msg.channel_login,msg.sender.name, msg.message_text); + + match msg.message_text.find("!cmd") { + Some(index) => { + if index == 0 { + if msg.sender.name == "T3neppa" { + client.say(join_channel.to_owned(), "unimplemented".to_owned()).await.unwrap(); + }else{ + let cmd_response = "tuckk {msg.sender.name}"; + client.say(join_channel.to_owned(), cmd_response.to_owned()).await.unwrap(); + } + } + } + None => { + + } + } + + + match msg.message_text.find("uuh") { + Some(index) => { + client.say(join_channel.to_owned(), "uuh".to_owned()).await.unwrap(); + } + None => { + + } + } + + match msg.message_text.find("cum") { + Some(index) => { + client.say(join_channel.to_owned(), "sadE".to_owned()).await.unwrap(); + } + None => { + + } + } + + if msg.message_text.starts_with("test") && msg.channel_login == "notohh" { + client.say(join_channel.to_owned(), "I'll test yourmom tonight".to_owned()).await.unwrap(); + } + + if msg.message_text.to_lowercase().contains("tuck") && msg.message_text.to_lowercase().contains("smug") { + client.say(join_channel.to_owned(), "Bedge".to_owned()).await.unwrap(); + } + + if msg.message_text.contains("hmm") { + client.say(join_channel.to_owned(), "think faster idiot".to_owned()).await.unwrap(); + } + if msg.message_text.contains("cock") { + client.say(join_channel.to_owned(), "YEP".to_owned()).await.unwrap(); + } + + if msg.message_text.contains("actually") { + client.say(join_channel.to_owned(), "lol Nerdge".to_owned()).await.unwrap(); + } + + if msg.message_text.contains("pwd") { + client.say(join_channel.to_owned(), "yourmom".to_owned()).await.unwrap(); + } + + if msg.message_text.contains("thread") { + client.say(join_channel.to_owned(), "what".to_owned()).await.unwrap(); + } + + if msg.message_text.contains("femboy") { + client.say(join_channel.to_owned(), format!("AREYOUAFEMBOY {}", msg.sender.name).to_owned()).await.unwrap(); + } + /* + if msg.message_text.contains("rm") { + if msg.message_text.contains("-") { + client.say("notohh".to_owned(), "oopsie".to_owned()).await.unwrap(); + }else{ + client.say("notohh".to_owned(), "no permission".to_owned()).await.unwrap(); + } + + } + */ + + if let Some(index) = msg.message_text.find("ping") { + if index == 0 { + client.say(join_channel.to_owned(), "kok".to_owned()).await.unwrap(); + } + } + if msg.message_text.contains("KannaLost") { + client.say(join_channel.to_owned(), "KannaLost PETPET".to_owned()).await.unwrap(); + } + + if (msg.message_text.contains("femboy") || msg.message_text.to_lowercase().contains("pog")) && msg.message_text.contains("friday") { + client.say(join_channel.to_owned(), "dinkDonk femboy friday dinkDonk ".to_owned()).await.unwrap(); + } + + if msg.message_text.contains("fuck") && msg.message_text.contains("this") { + client.say(join_channel.to_owned(), "AAA".to_owned()).await.unwrap(); + } + + if msg.message_text.contains("ls") { + if msg.message_text.contains("-") { + client.say(join_channel.to_owned(), "Homework Downloads Pictures Gacchi".to_owned()).await.unwrap(); + }else{ + client.say(join_channel.to_owned(), "Erm".to_owned()).await.unwrap(); + } + } + if msg.message_text.contains("POGCRAZY") { + client.say(join_channel.to_owned(), "POGCRAZY yayy".to_owned()).await.unwrap(); + } + + if msg.message_text.contains("rust") { + client.say(join_channel.to_owned(), "Scared".to_owned()).await.unwrap(); + } + if msg.message_text.starts_with("smug") { + client.say(join_channel.to_owned(), "yo".to_owned()).await.unwrap(); + } + + } + }, + ServerMessage::Whisper(msg) => { + println!("(w) {}: {}", msg.sender.name, msg.message_text); + }, + _ => {} + } + } + }); + + // keep the tokio executor alive. + // If you return instead of waiting the background task will exit. + join_handle.await.unwrap(); +} \ No newline at end of file