From 4e580d0304efa47fe4aaaeffbe7a12e84e338782 Mon Sep 17 00:00:00 2001 From: legitnull Date: Sat, 18 Feb 2023 16:55:51 -0700 Subject: [PATCH] fix some bs --- Cargo.toml | 3 +- README.md | 5 +-- src/main.rs | 2 +- src/modules/invade.rs | 8 ++--- src/modules/invaders.rs | 69 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 src/modules/invaders.rs diff --git a/Cargo.toml b/Cargo.toml index d4cdc95..9ee864e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "kmsbot" +name = "g1r" version = "0.1.0" edition = "2021" @@ -14,4 +14,3 @@ regex = "1.7.1" toml = "0.7.2" serde = "1.0.152" tokio-openssl = "0.6.3" -webpki = "0.22.0" \ No newline at end of file diff --git a/README.md b/README.md index 98c991b..76a40bf 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA # TODO - multi server -- add bots - proxy support - ident rand +- bridging - user log - user clone -- console +- console +- colors - scan \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 27f7cfe..ec094b2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -105,7 +105,7 @@ fn main() { for response in invade_command.handle(message) { ssl_stream.write_all(response.as_bytes()).unwrap(); } - } + } } // Check if the message is user and respond via ai diff --git a/src/modules/invade.rs b/src/modules/invade.rs index e048bcf..2b4f797 100644 --- a/src/modules/invade.rs +++ b/src/modules/invade.rs @@ -1,9 +1,7 @@ use crate::modules::Command; -use std::cell::RefCell; use std::io::{Write}; use std::net::TcpStream; -use std::rc::Rc; use openssl::ssl::{SslConnector, SslMethod}; use serde::Deserialize; @@ -24,7 +22,7 @@ impl Command for InvadeCommand { if message.contains("PRIVMSG") && message.contains(":%invade") { let parts: Vec<&str> = message.split_whitespace().collect(); - let num_bots = parts[4].parse::().unwrap_or(1) as usize; + let num_invaders = parts[4].parse::().unwrap_or(1) as usize; let channel = parts[2]; let invadechannel = parts[5]; let scream = parts[6]; @@ -32,7 +30,7 @@ impl Command for InvadeCommand { let config_value = config_str.parse::().unwrap(); let config: Config = config_value.try_into().unwrap(); - for invader in &config.invaders[0..num_bots] { + for invader in &config.invaders[0..num_invaders] { let thread_channel = invadechannel.to_string(); let thread_invader = invader.to_string(); let config_clone = config.clone(); @@ -72,7 +70,7 @@ impl Command for InvadeCommand { }); } - response.push(format!("PRIVMSG {} :INVADING with {} bots..\r\n", channel, num_bots)); + response.push(format!("PRIVMSG {} :INVADING WITH {} INVADERS...\r\n", channel, num_invaders)); } response diff --git a/src/modules/invaders.rs b/src/modules/invaders.rs new file mode 100644 index 0000000..f9186a5 --- /dev/null +++ b/src/modules/invaders.rs @@ -0,0 +1,69 @@ +use crate::modules::Command; +use std::io::{Write}; +use std::net::TcpStream; +use openssl::ssl::{SslConnector, SslMethod}; +use serde::Deserialize; +use toml::Value; +use std::thread; + +#[derive(Clone, Deserialize)] +struct Config { + invaders: Vec, + server: String, + port: u16, +} + +pub struct InvadersCommand; + +impl Command for InvadersCommand { + fn handle(&self, message: &str) -> Vec { + let mut response = vec![]; + + if message.contains("PRIVMSG") && message.contains(":%invaders") { + let parts: Vec<&str> = message.split_whitespace().collect(); + let scream = parts[1]; + + let config_str = std::fs::read_to_string("config.toml").unwrap(); + let config_value = config_str.parse::().unwrap(); + let config: Config = config_value.try_into().unwrap(); + + for invader in &config.invaders { + let thread_channel = parts[2].to_string(); + let thread_invader = invader.to_string(); + let screaming = scream.to_string(); + + std::thread::spawn(move || { + let stream = TcpStream::connect((config.server.as_str(), config.port)).unwrap(); + let connector = SslConnector::builder(SslMethod::tls()).unwrap().build(); + let mut ssl_stream = connector.connect(config.server.as_str(), stream).unwrap(); + + let msg = format!("PRIVMSG {} :{}\r\n", thread_channel, screaming); + ssl_stream.write_all(msg.as_bytes()).unwrap(); + + loop { + let mut buffer = [0; 512]; + match ssl_stream.ssl_read(&mut buffer) { + Ok(0) => break, + Ok(n) => { + let message = String::from_utf8_lossy(&buffer[..n]); + if message.starts_with("PING") { + let response = message.replace("PING", "PONG"); + println!("[%] PONG {}", thread_invader); + ssl_stream.write_all(response.as_bytes()).unwrap(); + } + } + Err(e) => { + eprintln!("Error reading from server: {}", e); + break; + } + } + } + }); + } + + response.push(format!("PRIVMSG {} :Screaming \"{}\" through {} invaders..\r\n", parts[2], scream, config.invaders.len())); + } + + response + } +} \ No newline at end of file