init
This commit is contained in:
parent
c44f23ed2b
commit
ef34099083
5 changed files with 56 additions and 47 deletions
30
Cargo.lock
generated
30
Cargo.lock
generated
|
|
@ -2,6 +2,21 @@
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 4
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "UwUBot"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"azalea",
|
||||||
|
"azalea-viaversion",
|
||||||
|
"once_cell",
|
||||||
|
"parking_lot",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
"tracing-subscriber",
|
||||||
|
"win32console",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "addr2line"
|
name = "addr2line"
|
||||||
version = "0.24.2"
|
version = "0.24.2"
|
||||||
|
|
@ -1880,21 +1895,6 @@ dependencies = [
|
||||||
"regex-automata 0.1.10",
|
"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]]
|
[[package]]
|
||||||
name = "md-5"
|
name = "md-5"
|
||||||
version = "0.10.6"
|
version = "0.10.6"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[package]
|
[package]
|
||||||
name = "mc_bot"
|
name = "UwUBot"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
|
|
|
||||||
41
src/main.rs
41
src/main.rs
|
|
@ -25,21 +25,28 @@ pub struct State {
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
match WinConsole::set_title("UwUMine | Auto-Farm Bot") {
|
match WinConsole::set_title("UwUMine | Auto-Farm Bot") {
|
||||||
Ok(_) => println!("Заголовок терминала изменен на: {}", new_title),
|
Ok(_) => print!(""),
|
||||||
Err(e) => eprintln!("Ошибка при изменении заголовка терминала: {}", e),
|
Err(e) => eprintln!("oshibka {}", e),
|
||||||
}
|
};
|
||||||
|
|
||||||
println!(":: Бот сделан AmokDev");
|
println!(":: Бот сделан AmokDev");
|
||||||
|
println!(":: Удачи в игре!");
|
||||||
|
println!(":: Бот использует версию игры 1.18.2,");
|
||||||
|
println!(":: это сделано для стабильности!");
|
||||||
|
println!("");
|
||||||
|
|
||||||
let bot_account = get_bot_account().await;
|
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;
|
let owner = get_owner_name().await;
|
||||||
|
println!("");
|
||||||
if OWNER_NAME.set(owner.clone()).is_err() {
|
if OWNER_NAME.set(owner.clone()).is_err() {
|
||||||
eprintln!(":: Ошибка: OWNER_NAME");
|
eprintln!(":: Ошибка: OWNER_NAME");
|
||||||
}
|
}
|
||||||
|
|
||||||
println!(":: Имя владельца установлено: {}", owner);
|
println!(":: Имя владельца установлено: {}", owner);
|
||||||
|
println!(":: Подключение к серверу...");
|
||||||
|
|
||||||
ClientBuilder::new()
|
ClientBuilder::new()
|
||||||
.add_plugins(ViaVersionPlugin::start("1.18.2").await)
|
.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 {
|
match event {
|
||||||
Event::Chat(packet) => {
|
Event::Chat(packet) => {
|
||||||
let message = packet.message().to_string();
|
let message = packet.message().to_string();
|
||||||
|
let owner_name = OWNER_NAME.get().cloned().unwrap_or_else(|| "unk".to_string());
|
||||||
println!("{}", message);
|
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;
|
let mut dm = None;
|
||||||
if message.starts_with('[') && message.contains("-> Я] ") {
|
if message.starts_with('[') && message.contains("-> Я] ") {
|
||||||
dm = Some((
|
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 let Some((sender, content)) = dm {
|
||||||
|
|
||||||
|
if sender != owner_name {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
let (command, args) = if content.contains(' ') {
|
let (command, args) = if content.contains(' ') {
|
||||||
let mut all_args: Vec<_> = content.split(' ').map(|s| s.to_owned()).collect();
|
let mut all_args: Vec<_> = content.split(' ').map(|s| s.to_owned()).collect();
|
||||||
let command = all_args.remove(0);
|
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:?}");
|
info!("Executing command {command:?} sent by {sender:?} with args {args:?}");
|
||||||
if commands::execute(bot.clone(), sender, command, args).await? {
|
if commands::execute(bot.clone(), sender, command, args).await? {
|
||||||
Some(Instant::now());
|
Some(Instant::now()); // todo
|
||||||
} else {
|
} else {
|
||||||
warn!("pizdec");
|
warn!("nope");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,12 +18,11 @@ pub async fn execute(
|
||||||
command = command.to_lowercase();
|
command = command.to_lowercase();
|
||||||
|
|
||||||
match command.as_str() {
|
match command.as_str() {
|
||||||
|
"help" => {
|
||||||
|
send_command(bot, &format!("msg {sender} Доступные комманды: !help - Помощь, !tp - телепорт к Вам, !walk - подойдет к Вам (разрушая блоки), !say <text> - скажет, что Вы прикажете, !stop - завершит работу"));
|
||||||
|
Ok(true)
|
||||||
|
}
|
||||||
"stop" => {
|
"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!");
|
info!("Stopping... Bye!");
|
||||||
std::process::exit(0);
|
std::process::exit(0);
|
||||||
}
|
}
|
||||||
|
|
@ -38,16 +37,16 @@ pub async fn execute(
|
||||||
y: position.y.floor() as i32,
|
y: position.y.floor() as i32,
|
||||||
z: position.z.floor() as i32,
|
z: position.z.floor() as i32,
|
||||||
});
|
});
|
||||||
|
send_command(
|
||||||
|
bot.clone(),
|
||||||
|
&format!("msg {sender} Бегу к тебе!"),
|
||||||
|
);
|
||||||
// bot.goto_without_mining(goal).await;
|
// bot.goto_without_mining(goal).await;
|
||||||
bot.goto(goal).await;
|
bot.goto(goal).await;
|
||||||
send_command(
|
|
||||||
bot,
|
|
||||||
&format!("msg {sender} Walking to your block position..."),
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
send_command(
|
send_command(
|
||||||
bot,
|
bot,
|
||||||
&format!("msg {sender} I could not find you in my render distance!"),
|
&format!("msg {sender} Не могу найти тебя! Возможно ты не в радиусе моей прогрузки :("),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Ok(true)
|
Ok(true)
|
||||||
|
|
@ -58,9 +57,6 @@ pub async fn execute(
|
||||||
Ok(true)
|
Ok(true)
|
||||||
}
|
}
|
||||||
"say" => {
|
"say" => {
|
||||||
if sender != "AmokDev" {
|
|
||||||
return Ok(false);
|
|
||||||
}
|
|
||||||
let command_or_chat = args.join(" ");
|
let command_or_chat = args.join(" ");
|
||||||
if command_or_chat.starts_with("/") {
|
if command_or_chat.starts_with("/") {
|
||||||
info!("Sending command: {command_or_chat}");
|
info!("Sending command: {command_or_chat}");
|
||||||
|
|
@ -72,7 +68,7 @@ pub async fn execute(
|
||||||
Ok(true)
|
Ok(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
_ => Ok(false), // Do nothing if unrecognized command
|
_ => Ok(false),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,9 +30,9 @@ pub async fn get_bot_account() -> BotAccount {
|
||||||
io::stdin().read_line(&mut name_or_email).expect("Не удалось прочитать строку");
|
io::stdin().read_line(&mut name_or_email).expect("Не удалось прочитать строку");
|
||||||
|
|
||||||
if name_or_email.contains('@') {
|
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 {
|
} 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();
|
let mut owner_name = String::new();
|
||||||
io::stdin().read_line(&mut owner_name).expect("Не удалось прочитать строку");
|
io::stdin().read_line(&mut owner_name).expect("Не удалось прочитать строку");
|
||||||
return owner_name;
|
return owner_name.trim().to_string();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Reference in a new issue