irc-tor
lza_menace 2 years ago
parent 4960a674b0
commit 69fea4ecad

60
Cargo.lock generated

@ -928,9 +928,9 @@ checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394"
[[package]]
name = "futures"
version = "0.3.24"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c"
checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
dependencies = [
"futures-channel",
"futures-core",
@ -943,9 +943,9 @@ dependencies = [
[[package]]
name = "futures-channel"
version = "0.3.24"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050"
checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
dependencies = [
"futures-core",
"futures-sink",
@ -953,15 +953,15 @@ dependencies = [
[[package]]
name = "futures-core"
version = "0.3.24"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf"
checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
[[package]]
name = "futures-executor"
version = "0.3.24"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab"
checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
dependencies = [
"futures-core",
"futures-task",
@ -970,15 +970,15 @@ dependencies = [
[[package]]
name = "futures-io"
version = "0.3.24"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68"
checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
[[package]]
name = "futures-macro"
version = "0.3.24"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
dependencies = [
"proc-macro2",
"quote",
@ -987,21 +987,21 @@ dependencies = [
[[package]]
name = "futures-sink"
version = "0.3.24"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56"
checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
[[package]]
name = "futures-task"
version = "0.3.24"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1"
checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
[[package]]
name = "futures-util"
version = "0.3.24"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
dependencies = [
"futures-channel",
"futures-core",
@ -2466,6 +2466,15 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
[[package]]
name = "signal-hook-registry"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
dependencies = [
"libc",
]
[[package]]
name = "slab"
version = "0.4.7"
@ -2675,11 +2684,25 @@ dependencies = [
"memchr",
"mio",
"num_cpus",
"parking_lot 0.12.1",
"pin-project-lite",
"signal-hook-registry",
"socket2",
"tokio-macros",
"winapi",
]
[[package]]
name = "tokio-macros"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tokio-native-tls"
version = "0.3.0"
@ -3245,6 +3268,7 @@ dependencies = [
"regex",
"reqwest",
"rodio",
"tokio",
]
[[package]]

@ -8,10 +8,10 @@ edition = "2021"
[dependencies]
libtor = { git = "https://github.com/MagicalBitcoin/libtor" }
eframe = { version = "0.19.0", features = ["persistence"] }
# serde = { version = "1", features = ["derive"] }
reqwest = { version = "0.11.12", features = ["blocking", "json", "stream", "socks"] }
tokio = { version = "1", features = ["full"] }
irc = { version = "0.15.0", features = ["proxy"] }
egui = "0.19.0"
rodio = "0.16.0"
regex = "1.6.0"
irc = { version = "0.15.0", features = ["proxy"] }
futures = "0.3.24"

@ -3,6 +3,7 @@ use egui::FontFamily::Proportional;
use egui::FontId;
use egui::TextStyle::*;
use crate::player::Player;
// use crate::irc::IRC;
pub struct App {
pub player: Player,
@ -10,10 +11,7 @@ pub struct App {
pub tor_connected: bool,
pub tor_thread: std::thread::JoinHandle<()>,
pub to_data: String,
pub show_irc: bool,
pub irc_message: String,
pub irc_thread: std::thread::JoinHandle<()>,
pub irc_connected: bool
pub show_irc: bool
}
impl Default for App {
@ -24,10 +22,7 @@ impl Default for App {
tor_thread: std::thread::spawn(move|| {}),
show_irc: false,
to_data: "".to_owned(),
player: Player::default(),
irc_message: "".to_owned(),
irc_thread: std::thread::spawn(move|| {}),
irc_connected: false
player: Player::default()
}
}
}
@ -88,10 +83,11 @@ impl eframe::App for App {
}
}
} else {
if !self.irc_connected {
let _ = crate::irc::start_irc();
println!("starting irc");
}
if ui.button("connect IRC").clicked() {
let _ = std::thread::Builder::new().name("irc_thread".to_string()).spawn(move || async {
//
});
}
ui.heading("IRC");
if self.tor_started {
ui.label("Chat wit da braddahs and sistas");
@ -105,12 +101,13 @@ impl eframe::App for App {
ui.label("connecting".to_owned());
}
});
ui.horizontal(|ui| {
ui.text_edit_singleline(&mut self.irc_message);
if ui.button("|> Send <|").clicked() {
let _r: std::io::Result<()> = crate::clear_tor_log();
}
});
// ui.horizontal(|ui| {
// ui.text_edit_singleline(&mut self.irc.message);
// if ui.button("|> Send <|").clicked() {
// let _ = self.irc.send_message(self.irc.message.clone());
// let _ = self.irc.clear_message();
// }
// });
} else {
ui.label("You should connect to Tor network first brah");
}

@ -1,88 +1,192 @@
extern crate irc;
extern crate futures;
use std::io::Write;
use irc::client::prelude::*;
use futures::prelude::*;
use std::thread;
pub async fn start_irc() -> Result<(), ()> {
let config = Config {
nickname: Some("wowboombox".to_owned()),
server: Some("irc.oftc.net".to_owned()),
channels: vec!["#wownero-music".to_owned(), "#wownero".to_owned()],
proxy_type: Some(ProxyType::Socks5),
proxy_server: Some("127.0.0.1".to_owned()),
proxy_port: Some(19050),
..Default::default()
};
let mut client = Client::from_config(config).await.unwrap();
match client.identify() {
Ok(k) => {
let mut stream = client.stream().unwrap();
let sender = client.sender();
while let Some(message) = stream.next().await.transpose().unwrap() {
match message.command {
Command::PRIVMSG(ref target, ref msg) => {
if msg.contains(client.current_nickname()) {
sender.send_privmsg(target, "Hi!").unwrap();
}
}
_ => (),
}
let mut file: std::fs::File = std::fs::File::create(&crate::IRC_LOG).expect("failed to create file");
file.write(b"somebyte");
// client.send(Command::NICK("example".to_owned())).unwrap();
// client.send(Command::USER("user".to_owned(), "0".to_owned(), "name".to_owned())).unwrap();
pub struct IRC {
pub connecting: bool,
pub connected: bool,
pub thread: thread::JoinHandle<()>,
pub thread_state: Result<Option<bool>, irc::error::Error>,
pub exit_reason: String,
pub message: String,
pub client: Client
}
impl IRC {
pub async fn new() -> Self {
Self {
connecting: false,
connected: false,
thread: thread::spawn(move || {}),
thread_state: Ok(Some(false)),
exit_reason: "havent started yet".to_owned(),
message: "".to_owned(),
client: Client::from_config(Config {
nickname: Some("wowboombox".to_owned()),
server: Some("irc.oftc.net".to_owned()),
channels: vec!["#wownero-music".to_owned(), "#wownero".to_owned()],
proxy_type: Some(ProxyType::Socks5),
proxy_server: Some("127.0.0.1".to_owned()),
proxy_port: Some(19050),
..Default::default()
}).await.unwrap()
}
}
// let mut buf_reader = std::io::BufReader::new(file);
// let mut buf_writer = std::io::BufWriter::new(message);
// let mut contents = message.to_string();
// buf_reader.read_to_string(&mut contents).unwrap();
pub async fn default() -> Self {
Self::new().await
}
pub fn write_log(&self, b: &[u8]) -> () {
let mut file: std::fs::File = std::fs::File::create(&crate::IRC_LOG).expect("failed to create file");
let _ = file.write(b);
let _ = file.flush();
()
}
// file.write_all(buf_reader);
pub async fn identify_server(&self, client: Client) -> Result<(), irc::error::Error> {
return client.identify();
}
pub async fn listen_for_messages(&self, mut client: Client) {
let mut stream = client.stream().unwrap();
let sender = client.sender();
while let Some(message) = stream.next().await.transpose().unwrap() {
match message.command {
Command::PRIVMSG(ref target, ref msg) => {
if msg.contains(client.current_nickname()) {
sender.send_privmsg(target, "yo").unwrap();
}
}
_ => (),
}
Ok(())
},
Err(_e) => Err(())
}
}
// let log_file = std::path::Path::new(crate::IRC_LOG);
// if ! log_file.is_file() {
// let f = std::fs::File::create(log_file);
// let _ = f.unwrap().write(b"connecting");
// }
// let mut file = std::fs::OpenOptions::new()
// .write(true)
// .append(true)
// .open(log_file)
// .unwrap();
// let mut stream = client.stream().unwrap();
// let sender = client.sender();
// while let Some(message) = stream.next().await.transpose().unwrap() {
// match message.command {
// Command::PRIVMSG(ref target, ref msg) => {
// if msg.contains(client.current_nickname()) {
// sender.send_privmsg(target, "Hi!").unwrap();
// }
// pub async fn connect(&mut self) -> String {
// if ! self.connected && ! self.connecting {
// let config = Config {
// nickname: Some("wowboombox".to_owned()),
// server: Some("irc.oftc.net".to_owned()),
// channels: vec!["#wownero-music".to_owned(), "#wownero".to_owned()],
// proxy_type: Some(ProxyType::Socks5),
// proxy_server: Some("127.0.0.1".to_owned()),
// proxy_port: Some(19050),
// ..Default::default()
// };
// self.write_log("connecting".as_bytes());
// let client = Client::from_config(config).await.unwrap();
// let r = client.identify();
// if r.is_err() {
// self.thread_state = Err(r.err().unwrap());
// self.exit_reason = "failed to connect".to_owned();
// self.write_log(b"shitballs, error");
// return "ok there".to_owned()
// }
// _ => (),
// self.thread_state = Ok(Some(true));
// self.write_log(b"fine, no error");
// return "nope".to_owned()
// } else {
// self.write_log(b"couldnt start, already connecting or connected");
// return "nope".to_owned()
// }
// let mut file: std::fs::File = std::fs::File::create(&crate::IRC_LOG).expect("failed to create file");
// file.write(b"somebyte");
// // client.send(Command::NICK("example".to_owned())).unwrap();
// // client.send(Command::USER("user".to_owned(), "0".to_owned(), "name".to_owned())).unwrap();
// }
// // let mut buf_reader = std::io::BufReader::new(file);
// // let mut buf_writer = std::io::BufWriter::new(message);
// // let mut contents = message.to_string();
// // buf_reader.read_to_string(&mut contents).unwrap();
pub async fn send_message(&self, _msg: String) -> bool {
return true
}
// // file.write_all(buf_reader);
// }
pub fn clear_message(&mut self) {
self.message = "".to_owned();
}
}
// pub async fn start_irc() -> Result<(), ()> {
// let config = Config {
// nickname: Some("wowboombox".to_owned()),
// server: Some("irc.oftc.net".to_owned()),
// channels: vec!["#wownero-music".to_owned(), "#wownero".to_owned()],
// proxy_type: Some(ProxyType::Socks5),
// proxy_server: Some("127.0.0.1".to_owned()),
// proxy_port: Some(19050),
// ..Default::default()
// };
// let mut client = Client::from_config(config).await.unwrap();
// match client.identify() {
// Ok(k) => {
// let mut stream = client.stream().unwrap();
// let sender = client.sender();
// while let Some(message) = stream.next().await.transpose().unwrap() {
// match message.command {
// Command::PRIVMSG(ref target, ref msg) => {
// if msg.contains(client.current_nickname()) {
// sender.send_privmsg(target, "Hi!").unwrap();
// }
// }
// _ => (),
// }
// let mut file: std::fs::File = std::fs::File::create(&crate::IRC_LOG).expect("failed to create file");
// file.write(b"somebyte");
// // client.send(Command::NICK("example".to_owned())).unwrap();
// // client.send(Command::USER("user".to_owned(), "0".to_owned(), "name".to_owned())).unwrap();
// // let mut buf_reader = std::io::BufReader::new(file);
// // let mut buf_writer = std::io::BufWriter::new(message);
// // let mut contents = message.to_string();
// // buf_reader.read_to_string(&mut contents).unwrap();
// // file.write_all(buf_reader);
// }
// Ok(())
// },
// Err(_e) => Err(())
// }
// // let log_file = std::path::Path::new(crate::IRC_LOG);
// // if ! log_file.is_file() {
// // let f = std::fs::File::create(log_file);
// // let _ = f.unwrap().write(b"connecting");
// // }
// // let mut file = std::fs::OpenOptions::new()
// // .write(true)
// // .append(true)
// // .open(log_file)
// // .unwrap();
// // let mut stream = client.stream().unwrap();
// // let sender = client.sender();
// // while let Some(message) = stream.next().await.transpose().unwrap() {
// // match message.command {
// // Command::PRIVMSG(ref target, ref msg) => {
// // if msg.contains(client.current_nickname()) {
// // sender.send_privmsg(target, "Hi!").unwrap();
// // }
// // }
// // _ => (),
// // }
// // let mut file: std::fs::File = std::fs::File::create(&crate::IRC_LOG).expect("failed to create file");
// // file.write(b"somebyte");
// // // client.send(Command::NICK("example".to_owned())).unwrap();
// // // client.send(Command::USER("user".to_owned(), "0".to_owned(), "name".to_owned())).unwrap();
// // // let mut buf_reader = std::io::BufReader::new(file);
// // // let mut buf_writer = std::io::BufWriter::new(message);
// // // let mut contents = message.to_string();
// // // buf_reader.read_to_string(&mut contents).unwrap();
// // // file.write_all(buf_reader);
// // }
// Ok(())
}
// // Ok(())
// }

@ -5,7 +5,6 @@
pub use crate::player::Player;
pub use crate::app::App;
// use std::{thread, io, fs, time};
use libtor::{Tor, TorFlag, Error as libtorError, log as libtorLog};
#[allow(unused_imports)]
use rodio::{Decoder, OutputStream, source::Source, Sink};
@ -28,10 +27,9 @@ pub const IRC_LOG: &str = &"irc.log";
pub const IRC_CONFIG: &str = &"config.toml";
fn cleanup() {
let r: std::io::Result<()> = std::fs::remove_file(&RADIO_STREAM);
match r {
_ => ()
}
let _ = std::fs::remove_file(&RADIO_STREAM);
let _ = std::fs::remove_file(&IRC_LOG);
()
}
fn start_tor() -> Result<u8, libtorError> {
@ -62,7 +60,8 @@ fn clear_tor_log() -> std::io::Result<()> {
// return res
// }
fn main() {
#[tokio::main(flavor = "current_thread")]
async fn main() {
let (_stream, stream_handle) = rodio::OutputStream::try_default().unwrap();
let sink: rodio::Sink = rodio::Sink::try_new(&stream_handle).unwrap();
let player: player::Player = player::Player::new(sink, stream_handle);