mod parse;
use device_query::*;
use enigo::*;
use log::*;
use parse::*;
use rand::Rng;
use std::{thread, time};
use structopt::*;
#[derive(StructOpt)]
#[structopt(name = "clicker", about = "A simple desktop automation tool")]
struct Opt {
#[structopt(name = "delay", default_value = "70")]
delay: u64,
#[structopt(name = "click_time", default_value = "5")]
click_time: u64,
#[structopt(
short = "k",
long = "key",
default_value = "F4",
parse(try_from_str = "parse_keycode")
)]
key: Keycode,
#[structopt(
short = "b",
long = "button",
default_value = "Left",
parse(try_from_str = "parse_mousebutton")
)]
button: MouseButton,
#[structopt(short = "r", long = "random", default_value = "5")]
random: u64,
}
fn main() {
env_logger::init();
let opt = Opt::from_args();
let mut enigo = Enigo::new();
let device_state = DeviceState::new();
let mut rng = rand::thread_rng();
loop {
let keys: Vec<Keycode> = device_state.get_keys();
if keys.contains(&opt.key) {
enigo.mouse_down(opt.button);
thread::sleep(time::Duration::from_millis(opt.click_time));
enigo.mouse_up(opt.button);
info!("Clicked mouse button");
}
let sleep_time: u64 = if opt.random > 0 {
opt.delay + rng.gen_range(0, opt.random + 1) - (opt.random / 2)
} else {
opt.delay
};
thread::sleep(time::Duration::from_millis(sleep_time));
}
}