diff --git a/Cargo.lock b/Cargo.lock index bcb90a7..5c59aa2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,21 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "UwUBot" +version = "0.1.0" +dependencies = [ + "anyhow", + "azalea", + "azalea-viaversion", + "once_cell", + "parking_lot", + "tokio", + "tracing", + "tracing-subscriber", + "win32console", +] + [[package]] name = "addr2line" version = "0.24.2" @@ -1880,21 +1895,6 @@ dependencies = [ "regex-automata 0.1.10", ] -[[package]] -name = "mc_bot" -version = "0.1.0" -dependencies = [ - "anyhow", - "azalea", - "azalea-viaversion", - "once_cell", - "parking_lot", - "tokio", - "tracing", - "tracing-subscriber", - "win32console", -] - [[package]] name = "md-5" version = "0.10.6" diff --git a/Cargo.toml b/Cargo.toml index e3ea132..240875a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "mc_bot" +name = "UwUBot" version = "0.1.0" edition = "2024" diff --git a/src/main.rs b/src/main.rs index acf10b3..9f7e77b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,21 +25,28 @@ pub struct State { #[tokio::main] async fn main() { match WinConsole::set_title("UwUMine | Auto-Farm Bot") { - Ok(_) => println!("Заголовок терминала изменен на: {}", new_title), - Err(e) => eprintln!("Ошибка при изменении заголовка терминала: {}", e), - } + Ok(_) => print!(""), + Err(e) => eprintln!("oshibka {}", e), + }; println!(":: Бот сделан AmokDev"); + println!(":: Удачи в игре!"); + println!(":: Бот использует версию игры 1.18.2,"); + println!(":: это сделано для стабильности!"); + println!(""); let bot_account = get_bot_account().await; - println!(":: Success logged as {}", bot_account.name_or_email); + println!(":: Success logged as {}\n", bot_account.name_or_email); + let owner = get_owner_name().await; + println!(""); if OWNER_NAME.set(owner.clone()).is_err() { eprintln!(":: Ошибка: OWNER_NAME"); } println!(":: Имя владельца установлено: {}", owner); + println!(":: Подключение к серверу..."); ClientBuilder::new() .add_plugins(ViaVersionPlugin::start("1.18.2").await) @@ -53,16 +60,9 @@ async fn handle(bot: Client, event: Event, _state: State) -> anyhow::Result<()> match event { Event::Chat(packet) => { let message = packet.message().to_string(); + let owner_name = OWNER_NAME.get().cloned().unwrap_or_else(|| "unk".to_string()); println!("{}", message); - if message.contains("хочет к тебе!") { - bot.send_command_packet("tpaccept"); - } else if message.contains("[UwU] Телепорт в") { - bot.send_command_packet("tpconfirm"); - } else if message.contains("[UwU] Не хватает лапок!") { - bot.send_chat_packet(&format!("!{message}")); - } - let mut dm = None; if message.starts_with('[') && message.contains("-> Я] ") { dm = Some(( @@ -71,7 +71,20 @@ async fn handle(bot: Client, event: Event, _state: State) -> anyhow::Result<()> )); } + if message.contains("хочет к тебе!") && message.contains(&owner_name) { + bot.send_command_packet("tpaccept"); + } else if message.contains("[UwU] Телепорт в") && message.contains(&owner_name) { + bot.send_command_packet("tpconfirm"); + } else if message.contains("[UwU] Не хватает лапок!") { + bot.send_command_packet(&format!("msg {} {}", owner_name, message)); + } + if let Some((sender, content)) = dm { + + if sender != owner_name { + return Ok(()); + } + let (command, args) = if content.contains(' ') { let mut all_args: Vec<_> = content.split(' ').map(|s| s.to_owned()).collect(); let command = all_args.remove(0); @@ -82,9 +95,9 @@ async fn handle(bot: Client, event: Event, _state: State) -> anyhow::Result<()> info!("Executing command {command:?} sent by {sender:?} with args {args:?}"); if commands::execute(bot.clone(), sender, command, args).await? { - Some(Instant::now()); + Some(Instant::now()); // todo } else { - warn!("pizdec"); + warn!("nope"); } } } diff --git a/src/utils/commands.rs b/src/utils/commands.rs index bf15af6..51c1795 100644 --- a/src/utils/commands.rs +++ b/src/utils/commands.rs @@ -18,12 +18,11 @@ pub async fn execute( command = command.to_lowercase(); match command.as_str() { + "help" => { + send_command(bot, &format!("msg {sender} Доступные комманды: !help - Помощь, !tp - телепорт к Вам, !walk - подойдет к Вам (разрушая блоки), !say - скажет, что Вы прикажете, !stop - завершит работу")); + Ok(true) + } "stop" => { - if true { - send_command(bot, &format!("msg {sender} Sorry, but you need to be specified as an admin to use this command!")); - return Ok(true); - } - info!("Stopping... Bye!"); std::process::exit(0); } @@ -38,16 +37,16 @@ pub async fn execute( y: position.y.floor() as i32, z: position.z.floor() as i32, }); + send_command( + bot.clone(), + &format!("msg {sender} Бегу к тебе!"), + ); // bot.goto_without_mining(goal).await; bot.goto(goal).await; - send_command( - bot, - &format!("msg {sender} Walking to your block position..."), - ); } else { send_command( bot, - &format!("msg {sender} I could not find you in my render distance!"), + &format!("msg {sender} Не могу найти тебя! Возможно ты не в радиусе моей прогрузки :("), ); } Ok(true) @@ -58,9 +57,6 @@ pub async fn execute( Ok(true) } "say" => { - if sender != "AmokDev" { - return Ok(false); - } let command_or_chat = args.join(" "); if command_or_chat.starts_with("/") { info!("Sending command: {command_or_chat}"); @@ -72,7 +68,7 @@ pub async fn execute( Ok(true) } - _ => Ok(false), // Do nothing if unrecognized command + _ => Ok(false), } } diff --git a/src/utils/tools.rs b/src/utils/tools.rs index 5a158d3..b697874 100644 --- a/src/utils/tools.rs +++ b/src/utils/tools.rs @@ -30,9 +30,9 @@ pub async fn get_bot_account() -> BotAccount { io::stdin().read_line(&mut name_or_email).expect("Не удалось прочитать строку"); if name_or_email.contains('@') { - return BotAccount { name_or_email: name_or_email.clone(), account: Account::microsoft(name_or_email.as_str()).await.unwrap() } + return BotAccount { name_or_email: name_or_email.trim().to_string().clone(), account: Account::microsoft(name_or_email.as_str()).await.unwrap() } } else { - return BotAccount { name_or_email: name_or_email.clone(), account: Account::offline(name_or_email.as_str()) } + return BotAccount { name_or_email: name_or_email.trim().to_string().clone(), account: Account::offline(name_or_email.as_str()) } }; } @@ -42,5 +42,5 @@ pub async fn get_owner_name() -> String { let mut owner_name = String::new(); io::stdin().read_line(&mut owner_name).expect("Не удалось прочитать строку"); - return owner_name; + return owner_name.trim().to_string(); }