From 451275682d1441491506179908ecdfe52ad0c537 Mon Sep 17 00:00:00 2001 From: "Wyatt J. Miller" Date: Sat, 1 Aug 2026 20:37:26 -0400 Subject: [PATCH] mod: refactor commands to global commands, restrict from direct messages nix build works too --- .gitignore | 2 + Cargo.lock | 226 ++-------------------------------------------------- Cargo.toml | 1 - flake.nix | 54 ++++++++----- src/main.rs | 17 ++-- 5 files changed, 46 insertions(+), 254 deletions(-) diff --git a/.gitignore b/.gitignore index ea8c4bf..3611256 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ /target +/result +.env diff --git a/Cargo.lock b/Cargo.lock index c7089a4..47051a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -307,16 +307,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation" version = "0.10.1" @@ -506,7 +496,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.5", + "hashbrown", "lock_api", "once_cell", "parking_lot_core 0.9.12", @@ -521,7 +511,7 @@ checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", - "hashbrown 0.14.5", + "hashbrown", "lock_api", "once_cell", "parking_lot_core 0.9.12", @@ -763,12 +753,6 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - [[package]] name = "errno" version = "0.3.14" @@ -865,21 +849,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -1078,37 +1047,12 @@ dependencies = [ "subtle", ] -[[package]] -name = "h2" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - [[package]] name = "hashmap_derive" version = "0.1.0" @@ -1191,7 +1135,6 @@ dependencies = [ "chrono", "dotenvy", "rand 0.8.7", - "reqwest", "serde", "serde_json", "serenity", @@ -1352,7 +1295,6 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2", "http", "http-body", "httparse", @@ -1379,22 +1321,6 @@ dependencies = [ "webpki-roots 1.0.9", ] -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - [[package]] name = "hyper-util" version = "0.1.20" @@ -1413,11 +1339,9 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2 0.6.5", - "system-configuration", "tokio", "tower-service", "tracing", - "windows-registry", ] [[package]] @@ -1553,16 +1477,6 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.1", -] - [[package]] name = "inout" version = "0.1.4" @@ -1986,23 +1900,6 @@ dependencies = [ "getrandom 0.2.17", ] -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe 0.1.6", - "openssl-sys", - "schannel", - "security-framework 2.11.1", - "security-framework-sys", - "tempfile", -] - [[package]] name = "no-std-net" version = "0.6.0" @@ -2186,56 +2083,12 @@ dependencies = [ "tls_codec", ] -[[package]] -name = "openssl" -version = "0.10.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" -dependencies = [ - "bitflags 2.13.1", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - [[package]] name = "openssl-probe" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" -[[package]] -name = "openssl-sys" -version = "0.9.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "opus2" version = "0.4.0" @@ -2820,22 +2673,17 @@ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64", "bytes", - "encoding_rs", "futures-core", "futures-util", - "h2", "http", "http-body", "http-body-util", "hyper", "hyper-rustls", - "hyper-tls", "hyper-util", "js-sys", "log", - "mime", "mime_guess", - "native-tls", "percent-encoding", "pin-project-lite", "quinn", @@ -2846,7 +2694,6 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-native-tls", "tokio-rustls 0.26.4", "tokio-util", "tower", @@ -2983,10 +2830,10 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ - "openssl-probe 0.2.1", + "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.7.0", + "security-framework", ] [[package]] @@ -3120,19 +2967,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.13.1", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - [[package]] name = "security-framework" version = "3.7.0" @@ -3140,7 +2974,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags 2.13.1", - "core-foundation 0.10.1", + "core-foundation", "core-foundation-sys", "libc", "security-framework-sys", @@ -3813,27 +3647,6 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "system-configuration" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" -dependencies = [ - "bitflags 2.13.1", - "core-foundation 0.9.4", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "tagptr" version = "0.2.0" @@ -4006,16 +3819,6 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.25.0" @@ -4369,7 +4172,7 @@ checksum = "a313188364f7e10138257cb288c64e9b0e282510abefc91c796799559fa14762" dependencies = [ "chrono", "dashmap 5.5.3", - "hashbrown 0.14.5", + "hashbrown", "mini-moka", "parking_lot 0.12.5", "secrecy", @@ -4472,12 +4275,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" @@ -4705,17 +4502,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" -dependencies = [ - "windows-link", - "windows-result", - "windows-strings", -] - [[package]] name = "windows-result" version = "0.4.1" diff --git a/Cargo.toml b/Cargo.toml index 94f30cc..c9ea4d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,6 @@ serenity = { version = "0.12.5", features = [ songbird = "0.6" symphonia = { version = "0.5", features = ["mp3"] } tokio = { version = "1.41.0", features = ["macros", "rt-multi-thread"] } -reqwest = { version = "0.12.9", features = ["json", "rustls-tls"] } tracing = "0.1.40" dotenvy = "0.15.7" rand = "0.8.5" diff --git a/flake.nix b/flake.nix index 5143248..4d35839 100644 --- a/flake.nix +++ b/flake.nix @@ -61,34 +61,44 @@ }; }); - packages = forEachSupportedSystem ({ pkgs }: { - default = let - pname = "hildebrand"; - version = "master"; + packages = forEachSupportedSystem ({ pkgs }: let + pname = "hildebrand"; + version = "master"; - src = pkgs.fetchFromGitea { - domain = "scm.wyattjmiller.com"; - owner = "wymiller"; - repo = "hildebrand"; - rev = "${version}"; - sha256 = "sha256-bNIzb57qPzzgwGVTjk2N59P7Rtt0MdyJY12sTAH05/s="; - }; - in pkgs.rustPlatform.buildRustPackage { - inherit pname version src; - cargoLock = { lockFile = "${src}/Cargo.lock"; }; + bot = pkgs.rustPlatform.buildRustPackage { + inherit pname version; + src = self; + cargoLock = { lockFile = ./Cargo.lock; }; + nativeBuildInputs = [pkgs.cmake]; meta = { description = "A Discord trivia buzzer bot"; - mainProgram = "caitsith"; - homepage = "https://scm.wyattjmiller.com/wymiller/caitsith"; + mainProgram = "hildebrand"; + homepage = "https://scm.wyattjmiller.com/wymiller/hildebrand"; maintainers = [ "wymillerlinux" ]; - platforms = [ "x86_64-linux" ]; - }; - - env = { - PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig"; + platforms = supportedSystems; }; }; - }); + in + { + default = bot; + } + // pkgs.lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux { + docker = pkgs.dockerTools.buildLayeredImage { + name = pname; + tag = "latest"; + contents = [bot pkgs.cacert]; + + config = { + Entrypoint = ["${bot}/bin/${pname}"]; + Env = ["SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"]; + Labels = { + "org.opencontainers.image.title" = pname; + "org.opencontainers.image.description" = "A Discord trivia buzzer bot"; + "org.opencontainers.image.source" = "https://scm.wyattjmiller.com/wymiller/hildebrand"; + }; + }; + }; + }); }; } diff --git a/src/main.rs b/src/main.rs index 8e7cece..2696f8b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,9 +11,8 @@ use serenity::async_trait; use serenity::builder::{ CreateInteractionResponse, CreateInteractionResponseMessage, EditInteractionResponse, }; -use serenity::model::application::Interaction; +use serenity::model::application::{Command, Interaction, InteractionContext}; use serenity::model::gateway::Ready; -use serenity::model::id::GuildId; use serenity::prelude::*; use songbird::SerenityInit; use tokio::sync::Mutex; @@ -84,22 +83,18 @@ impl EventHandler for Handler { async fn ready(&self, ctx: Context, ready: Ready) { println!("{} is connected!", ready.user.name); - let guild_id = GuildId::new( - env::var("GUILD_ID") - .expect("Expected GUILD_ID in environment") - .parse() - .expect("GUILD_ID must be an integer"), - ); - let commands = vec![ commands::start::register(), commands::reset::register(), commands::lock::register(), commands::unlock::register(), commands::stop::register(), - ]; + ] + .into_iter() + .map(|command| command.add_context(InteractionContext::Guild)) + .collect(); - if let Err(why) = guild_id.set_commands(&ctx.http, commands).await { + if let Err(why) = Command::set_global_commands(&ctx.http, commands).await { println!("Cannot register slash commands: {why}"); }