diff options
author | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-05-27 23:33:48 +0200 |
---|---|---|
committer | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-05-27 23:33:48 +0200 |
commit | 0041704d72e78754bceffab235f059633acf31c5 (patch) | |
tree | 6b28d334fbcd5178ef9676d2a3b5b151bc8f6598 /src | |
parent | f334d255023c2b02d64c030d11329061657fd5ae (diff) | |
download | texmodbot-0041704d72e78754bceffab235f059633acf31c5.tar.xz |
Add options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs index dc29774..da84133 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,14 +1,46 @@ +use clap::Parser; +use futures_util::future::OptionFuture; use mt_net::{ReceiverExt, SenderExt, ToCltPkt, ToSrvPkt}; +use std::pin::Pin; +use std::time::Duration; +use tokio::time::{sleep, Sleep}; + +#[derive(Parser, Debug)] +#[clap(version, about, long_about = None)] +struct Args { + /// Server address. Format: address:port + #[clap(value_parser)] + address: String, + + /// Quit QUIT_AFTER seconds after authentication + #[clap(short, long, value_parser)] + quit_after: Option<f32>, + + /// Player name + #[clap(short, long, value_parser, default_value = "texmodbot")] + username: String, + + /// Password + #[clap(short, long, value_parser, default_value = "owo")] + password: String, +} #[tokio::main] async fn main() { - let (tx, mut rx, worker) = mt_net::connect(&std::env::args().nth(1).expect("missing argument")) - .await - .unwrap(); + let Args { + address, + quit_after, + username, + password, + } = Args::parse(); - let mut auth = mt_auth::Auth::new(tx.clone(), "texmodbot", "owo", "en_US"); + let (tx, mut rx, worker) = mt_net::connect(&address).await.unwrap(); + + let mut auth = mt_auth::Auth::new(tx.clone(), username, password, "en_US"); let worker = tokio::spawn(worker.run()); + let mut quit_sleep: Option<Pin<Box<Sleep>>> = None; + loop { tokio::select! { pkt = rx.recv() => match pkt { @@ -35,6 +67,14 @@ async fn main() { println!("{texture}"); } }); + + quit_sleep = quit_after.and_then(|x| { + if x >= 0.0 { + Some(Box::pin(sleep(Duration::from_secs_f32(x)))) + } else { + None + } + }); } Kick(reason) => { eprintln!("kicked: {reason}"); @@ -56,6 +96,9 @@ async fn main() { .await .unwrap(); }, + Some(_) = OptionFuture::from(quit_sleep.as_mut()) => { + tx.close(); + } _ = tokio::signal::ctrl_c() => { tx.close(); } |