Compare commits

..

No commits in common. "4d3947c4ef4970d13b17fc9674a6d0e8c5d16c9d" and "c4454fe217644fa36fe09e18de7b95247d65328b" have entirely different histories.

14 changed files with 25 additions and 122 deletions

64
Cargo.lock generated
View File

@ -925,15 +925,6 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "built"
version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b"
dependencies = [
"git2",
]
[[package]] [[package]]
name = "bumpalo" name = "bumpalo"
version = "3.17.0" version = "3.17.0"
@ -967,8 +958,6 @@ version = "1.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af" checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af"
dependencies = [ dependencies = [
"jobserver",
"libc",
"shlex", "shlex",
] ]
@ -1382,7 +1371,6 @@ dependencies = [
"azalea", "azalea",
"bevy_app", "bevy_app",
"bevy_log", "bevy_log",
"built",
"clap", "clap",
"console-subscriber", "console-subscriber",
"futures", "futures",
@ -1612,19 +1600,6 @@ version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]]
name = "git2"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fda788993cc341f69012feba8bf45c0ba4f3291fcc08e214b4d5a7332d88aff"
dependencies = [
"bitflags",
"libc",
"libgit2-sys",
"log",
"url",
]
[[package]] [[package]]
name = "glob" name = "glob"
version = "0.3.2" version = "0.3.2"
@ -2063,15 +2038,6 @@ version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
[[package]]
name = "jobserver"
version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "js-sys" name = "js-sys"
version = "0.3.77" version = "0.3.77"
@ -2097,18 +2063,6 @@ version = "0.2.169"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
[[package]]
name = "libgit2-sys"
version = "0.18.0+1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1a117465e7e1597e8febea8bb0c410f1c7fb93b1e1cddf34363f8390367ffec"
dependencies = [
"cc",
"libc",
"libz-sys",
"pkg-config",
]
[[package]] [[package]]
name = "libloading" name = "libloading"
version = "0.8.6" version = "0.8.6"
@ -2125,18 +2079,6 @@ version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
[[package]]
name = "libz-sys"
version = "1.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa"
dependencies = [
"cc",
"libc",
"pkg-config",
"vcpkg",
]
[[package]] [[package]]
name = "linked-hash-map" name = "linked-hash-map"
version = "0.5.6" version = "0.5.6"
@ -3697,12 +3639,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
[[package]]
name = "vcpkg"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]] [[package]]
name = "version_check" name = "version_check"
version = "0.9.5" version = "0.9.5"

View File

@ -2,7 +2,6 @@
name = "errornowatcher" name = "errornowatcher"
version = "0.2.0" version = "0.2.0"
edition = "2024" edition = "2024"
build = "build.rs"
[profile.dev] [profile.dev]
opt-level = 1 opt-level = 1
@ -15,15 +14,12 @@ codegen-units = 1
lto = true lto = true
strip = true strip = true
[build-dependencies]
built = { version = "0", features = ["git2"] }
[dependencies] [dependencies]
anyhow = "1" anyhow = "1"
azalea = { git = "https://github.com/azalea-rs/azalea.git" } azalea = { git = "https://github.com/azalea-rs/azalea.git" }
bevy_app = "0" bevy_app = "0"
bevy_log = "0" bevy_log = "0"
clap = { version = "4", features = ["derive", "string"] } clap = { version = "4", features = ["derive"] }
console-subscriber = { version = "0", optional = true } console-subscriber = { version = "0", optional = true }
futures = "0" futures = "0"
futures-locks = "0" futures-locks = "0"

View File

@ -1,3 +0,0 @@
fn main() {
built::write_built_file().unwrap();
}

View File

@ -1,10 +1,8 @@
use crate::build_info;
use clap::Parser; use clap::Parser;
use std::{net::SocketAddr, path::PathBuf}; use std::{net::SocketAddr, path::PathBuf};
/// A Minecraft utility bot /// A Minecraft utility bot
#[derive(Parser)] #[derive(Parser)]
#[command(version = build_info::version_formatted())]
pub struct Arguments { pub struct Arguments {
/// Path to main Lua file /// Path to main Lua file
#[arg(short, long)] #[arg(short, long)]

View File

@ -1,11 +0,0 @@
pub mod built {
include!(concat!(env!("OUT_DIR"), "/built.rs"));
}
pub fn version_formatted() -> String {
format!(
"v{} ({})",
env!("CARGO_PKG_VERSION"),
built::GIT_COMMIT_HASH_SHORT.unwrap_or("unknown commit")
)
}

View File

@ -29,7 +29,7 @@ impl CommandSource {
self.state.lua.globals().get::<Function>("ncr_encrypt"), self.state.lua.globals().get::<Function>("ncr_encrypt"),
) && let Ok(encrypted) = encrypt.call::<String>((options, prepend_header(&chunk))) ) && let Ok(encrypted) = encrypt.call::<String>((options, prepend_header(&chunk)))
{ {
chunk = encrypted; chunk = encrypted
} }
self.client.chat( self.client.chat(
&(if self.message.is_whisper() &(if self.message.is_whisper()

View File

@ -36,8 +36,8 @@ pub async fn handle_event(client: Client, event: Event, state: State) -> anyhow:
&& let Ok(trimmed) = trim_header(&decrypted) && let Ok(trimmed) = trim_header(&decrypted)
{ {
ncr_options = Some(options); ncr_options = Some(options);
trimmed.clone_into(&mut content); content = trimmed.to_owned();
info!("decrypted message from {sender}: {content}"); info!("Decrypted message from {sender}: {content}");
} }
if message.is_whisper() && globals.get::<Vec<String>>("Owners")?.contains(&sender) { if message.is_whisper() && globals.get::<Vec<String>>("Owners")?.contains(&sender) {
@ -176,19 +176,12 @@ pub async fn handle_event(client: Client, event: Event, state: State) -> anyhow:
Ok(()) Ok(())
} }
async fn call_listeners<T: Clone + IntoLuaMulti + Send + 'static>( async fn call_listeners<T: Clone + IntoLuaMulti>(state: &State, event_type: &str, data: T) {
state: &State, if let Some(listeners) = state.event_listeners.read().await.get(event_type) {
event_type: &'static str,
data: T,
) {
if let Some(listeners) = state.event_listeners.read().await.get(event_type).cloned() {
for (id, callback) in listeners { for (id, callback) in listeners {
let data = data.clone(); if let Err(error) = callback.call_async::<()>(data.clone()).await {
tokio::spawn(async move {
if let Err(error) = callback.call_async::<()>(data).await {
error!("failed to call lua event listener {id} for {event_type}: {error:?}"); error!("failed to call lua event listener {id} for {event_type}: {error:?}");
} }
});
} }
} }
} }

View File

@ -4,7 +4,7 @@ use azalea::blocks::{
}; };
use mlua::{Function, Lua, Result, Table}; use mlua::{Function, Lua, Result, Table};
pub fn register_globals(lua: &Lua, globals: &Table) -> Result<()> { pub fn register_functions(lua: &Lua, globals: &Table) -> Result<()> {
globals.set( globals.set(
"get_block_from_state", "get_block_from_state",
lua.create_function(get_block_from_state)?, lua.create_function(get_block_from_state)?,

View File

@ -3,7 +3,7 @@ use futures::executor::block_on;
use mlua::{Function, Lua, Result, Table}; use mlua::{Function, Lua, Result, Table};
use std::time::{SystemTime, UNIX_EPOCH}; use std::time::{SystemTime, UNIX_EPOCH};
pub fn register_globals(lua: &Lua, globals: &Table, event_listeners: ListenerMap) -> Result<()> { pub fn register_functions(lua: &Lua, globals: &Table, event_listeners: ListenerMap) -> Result<()> {
let m = event_listeners.clone(); let m = event_listeners.clone();
globals.set( globals.set(
"add_listener", "add_listener",

View File

@ -1,7 +1,7 @@
use log::{debug, error, info, trace, warn}; use log::{debug, error, info, trace, warn};
use mlua::{Lua, Result, Table}; use mlua::{Lua, Result, Table};
pub fn register_globals(lua: &Lua, globals: &Table) -> Result<()> { pub fn register_functions(lua: &Lua, globals: &Table) -> Result<()> {
globals.set( globals.set(
"error", "error",
lua.create_function(|_, message: String| { lua.create_function(|_, message: String| {

View File

@ -9,7 +9,7 @@ pub mod player;
pub mod system; pub mod system;
pub mod vec3; pub mod vec3;
use crate::{ListenerMap, build_info::built}; use crate::ListenerMap;
use mlua::{Lua, Table}; use mlua::{Lua, Table};
use std::{io, time::Duration}; use std::{io, time::Duration};
@ -24,15 +24,11 @@ pub enum Error {
ReadFile(io::Error), ReadFile(io::Error),
} }
pub fn register_globals( pub fn register_functions(
lua: &Lua, lua: &Lua,
globals: &Table, globals: &Table,
event_listeners: ListenerMap, event_listeners: ListenerMap,
) -> mlua::Result<()> { ) -> mlua::Result<()> {
globals.set("CARGO_PKG_VERSION", env!("CARGO_PKG_VERSION"))?;
globals.set("GIT_COMMIT_HASH", built::GIT_COMMIT_HASH)?;
globals.set("GIT_COMMIT_HASH_SHORT", built::GIT_COMMIT_HASH_SHORT)?;
globals.set( globals.set(
"sleep", "sleep",
lua.create_async_function(async |_, duration: u64| { lua.create_async_function(async |_, duration: u64| {
@ -41,11 +37,11 @@ pub fn register_globals(
})?, })?,
)?; )?;
block::register_globals(lua, globals)?; block::register_functions(lua, globals)?;
events::register_globals(lua, globals, event_listeners)?; events::register_functions(lua, globals, event_listeners)?;
logging::register_globals(lua, globals)?; logging::register_functions(lua, globals)?;
nochatreports::register_globals(lua, globals)?; nochatreports::register_functions(lua, globals)?;
system::register_globals(lua, globals) system::register_functions(lua, globals)
} }
pub fn reload(lua: &Lua, sender: Option<String>) -> Result<(), Error> { pub fn reload(lua: &Lua, sender: Option<String>) -> Result<(), Error> {

View File

@ -10,7 +10,7 @@ use ncr::{
utils::{prepend_header, trim_header}, utils::{prepend_header, trim_header},
}; };
pub fn register_globals(lua: &Lua, globals: &Table) -> Result<()> { pub fn register_functions(lua: &Lua, globals: &Table) -> Result<()> {
globals.set( globals.set(
"ncr_aes_key_from_passphrase", "ncr_aes_key_from_passphrase",
lua.create_function(|_, passphrase: Vec<u8>| { lua.create_function(|_, passphrase: Vec<u8>| {

View File

@ -6,7 +6,7 @@ use std::{
thread, thread,
}; };
pub fn register_globals(lua: &Lua, globals: &Table) -> Result<()> { pub fn register_functions(lua: &Lua, globals: &Table) -> Result<()> {
globals.set( globals.set(
"system", "system",
lua.create_function(|_, (command, args): (String, Option<Vec<OsString>>)| { lua.create_function(|_, (command, args): (String, Option<Vec<OsString>>)| {

View File

@ -1,14 +1,12 @@
#![feature(let_chains)] #![feature(let_chains)]
mod arguments; mod arguments;
mod build_info;
mod commands; mod commands;
mod events; mod events;
mod http; mod http;
mod lua; mod lua;
mod particle; mod particle;
use arguments::Arguments;
use azalea::{ use azalea::{
DefaultBotPlugins, DefaultPlugins, brigadier::prelude::CommandDispatcher, prelude::*, DefaultBotPlugins, DefaultPlugins, brigadier::prelude::CommandDispatcher, prelude::*,
}; };
@ -48,14 +46,14 @@ async fn main() -> anyhow::Result<()> {
#[cfg(feature = "console-subscriber")] #[cfg(feature = "console-subscriber")]
console_subscriber::init(); console_subscriber::init();
let args = Arguments::parse(); let args = arguments::Arguments::parse();
let script_path = args.script.unwrap_or(PathBuf::from(DEFAULT_SCRIPT_PATH)); let script_path = args.script.unwrap_or(PathBuf::from(DEFAULT_SCRIPT_PATH));
let event_listeners = Arc::new(RwLock::new(HashMap::new())); let event_listeners = Arc::new(RwLock::new(HashMap::new()));
let lua = unsafe { Lua::unsafe_new() }; let lua = unsafe { Lua::unsafe_new() };
let globals = lua.globals(); let globals = lua.globals();
globals.set("script_path", &*script_path)?; globals.set("script_path", &*script_path)?;
lua::register_globals(&lua, &globals, event_listeners.clone())?; lua::register_functions(&lua, &globals, event_listeners.clone())?;
lua.load( lua.load(
read_to_string(script_path) read_to_string(script_path)
.expect(&(DEFAULT_SCRIPT_PATH.to_owned() + " should be in current directory")), .expect(&(DEFAULT_SCRIPT_PATH.to_owned() + " should be in current directory")),
@ -82,8 +80,8 @@ async fn main() -> anyhow::Result<()> {
OpenOptions::new() OpenOptions::new()
.append(true) .append(true)
.create(true) .create(true)
.open(&log_file) .open(log_file)
.expect(&(log_file + " should be accessible")), .expect("log file should be accessible"),
) )
.boxed() .boxed()
}) })