From c7fd8a0286b91df869b0da9df33ff618bf8f5373 Mon Sep 17 00:00:00 2001 From: circuitsacul Date: Mon, 20 Jul 2026 22:55:44 -0400 Subject: [PATCH 1/9] some general cleanup --- .cargo/config.toml | 2 + .env.example | 38 +- .gitignore | 3 + Cargo.lock | 1611 ++++++----------- Cargo.toml | 1 - Dockerfile | 2 +- compose.yml | 27 + rust-analyzer.toml | 5 + rust-toolchain.toml | 2 - rustfmt.toml | 12 +- src/cache/cache_struct.rs | 9 +- src/client/bot.rs | 5 +- src/client/config.rs | 9 +- src/client/cooldowns.rs | 3 +- src/client/runner.rs | 3 +- src/core/autostar.rs | 7 +- src/core/embedder/attachment_handle.rs | 3 +- src/core/embedder/builder.rs | 3 +- src/core/embedder/handle.rs | 6 +- src/core/embedder/parser.rs | 3 +- src/core/filters.rs | 3 +- src/core/posroles.rs | 3 +- src/core/premium/expire.rs | 10 +- src/core/premium/patreon.rs | 3 +- src/core/premium/redeem.rs | 3 +- src/core/starboard/handle.rs | 9 +- src/core/starboard/link_events.rs | 3 +- src/core/starboard/msg_status.rs | 3 +- src/core/starboard/reaction_events.rs | 13 +- src/core/starboard/recount.rs | 13 +- src/core/starboard/vote_status.rs | 3 +- src/core/stats.rs | 3 +- src/interactions/autocomplete/autoredeem.rs | 3 +- .../autocomplete/autostar_name.rs | 3 +- .../autocomplete/exclusive_group_name.rs | 3 +- src/interactions/autocomplete/filter_group.rs | 3 +- src/interactions/autocomplete/handle.rs | 3 +- .../autocomplete/override_name.rs | 3 +- .../autocomplete/starboard_name.rs | 3 +- .../commands/chat/autostar/filters/mod.rs | 3 +- .../commands/chat/filters/view.rs | 1 + src/interactions/commands/chat/moststarred.rs | 3 +- .../commands/chat/utils/freeze.rs | 3 +- src/interactions/commands/chat/utils/info.rs | 3 +- .../commands/chat/utils/refresh.rs | 3 +- src/interactions/commands/chat/utils/trash.rs | 3 +- src/interactions/components/handle.rs | 3 +- src/interactions/handle.rs | 3 +- src/main.rs | 14 +- src/owner/handle.rs | 3 +- src/utils/notify.rs | 3 +- src/utils/views/confirm.rs | 3 +- src/utils/views/paginator.rs | 3 +- src/utils/views/select_paginator.rs | 3 +- 54 files changed, 713 insertions(+), 1185 deletions(-) create mode 100644 .cargo/config.toml create mode 100644 compose.yml create mode 100644 rust-analyzer.toml delete mode 100644 rust-toolchain.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 00000000..8046153b --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +rustflags = ["-Wunused-crate-dependencies"] diff --git a/.env.example b/.env.example index 88bb761c..a702755c 100644 --- a/.env.example +++ b/.env.example @@ -1,18 +1,30 @@ -# required +################################################################################################### +# database config +POSTGRES_DB=starboard +POSTGRES_USER=starboard +POSTGRES_PASSWORD=starboard + +################################################################################################### +# build config +RUST_LOG=twilight-http-ratelimiting=debug,info +#DATABASE_URL= + +################################################################################################### +# bot config +DEVELOPMENT=true + DISCORD_TOKEN= -SB_DATABASE_URL=postgresql://host.docker.internal/DB_NAME?user=DB_USER&password=DB_PASSWORD + SHARDS=1 -# true disables notifications -DEVELOPMENT=true -BOT_ID= -# optional -OWNER_IDS=OWNER_ID_1, OWNER_ID_2 +#SB_DATABASE_URL= +SB_MAX_DB_CONNECTIONS=10 -PATREON_TOKEN= -SENTRY_URL= +#OWNER_IDS=ID1,ID2 +BOT_ID= +#MAIN_GUILD= +#ERROR_CHANNEL_ID= +#PATRON_ROLE= +#SUPPORTER_ROLE= -MAIN_GUILD= -ERROR_CHANNEL_ID= -PATRON_ROLE= -SUPPORTER_ROLE= +#PATREON_TOKEN= diff --git a/.gitignore b/.gitignore index 5608610a..c378dcdf 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ target/ # MSVC Windows builds of rustc generate these, which store debugging information *.pdb + +# postgres data dir +.postgres diff --git a/Cargo.lock b/Cargo.lock index fab8a173..e4eb1e20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,9 +46,9 @@ checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" dependencies = [ "alloc-no-stdlib", ] @@ -99,13 +99,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.2", ] [[package]] @@ -125,15 +125,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.15.1" +version = "1.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b5ce75405893cd713f9ab8e297d8e438f624dde7d706108285f7e17a25a180f" +checksum = "00bdb5da18dac48ca2cc7cd4a98e533e8635a58e2361d13a1a4ee3888e0d72f1" dependencies = [ "aws-lc-sys", "zeroize", @@ -141,14 +141,15 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.34.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "179c3777a8b5e70e90ea426114ffc565b2c1a9f82f6c4a0c5a34aa6ef5e781b6" +checksum = "43103168cc76fe62678a375e722fc9cb3a0146159ac5828bc4f0dfd755c2224c" dependencies = [ "cc", "cmake", "dunce", "fs_extra", + "pkg-config", ] [[package]] @@ -174,9 +175,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.1" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bitflags" @@ -186,9 +187,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" dependencies = [ "serde_core", ] @@ -203,29 +204,29 @@ dependencies = [ ] [[package]] -name = "block2" -version = "0.6.2" +name = "brotli-decompressor" +version = "5.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" dependencies = [ - "objc2", + "alloc-no-stdlib", + "alloc-stdlib", ] [[package]] -name = "brotli-decompressor" -version = "5.0.0" +name = "bs58" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", + "tinyvec", ] [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytecount" @@ -241,9 +242,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cached" @@ -256,7 +257,7 @@ dependencies = [ "cached_proc_macro_types", "hashbrown 0.15.5", "once_cell", - "thiserror 2.0.17", + "thiserror 2.0.19", "web-time", ] @@ -269,7 +270,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -280,9 +281,9 @@ checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" [[package]] name = "camino" -version = "1.2.1" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +checksum = "5f2d30e4173c4026932d51d31d6b0613b1fd3014bf3f9f8943d4ba139c437ba0" dependencies = [ "serde_core", ] @@ -311,9 +312,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.49" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" +checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" dependencies = [ "find-msvc-tools", "jobserver", @@ -321,12 +322,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cfg-if" version = "1.0.4" @@ -335,15 +330,26 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "chacha20" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.1", +] [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "js-sys", @@ -355,9 +361,9 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.56" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b042e5d8a74ae91bb0961acd039822472ec99f8ab0948cbf6d1369588f8be586" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" dependencies = [ "cc", ] @@ -412,6 +418,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc" version = "3.4.0" @@ -423,42 +438,42 @@ dependencies = [ [[package]] name = "crc-catalog" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" [[package]] name = "crossbeam-channel" -version = "0.5.15" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-queue" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "803d13fb3b09d88be9f4dbc29062c66b19bf7170867ceb746d2a8689bf6c7a26" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] name = "crypto-common" @@ -482,12 +497,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "darling_core 0.21.3", - "darling_macro 0.21.3", + "darling_core 0.23.0", + "darling_macro 0.23.0", ] [[package]] @@ -501,21 +516,20 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.119", ] [[package]] name = "darling_core" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" dependencies = [ - "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.119", ] [[package]] @@ -526,18 +540,18 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "darling_macro" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ - "darling_core 0.21.3", + "darling_core 0.23.0", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -575,9 +589,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -587,16 +601,6 @@ dependencies = [ "parking_lot_core", ] -[[package]] -name = "debugid" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" -dependencies = [ - "serde", - "uuid", -] - [[package]] name = "der" version = "0.7.10" @@ -610,11 +614,10 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "powerfmt", "serde_core", ] @@ -626,7 +629,7 @@ checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -641,25 +644,15 @@ dependencies = [ "subtle", ] -[[package]] -name = "dispatch2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" -dependencies = [ - "bitflags 2.10.0", - "objc2", -] - [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -688,18 +681,18 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" dependencies = [ "serde", ] [[package]] name = "emojis" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c1c1870b766fc398e5f0526498d09c94b6de15be5fd769a28bbc804fb1b05d" +checksum = "0a4d5d50b0b58df5173d8ff1192b4d1422ceae5d981b30d4b6f8ed1d673a2bc4" dependencies = [ "phf", ] @@ -768,27 +761,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" - -[[package]] -name = "findshlibs" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b9e59cd0f7e0806cca4be089683ecb6434e602038df21fe6bf6711b2f07f64" -dependencies = [ - "cc", - "lazy_static", - "libc", - "winapi", -] +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "floodgate" @@ -839,9 +820,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" dependencies = [ "futures-channel", "futures-core", @@ -854,9 +835,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" dependencies = [ "futures-core", "futures-sink", @@ -864,15 +845,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" dependencies = [ "futures-core", "futures-task", @@ -892,9 +873,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" [[package]] name = "futures-lite" @@ -913,32 +894,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" dependencies = [ "futures-channel", "futures-core", @@ -948,7 +929,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -964,9 +944,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -977,15 +957,15 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasip2", + "rand_core 0.10.1", "wasm-bindgen", ] @@ -1003,9 +983,9 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "h2" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" dependencies = [ "atomic-waker", "bytes", @@ -1013,7 +993,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.12.1", + "indexmap 2.14.0", "slab", "tokio", "tokio-util", @@ -1049,6 +1029,12 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + [[package]] name = "hashlink" version = "0.10.0" @@ -1109,22 +1095,11 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "hostname" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd" -dependencies = [ - "cfg-if", - "libc", - "windows-link", -] - [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -1132,9 +1107,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http", @@ -1142,9 +1117,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" dependencies = [ "bytes", "futures-core", @@ -1159,23 +1134,17 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - [[package]] name = "humantime" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" +checksum = "15cdd26707701c53297e2fa6afb323d55fbc1d0810c3aec078ae3ef0424c3c15" [[package]] name = "hyper" -version = "1.8.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" dependencies = [ "atomic-waker", "bytes", @@ -1187,7 +1156,6 @@ dependencies = [ "httparse", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", "want", @@ -1195,32 +1163,30 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.7" +version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ "http", "hyper", "hyper-util", "rustls", - "rustls-pki-types", "rustls-platform-verifier", "tokio", "tokio-rustls", "tower-service", - "webpki-roots 1.0.4", + "webpki-roots 1.0.9", ] [[package]] name = "hyper-util" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64", "bytes", "futures-channel", - "futures-core", "futures-util", "http", "http-body", @@ -1229,7 +1195,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.1", + "socket2 0.6.5", "tokio", "tower-service", "tracing", @@ -1237,9 +1203,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1261,12 +1227,13 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -1274,9 +1241,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -1287,9 +1254,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1301,15 +1268,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ "icu_collections", "icu_locale_core", @@ -1321,15 +1288,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", @@ -1359,9 +1326,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -1380,12 +1347,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -1412,65 +1379,83 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "iri-string" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" -dependencies = [ - "memchr", - "serde", -] +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jni" -version = "0.21.1" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" dependencies = [ - "cesu8", "cfg-if", "combine", + "jni-macros", "jni-sys", "log", - "thiserror 1.0.69", + "simd_cesu8", + "thiserror 2.0.19", "walkdir", - "windows-sys 0.45.0", + "windows-link", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn 2.0.119", ] [[package]] name = "jni-sys" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.83" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ - "once_cell", + "cfg-if", + "futures-util", "wasm-bindgen", ] @@ -1485,25 +1470,26 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.178" +version = "0.2.187" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "a7743783ea728ef5c31194c6590797eed286449b4a4e87d626d8a51f0a94e732" [[package]] name = "libm" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.1", "libc", - "redox_syscall", + "plain", + "redox_syscall 0.9.0", ] [[package]] @@ -1524,15 +1510,15 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "lock_api" @@ -1545,9 +1531,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "lru-slab" @@ -1585,9 +1571,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "miniz_oxide" @@ -1600,9 +1586,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "wasi", @@ -1645,18 +1631,6 @@ dependencies = [ "libc", ] -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "cfg_aliases", - "libc", -] - [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -1677,16 +1651,16 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand 0.8.5", + "rand 0.8.7", "smallvec", "zeroize", ] [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" @@ -1699,11 +1673,10 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -1728,165 +1701,6 @@ dependencies = [ "libc", ] -[[package]] -name = "objc2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" -dependencies = [ - "objc2-encode", -] - -[[package]] -name = "objc2-cloud-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" -dependencies = [ - "bitflags 2.10.0", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-core-data" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" -dependencies = [ - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-core-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" -dependencies = [ - "bitflags 2.10.0", - "dispatch2", - "objc2", -] - -[[package]] -name = "objc2-core-graphics" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" -dependencies = [ - "bitflags 2.10.0", - "dispatch2", - "objc2", - "objc2-core-foundation", - "objc2-io-surface", -] - -[[package]] -name = "objc2-core-image" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" -dependencies = [ - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-core-location" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" -dependencies = [ - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-core-text" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" -dependencies = [ - "bitflags 2.10.0", - "objc2", - "objc2-core-foundation", - "objc2-core-graphics", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" -dependencies = [ - "bitflags 2.10.0", - "block2", - "libc", - "objc2", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-io-surface" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" -dependencies = [ - "bitflags 2.10.0", - "objc2", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-quartz-core" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" -dependencies = [ - "bitflags 2.10.0", - "objc2", - "objc2-core-foundation", - "objc2-foundation", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" -dependencies = [ - "bitflags 2.10.0", - "block2", - "objc2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-core-image", - "objc2-core-location", - "objc2-core-text", - "objc2-foundation", - "objc2-quartz-core", - "objc2-user-notifications", -] - -[[package]] -name = "objc2-user-notifications" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" -dependencies = [ - "objc2", - "objc2-foundation", -] - [[package]] name = "object" version = "0.37.3" @@ -1898,15 +1712,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "openssl-probe" -version = "0.1.6" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "ordered-float" @@ -1917,22 +1731,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "os_info" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c39b5918402d564846d5aba164c09a66cc88d232179dfd3e3c619a25a268392" -dependencies = [ - "android_system_properties", - "log", - "nix 0.30.1", - "objc2", - "objc2-foundation", - "objc2-ui-kit", - "serde", - "windows-sys 0.61.2", -] - [[package]] name = "parking" version = "2.2.1" @@ -1957,7 +1755,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.18", "smallvec", "windows-link", ] @@ -1997,15 +1795,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkcs1" @@ -2030,9 +1822,15 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "platforms" @@ -2058,9 +1856,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] @@ -2082,9 +1880,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -2100,7 +1898,7 @@ dependencies = [ "derive_more", "glob", "mach2", - "nix 0.24.3", + "nix", "num_cpus", "once_cell", "platforms", @@ -2114,7 +1912,7 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.1", "memchr", "unicase", ] @@ -2137,9 +1935,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" dependencies = [ "bytes", "cfg_aliases", @@ -2148,8 +1946,8 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.1", - "thiserror 2.0.17", + "socket2 0.6.5", + "thiserror 2.0.19", "tokio", "tracing", "web-time", @@ -2157,20 +1955,21 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.13" +version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" dependencies = [ "bytes", - "getrandom 0.3.4", + "getrandom 0.4.3", "lru-slab", - "rand 0.9.2", + "rand 0.10.2", + "rand_pcg", "ring", "rustc-hash", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.17", + "thiserror 2.0.19", "tinyvec", "tracing", "web-time", @@ -2178,52 +1977,53 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.1", + "socket2 0.6.5", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "quote" -version = "1.0.42" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.3.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.8.5" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" dependencies = [ "libc", - "rand_chacha 0.3.1", + "rand_chacha", "rand_core 0.6.4", ] [[package]] name = "rand" -version = "0.9.2" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", ] [[package]] @@ -2236,32 +2036,28 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.3", -] - [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" dependencies = [ - "getrandom 0.3.4", + "rand_core 0.10.1", ] [[package]] @@ -2277,36 +2073,45 @@ dependencies = [ name = "redox_syscall" version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.1", +] + +[[package]] +name = "redox_syscall" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.1", ] [[package]] name = "ref-cast" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.2", ] [[package]] name = "regex" -version = "1.12.2" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -2316,9 +2121,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" dependencies = [ "aho-corasick", "memchr", @@ -2327,21 +2132,19 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "reqwest" -version = "0.12.25" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6eff9328d40131d43bd911d42d79eb6a47312002a4daefc9e37f17e74a7701a" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64", "bytes", - "futures-channel", "futures-core", - "futures-util", "http", "http-body", "http-body-util", @@ -2368,7 +2171,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 1.0.4", + "webpki-roots 1.0.9", ] [[package]] @@ -2379,7 +2182,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -2387,9 +2190,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" dependencies = [ "const-oid", "digest", @@ -2413,15 +2216,15 @@ checksum = "a157657054ffe556d8858504af8a672a054a6e0bd9e8ee531059100c0fa11bb2" [[package]] name = "rustc-demangle" -version = "0.1.26" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" +checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb" [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -2448,22 +2251,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.1", "errno", "libc", - "linux-raw-sys 0.11.0", + "linux-raw-sys 0.12.1", "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.35" +version = "0.23.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" dependencies = [ "aws-lc-rs", "log", @@ -2477,9 +2280,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -2489,9 +2292,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" dependencies = [ "web-time", "zeroize", @@ -2499,9 +2302,9 @@ dependencies = [ [[package]] name = "rustls-platform-verifier" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" dependencies = [ "core-foundation", "core-foundation-sys", @@ -2526,9 +2329,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.8" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "aws-lc-rs", "ring", @@ -2538,15 +2341,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "same-file" @@ -2559,9 +2362,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ "windows-sys 0.61.2", ] @@ -2589,9 +2392,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", "ref-cast", @@ -2607,11 +2410,11 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "3.5.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.1", "core-foundation", "core-foundation-sys", "libc", @@ -2620,9 +2423,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -2630,126 +2433,19 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" dependencies = [ "serde", "serde_core", ] -[[package]] -name = "sentry" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9794f69ad475e76c057e326175d3088509649e3aed98473106b9fe94ba59424" -dependencies = [ - "httpdate", - "reqwest", - "rustls", - "sentry-backtrace", - "sentry-contexts", - "sentry-core", - "sentry-debug-images", - "sentry-panic", - "sentry-tracing", - "tokio", - "ureq", -] - -[[package]] -name = "sentry-backtrace" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e81137ad53b8592bd0935459ad74c0376053c40084aa170451e74eeea8dbc6c3" -dependencies = [ - "backtrace", - "regex", - "sentry-core", -] - -[[package]] -name = "sentry-contexts" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb403c66cc2651a01b9bacda2e7c22cd51f7e8f56f206aa4310147eb3259282" -dependencies = [ - "hostname", - "libc", - "os_info", - "rustc_version", - "sentry-core", - "uname", -] - -[[package]] -name = "sentry-core" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfc409727ae90765ca8ea76fe6c949d6f159a11d02e130b357fa652ee9efcada" -dependencies = [ - "rand 0.9.2", - "sentry-types", - "serde", - "serde_json", - "url", -] - -[[package]] -name = "sentry-debug-images" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a2778a222fd90ebb01027c341a72f8e24b0c604c6126504a4fe34e5500e646" -dependencies = [ - "findshlibs", - "sentry-core", -] - -[[package]] -name = "sentry-panic" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df79f4e1e72b2a8b75a0ebf49e78709ceb9b3f0b451f13adc92a0361b0aaabe" -dependencies = [ - "sentry-backtrace", - "sentry-core", -] - -[[package]] -name = "sentry-tracing" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2046f527fd4b75e0b6ab3bd656c67dce42072f828dc4d03c206d15dca74a93" -dependencies = [ - "bitflags 2.10.0", - "sentry-backtrace", - "sentry-core", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "sentry-types" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7b9b4e4c03a4d3643c18c78b8aa91d2cbee5da047d2fa0ca4bb29bc67e6c55c" -dependencies = [ - "debugid", - "hex", - "rand 0.9.2", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "url", - "uuid", -] - [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -2767,46 +2463,46 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.2", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.2", ] [[package]] @@ -2823,17 +2519,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.16.1" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" dependencies = [ "base64", + "bs58", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.12.1", + "indexmap 2.14.0", "schemars 0.9.0", - "schemars 1.1.0", + "schemars 1.2.1", "serde_core", "serde_json", "serde_with_macros", @@ -2842,24 +2539,24 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.16.1" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" dependencies = [ - "darling 0.21.3", + "darling 0.23.0", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "sha1" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] @@ -2876,7 +2573,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] @@ -2891,16 +2588,17 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" -version = "1.4.7" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -2914,6 +2612,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "simd_cesu8" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" +dependencies = [ + "rustc_version", + "simdutf8", +] + [[package]] name = "simdutf8" version = "0.1.5" @@ -2922,9 +2630,9 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "skeptic" @@ -2943,15 +2651,15 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" dependencies = [ "serde", ] @@ -2975,7 +2683,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2990,19 +2698,19 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ "lock_api", ] @@ -3049,7 +2757,7 @@ dependencies = [ "futures-util", "hashbrown 0.15.5", "hashlink", - "indexmap 2.12.1", + "indexmap 2.14.0", "log", "memchr", "once_cell", @@ -3059,7 +2767,7 @@ dependencies = [ "serde_json", "sha2", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.19", "tokio", "tokio-stream", "tracing", @@ -3077,7 +2785,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn", + "syn 2.0.119", ] [[package]] @@ -3100,7 +2808,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn", + "syn 2.0.119", "tokio", "url", ] @@ -3113,7 +2821,7 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64", - "bitflags 2.10.0", + "bitflags 2.13.1", "byteorder", "bytes", "chrono", @@ -3135,7 +2843,7 @@ dependencies = [ "memchr", "once_cell", "percent-encoding", - "rand 0.8.5", + "rand 0.8.7", "rsa", "serde", "sha1", @@ -3143,7 +2851,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.17", + "thiserror 2.0.19", "tracing", "whoami", ] @@ -3156,7 +2864,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64", - "bitflags 2.10.0", + "bitflags 2.13.1", "byteorder", "chrono", "crc", @@ -3174,14 +2882,14 @@ dependencies = [ "md-5", "memchr", "once_cell", - "rand 0.8.5", + "rand 0.8.7", "serde", "serde_json", "sha2", "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.17", + "thiserror 2.0.19", "tracing", "whoami", ] @@ -3206,7 +2914,7 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", - "thiserror 2.0.17", + "thiserror 2.0.19", "tracing", "url", ] @@ -3224,7 +2932,7 @@ dependencies = [ "async-trait", "cached", "chrono", - "dashmap 6.1.0", + "dashmap 6.2.1", "dotenv", "emojis", "floodgate", @@ -3237,7 +2945,6 @@ dependencies = [ "reqwest", "rust-fuzzy-search", "rustls", - "sentry", "serde", "serde_json", "serde_with", @@ -3283,9 +2990,20 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.111" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3" dependencies = [ "proc-macro2", "quote", @@ -3309,7 +3027,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3320,14 +3038,14 @@ checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" [[package]] name = "tempfile" -version = "3.23.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ - "fastrand 2.3.0", - "getrandom 0.3.4", + "fastrand 2.5.0", + "getrandom 0.4.3", "once_cell", - "rustix 1.1.2", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -3342,11 +3060,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.19", ] [[package]] @@ -3357,18 +3075,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.2", ] [[package]] @@ -3379,39 +3097,38 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] [[package]] name = "time" -version = "0.3.44" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "3e1d5e639ff6bab73cb6885cc7e7b1de96c3f32c68ec55f3952614bec1092244" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -3419,9 +3136,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "zerovec", @@ -3429,9 +3146,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" dependencies = [ "tinyvec_macros", ] @@ -3444,9 +3161,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -3454,20 +3171,20 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.1", + "socket2 0.6.5", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3482,9 +3199,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -3493,9 +3210,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -3507,13 +3224,13 @@ dependencies = [ [[package]] name = "tokio-websockets" -version = "0.13.0" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d469594aed8da8afbb9dfd33a5548f057f74d6c8e3a50b142b04398f91029a" +checksum = "d52efb639344a7c6adb8e62c6f3d2c19c001ff1b79a5041ba1c6ed42e19c6aa5" dependencies = [ "base64", "bytes", - "fastrand 2.3.0", + "fastrand 2.5.0", "futures-core", "futures-sink", "http", @@ -3529,9 +3246,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -3544,20 +3261,20 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.1", "bytes", "futures-util", "http", "http-body", - "iri-string", "pin-project-lite", "tower", "tower-layer", "tower-service", + "url", ] [[package]] @@ -3574,9 +3291,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -3592,14 +3309,14 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "tracing-core" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -3618,9 +3335,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.22" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", "nu-ansi-term", @@ -3636,9 +3353,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" +checksum = "b40688ea6389c8171614b25491f71d4a27946e0c7ce2da1c6de27e25abf1a0ae" [[package]] name = "try-lock" @@ -3652,8 +3369,8 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59267541c31f888c1587da5e7cbab182ae6efd98faedd9ea2e35a4eef43ff204" dependencies = [ - "bitflags 2.10.0", - "fastrand 2.3.0", + "bitflags 2.13.1", + "fastrand 2.5.0", "futures-core", "futures-sink", "serde", @@ -3684,7 +3401,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b868001d7bfb953732b3f1cd92f63cb88cd2ea902f590b1d084c66aea60e48" dependencies = [ "brotli-decompressor", - "fastrand 2.3.0", + "fastrand 2.5.0", "http", "http-body-util", "hyper", @@ -3715,9 +3432,9 @@ dependencies = [ [[package]] name = "twilight-interactions" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf233b2f9508e5efcd19e6e07fecacd3f3081b2a859b69da0597e996751a675d" +checksum = "7aa45cfc23909552f48b91d44b4bb61f10d8753a493c7bd98a6e12abd4814909" dependencies = [ "twilight-interactions-derive", "twilight-model", @@ -3725,13 +3442,13 @@ dependencies = [ [[package]] name = "twilight-interactions-derive" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "627e42ed28f14835a504245f73407a8ec23250fdd4f664d5c55edd0ed9b3f7c6" +checksum = "fd867d65571c9d9e688f14b598ec5323eb6536b94981a6cbfad0fc5fbd26eaa3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3749,7 +3466,7 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bf6bb7b93a7f765d89b3388cc710c0ae16104579e06bb30ea1ee6bd41420a8b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.1", "serde", "serde-value", "serde_repr", @@ -3762,7 +3479,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3c152f9911c2ddc9975c3919a4570e9c841a18193af74f5c8d55ad3bd7b577a" dependencies = [ - "dashmap 6.1.0", + "dashmap 6.2.1", "futures-core", "tokio", "tracing", @@ -3790,18 +3507,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "uname" -version = "0.1.1" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8" -dependencies = [ - "libc", -] +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unescape" @@ -3811,9 +3519,9 @@ checksum = "ccb97dac3243214f8d8507998906ca3e2e0b900bf9bf4870477f125b82e68f6e" [[package]] name = "unicase" -version = "2.8.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-bidi" @@ -3823,9 +3531,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-normalization" @@ -3844,9 +3552,9 @@ checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "untrusted" @@ -3854,39 +3562,11 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" -[[package]] -name = "ureq" -version = "3.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39cb1dbab692d82a977c0392ffac19e188bd9186a9f32806f0aaa859d75585a" -dependencies = [ - "base64", - "log", - "percent-encoding", - "rustls", - "rustls-pki-types", - "ureq-proto", - "utf-8", - "webpki-roots 1.0.4", -] - -[[package]] -name = "ureq-proto" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d81f9efa9df032be5934a46a068815a10a042b494b6a58cb0a1a97bb5467ed6f" -dependencies = [ - "base64", - "http", - "httparse", - "log", -] - [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -3894,12 +3574,6 @@ dependencies = [ "serde", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -3908,13 +3582,12 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.19.0" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "js-sys", - "serde_core", "wasm-bindgen", ] @@ -3967,15 +3640,6 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasip2" -version = "1.0.1+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" -dependencies = [ - "wit-bindgen", -] - [[package]] name = "wasite" version = "0.1.0" @@ -3984,9 +3648,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.106" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -3997,22 +3661,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.56" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ - "cfg-if", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.106" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4020,31 +3681,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.106" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.106" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.83" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -4062,9 +3723,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.4" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3e3b5f5e80bc89f30ce8d0343bf4e5f12341c51f3e26cbeecbc7c85443e85b" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" dependencies = [ "rustls-pki-types", ] @@ -4075,14 +3736,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.4", + "webpki-roots 1.0.9", ] [[package]] name = "webpki-roots" -version = "1.0.4" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" dependencies = [ "rustls-pki-types", ] @@ -4149,7 +3810,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4160,7 +3821,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4187,15 +3848,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -4214,15 +3866,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -4232,21 +3875,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-targets" version = "0.48.5" @@ -4271,36 +3899,13 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", + "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -4313,18 +3918,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -4337,18 +3930,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -4361,30 +3942,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -4397,18 +3960,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -4421,18 +3972,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -4445,18 +3984,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -4469,29 +3996,17 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - -[[package]] -name = "wit-bindgen" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" - [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "yoke" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -4500,68 +4015,68 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zerotrie" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", @@ -4570,9 +4085,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "yoke", "zerofrom", @@ -4581,15 +4096,21 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" + [[package]] name = "zstd-safe" version = "7.2.4" diff --git a/Cargo.toml b/Cargo.toml index d32afd91..f1071ced 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,6 @@ regex = "1.12.2" lazy_static = "1.5.0" humantime = "2.3.0" reqwest = { version = "0.12.25", default-features = false, features = ["json", "rustls-tls"] } -sentry = { version = "0.46.0", default-features = false, features = ["reqwest", "rustls", "backtrace", "contexts", "debug-images", "panic"] } floodgate = "0.5.1" thousands = "0.2.0" snafu = { version = "0.8.9", features = ["backtraces-impl-backtrace-crate"] } diff --git a/Dockerfile b/Dockerfile index 2593e819..999197e5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.91.0-slim-bookworm AS builder +FROM rust:1.97.1-slim-bookworm AS builder WORKDIR /usr/src/starboard # force cargo to update the crates.io index. diff --git a/compose.yml b/compose.yml new file mode 100644 index 00000000..423b0507 --- /dev/null +++ b/compose.yml @@ -0,0 +1,27 @@ +name: starboard + +services: + postgres: + image: docker.io/postgres:18 + restart: unless-stopped + environment: + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + command: > + postgres + -c shared_buffers=4GB + -c work_mem=16MB + -c max_connections=500 + volumes: + - ./.postgres/postgres18:/var/lib/postgresql:Z + + starboard: + build: + context: . + dockerfile: Dockerfile + env_file: .env + environment: + SB_DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} + restart: unless-stopped + depends_on: [postgres] diff --git a/rust-analyzer.toml b/rust-analyzer.toml new file mode 100644 index 00000000..0b4cedb5 --- /dev/null +++ b/rust-analyzer.toml @@ -0,0 +1,5 @@ +[cargo] +extraEnv = { "RUSTUP_TOOLCHAIN" = "nightly", "RUSTFLAGS" = "-Zthreads=16" } + +[check] +extraEnv = { "RUSTUP_TOOLCHAIN" = "nightly", "RUSTFLAGS" = "-Zthreads=16" } diff --git a/rust-toolchain.toml b/rust-toolchain.toml deleted file mode 100644 index 5d56faf9..00000000 --- a/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "nightly" diff --git a/rustfmt.toml b/rustfmt.toml index 83c7d360..44347d01 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,3 +1,11 @@ -unstable_features=true -imports_granularity="Crate" +edition = "2024" +unstable_features = true +max_width = 100 + +normalize_doc_attributes = true + +imports_granularity = "Crate" +group_imports = "StdExternalCrate" + +blank_lines_upper_bound = 1 diff --git a/src/cache/cache_struct.rs b/src/cache/cache_struct.rs index 9b498c78..cf0f9cc8 100644 --- a/src/cache/cache_struct.rs +++ b/src/cache/cache_struct.rs @@ -14,6 +14,10 @@ use twilight_model::{ }, }; +use super::{ + models::{guild::CachedGuild, member::CachedMember, message::CachedMessage, user::CachedUser}, + update::UpdateCache, +}; use crate::{ cache::models::channel::CachedChannel, client::bot::StarboardBot, @@ -26,11 +30,6 @@ use crate::{ }, }; -use super::{ - models::{guild::CachedGuild, member::CachedMember, message::CachedMessage, user::CachedUser}, - update::UpdateCache, -}; - macro_rules! update_cache_events { ($cache: expr, $event: expr, $($matchable_event: path,)*) => { match $event { diff --git a/src/client/bot.rs b/src/client/bot.rs index c1f8a723..396ba4e2 100644 --- a/src/client/bot.rs +++ b/src/client/bot.rs @@ -13,6 +13,7 @@ use twilight_model::{ }; use twilight_standby::Standby; +use super::{cooldowns::Cooldowns, locks::Locks}; use crate::{ cache::Cache, client::config::Config, @@ -20,8 +21,6 @@ use crate::{ utils::into_id::IntoId, }; -use super::{cooldowns::Cooldowns, locks::Locks}; - pub struct StarboardBot { pub http: HttpClient, pub reqwest: reqwest::Client, @@ -116,8 +115,6 @@ impl StarboardBot { } pub async fn handle_error(&self, err: &StarboardError) { - sentry::capture_error(err); - let msg = format!("{err:#?}").trim().to_string(); let msg = if msg.is_empty() { "Some Error".to_string() diff --git a/src/client/config.rs b/src/client/config.rs index 59e45719..c4f883e8 100644 --- a/src/client/config.rs +++ b/src/client/config.rs @@ -1,10 +1,11 @@ -use dotenv::dotenv; use std::env; +use dotenv::dotenv; + +#[derive(Debug)] pub struct Config { pub token: String, pub patreon_token: Option, - pub sentry: Option, pub shards: u32, pub db_url: String, pub db_connections: u32, @@ -26,13 +27,12 @@ impl Config { }; let token = env::var("DISCORD_TOKEN").expect("DISCORD_TOKEN not set"); let patreon_token = env::var("PATREON_TOKEN").ok(); - let sentry = env::var("SENTRY_URL").ok(); let shards = env::var("SHARDS") .unwrap_or_else(|_| "1".to_string()) .parse() .unwrap(); let db_url = env::var("SB_DATABASE_URL").expect("No database url specified."); - let db_connections = env::var("DB_MAX_DB_CONNECTIONS") + let db_connections = env::var("SB_MAX_DB_CONNECTIONS") .map(|v| v.parse().unwrap()) .unwrap_or(10); let error_channel = env::var("ERROR_CHANNEL_ID") @@ -61,7 +61,6 @@ impl Config { Config { token, patreon_token, - sentry, shards, db_url, db_connections, diff --git a/src/client/cooldowns.rs b/src/client/cooldowns.rs index abbf8af1..64b9cb63 100644 --- a/src/client/cooldowns.rs +++ b/src/client/cooldowns.rs @@ -7,9 +7,8 @@ use twilight_model::id::{ marker::{ChannelMarker, GuildMarker, UserMarker}, }; -use crate::constants; - use super::bot::StarboardBot; +use crate::constants; pub struct Cooldowns { cycle_period: Duration, diff --git a/src/client/runner.rs b/src/client/runner.rs index 00185a82..784c60d1 100644 --- a/src/client/runner.rs +++ b/src/client/runner.rs @@ -6,6 +6,7 @@ use tokio::{ }; use twilight_gateway::{EventTypeFlags, Shard, StreamExt as _, create_iterator}; +use super::cooldowns::Cooldowns; use crate::{ client::bot::StarboardBot, core::{ @@ -17,8 +18,6 @@ use crate::{ events::handle_event, }; -use super::cooldowns::Cooldowns; - async fn wait_for_shutdown() { let mut terminate = signal(SignalKind::terminate()).unwrap(); let mut interrupt = signal(SignalKind::interrupt()).unwrap(); diff --git a/src/core/autostar.rs b/src/core/autostar.rs index 669f4467..a354093e 100644 --- a/src/core/autostar.rs +++ b/src/core/autostar.rs @@ -5,6 +5,9 @@ use twilight_model::id::{ marker::{ChannelMarker, GuildMarker, MessageMarker}, }; +use super::{ + filters::FilterEvaluater, has_image::has_image, premium::is_premium::is_guild_premium, +}; use crate::{ cache::{MessageResult, models::message::CachedMessage}, client::bot::StarboardBot, @@ -16,10 +19,6 @@ use crate::{ utils::{id_as_i64::GetI64, notify}, }; -use super::{ - filters::FilterEvaluater, has_image::has_image, premium::is_premium::is_guild_premium, -}; - pub async fn handle( bot: &StarboardBot, guild_id: Id, diff --git a/src/core/embedder/attachment_handle.rs b/src/core/embedder/attachment_handle.rs index 5e310247..7d9ea018 100644 --- a/src/core/embedder/attachment_handle.rs +++ b/src/core/embedder/attachment_handle.rs @@ -6,14 +6,13 @@ use twilight_model::{ }; use twilight_util::builder::embed::{EmbedBuilder, ImageSource}; +use super::parser::AttachmentListItem; use crate::{ client::bot::StarboardBot, constants, errors::{StarboardError, StarboardResult}, }; -use super::parser::AttachmentListItem; - pub struct AttachmentHandle { pub filename: String, pub content_type: Option, diff --git a/src/core/embedder/builder.rs b/src/core/embedder/builder.rs index abf18d8f..c44067b6 100644 --- a/src/core/embedder/builder.rs +++ b/src/core/embedder/builder.rs @@ -18,6 +18,7 @@ use twilight_util::{ snowflake::Snowflake, }; +use super::{AttachmentHandle, Embedder, parser::ParsedMessage}; use crate::{ cache::{MessageResult, models::message::CachedMessage}, constants, @@ -28,8 +29,6 @@ use crate::{ }, }; -use super::{AttachmentHandle, Embedder, parser::ParsedMessage}; - lazy_static! { static ref URL_REGEX: Regex = Regex::new(concat!( r"^https?://(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]", diff --git a/src/core/embedder/handle.rs b/src/core/embedder/handle.rs index 4558773d..c6f297e7 100644 --- a/src/core/embedder/handle.rs +++ b/src/core/embedder/handle.rs @@ -1,5 +1,8 @@ use std::sync::Arc; +use twilight_model::id::{Id, marker::MessageMarker}; + +use super::{attachment_handle::VecAttachments, builder::BuiltStarboardEmbed}; use crate::{ cache::{MessageResult, models::message::CachedMessage}, client::bot::StarboardBot, @@ -11,9 +14,6 @@ use crate::{ errors::StarboardResult, utils::{get_status::get_status, id_as_i64::GetI64, into_id::IntoId}, }; -use twilight_model::id::{Id, marker::MessageMarker}; - -use super::{attachment_handle::VecAttachments, builder::BuiltStarboardEmbed}; pub struct Embedder { pub bot: Arc, diff --git a/src/core/embedder/parser.rs b/src/core/embedder/parser.rs index 7c82a944..70ef7c98 100644 --- a/src/core/embedder/parser.rs +++ b/src/core/embedder/parser.rs @@ -4,14 +4,13 @@ use twilight_model::channel::message::{ }; use twilight_util::builder::embed::ImageSource; -use crate::cache::models::message::CachedMessage; - use super::{ AttachmentHandle, image_only_embed::maybe_get_attachment_handle, imgur::{ImgurResult, modify_imgur_embed}, youtube::modify_yt_embed, }; +use crate::cache::models::message::CachedMessage; pub type StickerNames = String; pub type PrimaryImage = ImageSource; diff --git a/src/core/filters.rs b/src/core/filters.rs index 440aa0eb..0ae6f767 100644 --- a/src/core/filters.rs +++ b/src/core/filters.rs @@ -5,6 +5,7 @@ use twilight_model::id::{ marker::{ChannelMarker, GuildMarker, MessageMarker, UserMarker}, }; +use super::premium::is_premium::is_guild_premium; use crate::{ cache::{MessageResult, models::member::CachedMember}, client::bot::StarboardBot, @@ -13,8 +14,6 @@ use crate::{ utils::{id_as_i64::GetI64, snowflake_age::SnowflakeAge}, }; -use super::premium::is_premium::is_guild_premium; - fn has_all_roles(user_roles: &[i64], required: &[i64]) -> bool { for role in required { if !user_roles.contains(role) { diff --git a/src/core/posroles.rs b/src/core/posroles.rs index 670201d5..6b89d652 100644 --- a/src/core/posroles.rs +++ b/src/core/posroles.rs @@ -6,6 +6,7 @@ use twilight_model::id::{ marker::{GuildMarker, RoleMarker, UserMarker}, }; +use super::premium::is_premium::is_guild_premium; use crate::{ client::bot::StarboardBot, constants, @@ -14,8 +15,6 @@ use crate::{ utils::{id_as_i64::GetI64, into_id::IntoId}, }; -use super::premium::is_premium::is_guild_premium; - pub struct GuildPRUpdateResult { pub removed_roles: i32, pub added_roles: i32, diff --git a/src/core/premium/expire.rs b/src/core/premium/expire.rs index 266a5fea..39c5b741 100644 --- a/src/core/premium/expire.rs +++ b/src/core/premium/expire.rs @@ -1,15 +1,15 @@ -use futures::TryStreamExt; use std::sync::Arc; -use crate::{ - client::bot::StarboardBot, constants, core::premium::locks::refresh_premium_locks, - errors::StarboardResult, utils::into_id::IntoId, -}; +use futures::TryStreamExt; use super::{ is_premium::is_guild_premium, redeem::{RedeemPremiumResult, redeem_premium}, }; +use crate::{ + client::bot::StarboardBot, constants, core::premium::locks::refresh_premium_locks, + errors::StarboardResult, utils::into_id::IntoId, +}; pub async fn loop_expire_premium(bot: Arc) { loop { diff --git a/src/core/premium/patreon.rs b/src/core/premium/patreon.rs index d79ce9ab..39fa0b67 100644 --- a/src/core/premium/patreon.rs +++ b/src/core/premium/patreon.rs @@ -1,5 +1,6 @@ use std::{collections::HashMap, sync::Arc}; +use super::roles::update_supporter_roles; use crate::{ client::bot::StarboardBot, constants, @@ -8,8 +9,6 @@ use crate::{ utils::{into_id::IntoId, notify::notify}, }; -use super::roles::update_supporter_roles; - #[derive(Debug)] struct PatronData { pub patreon_id: String, diff --git a/src/core/premium/redeem.rs b/src/core/premium/redeem.rs index e863a03d..90a9af80 100644 --- a/src/core/premium/redeem.rs +++ b/src/core/premium/redeem.rs @@ -1,5 +1,6 @@ use chrono::{DateTime, Days, Utc}; +use super::{is_premium::is_guild_premium, locks::refresh_premium_locks}; use crate::{ client::bot::StarboardBot, constants, @@ -7,8 +8,6 @@ use crate::{ errors::StarboardResult, }; -use super::{is_premium::is_guild_premium, locks::refresh_premium_locks}; - #[derive(PartialEq, Eq)] pub enum RedeemPremiumResult { Ok, diff --git a/src/core/starboard/handle.rs b/src/core/starboard/handle.rs index c3615f54..0a035b12 100644 --- a/src/core/starboard/handle.rs +++ b/src/core/starboard/handle.rs @@ -3,6 +3,10 @@ use std::{collections::HashMap, sync::Arc, time::Duration}; use cached::Cached; use twilight_model::id::{Id, marker::MessageMarker}; +use super::{ + config::StarboardConfig, + msg_status::{MessageStatus, get_message_status}, +}; use crate::{ cache::MessageResult, client::bot::StarboardBot, @@ -15,11 +19,6 @@ use crate::{ utils::{id_as_i64::GetI64, into_id::IntoId}, }; -use super::{ - config::StarboardConfig, - msg_status::{MessageStatus, get_message_status}, -}; - async fn refresh_exclusive_group( refresh: RefreshMessage, configs: Vec>, diff --git a/src/core/starboard/link_events.rs b/src/core/starboard/link_events.rs index 68c248eb..baa29b5c 100644 --- a/src/core/starboard/link_events.rs +++ b/src/core/starboard/link_events.rs @@ -6,6 +6,7 @@ use twilight_model::{ id::{Id, marker::MessageMarker}, }; +use super::{config::StarboardConfig, handle::RefreshMessage}; use crate::{ client::bot::StarboardBot, core::premium::is_premium::is_guild_premium, @@ -14,8 +15,6 @@ use crate::{ utils::{id_as_i64::GetI64, into_id::IntoId}, }; -use super::{config::StarboardConfig, handle::RefreshMessage}; - pub async fn handle_message_update( bot: Arc, event: Box, diff --git a/src/core/starboard/msg_status.rs b/src/core/starboard/msg_status.rs index 704f3fa6..d917a96f 100644 --- a/src/core/starboard/msg_status.rs +++ b/src/core/starboard/msg_status.rs @@ -1,10 +1,9 @@ +use super::config::StarboardConfig; use crate::{ cache::MessageResult, client::bot::StarboardBot, database::DbMessage, errors::StarboardResult, utils::into_id::IntoId, }; -use super::config::StarboardConfig; - #[derive(Debug)] pub enum MessageStatus { /// true -> full update, false -> partial update diff --git a/src/core/starboard/reaction_events.rs b/src/core/starboard/reaction_events.rs index 83ce75bc..b4a00db1 100644 --- a/src/core/starboard/reaction_events.rs +++ b/src/core/starboard/reaction_events.rs @@ -2,6 +2,12 @@ use std::sync::Arc; use twilight_model::gateway::payload::incoming::{ReactionAdd, ReactionRemove}; +use super::{ + config::StarboardConfig, + handle::RefreshMessage, + message::get_or_create_original, + vote_status::{VoteContext, VoteStatus}, +}; use crate::{ client::bot::StarboardBot, core::{emoji::SimpleEmoji, premium::is_premium::is_guild_premium, stats::refresh_xp}, @@ -10,13 +16,6 @@ use crate::{ utils::{id_as_i64::GetI64, into_id::IntoId}, }; -use super::{ - config::StarboardConfig, - handle::RefreshMessage, - message::get_or_create_original, - vote_status::{VoteContext, VoteStatus}, -}; - pub async fn handle_reaction_add( bot: Arc, event: Box, diff --git a/src/core/starboard/recount.rs b/src/core/starboard/recount.rs index 32cc2687..160096c8 100644 --- a/src/core/starboard/recount.rs +++ b/src/core/starboard/recount.rs @@ -5,6 +5,12 @@ use twilight_model::id::{ marker::{ChannelMarker, GuildMarker, MessageMarker}, }; +use super::{ + config::StarboardConfig, + handle::RefreshMessage, + message::get_or_create_original, + vote_status::{VoteContext, VoteStatus}, +}; use crate::{ client::bot::StarboardBot, core::{emoji::SimpleEmoji, premium::is_premium::is_guild_premium}, @@ -13,13 +19,6 @@ use crate::{ utils::{id_as_i64::GetI64, into_id::IntoId}, }; -use super::{ - config::StarboardConfig, - handle::RefreshMessage, - message::get_or_create_original, - vote_status::{VoteContext, VoteStatus}, -}; - pub enum RecountResult { Cooldown(Duration), AlreadyRecounting, diff --git a/src/core/starboard/vote_status.rs b/src/core/starboard/vote_status.rs index 287649c8..5167649f 100644 --- a/src/core/starboard/vote_status.rs +++ b/src/core/starboard/vote_status.rs @@ -7,6 +7,7 @@ use twilight_model::id::{ marker::{ChannelMarker, MessageMarker, UserMarker}, }; +use super::config::StarboardConfig; use crate::{ client::bot::StarboardBot, core::{ @@ -17,8 +18,6 @@ use crate::{ utils::{into_id::IntoId, snowflake_age::SnowflakeAge}, }; -use super::config::StarboardConfig; - pub struct VoteContext<'a> { pub emoji: &'a SimpleEmoji, pub reactor_id: Id, diff --git a/src/core/stats.rs b/src/core/stats.rs index 018fbe3d..5630cb08 100644 --- a/src/core/stats.rs +++ b/src/core/stats.rs @@ -3,6 +3,7 @@ use twilight_model::id::{ marker::{GuildMarker, UserMarker}, }; +use super::{premium::is_premium::is_guild_premium, xproles::refresh_xpr}; use crate::{ client::bot::StarboardBot, database::{DbMember, Starboard}, @@ -10,8 +11,6 @@ use crate::{ utils::id_as_i64::GetI64, }; -use super::{premium::is_premium::is_guild_premium, xproles::refresh_xpr}; - #[derive(Default)] pub struct MemberStats { pub xp: f32, diff --git a/src/interactions/autocomplete/autoredeem.rs b/src/interactions/autocomplete/autoredeem.rs index 7cab2df2..551b5746 100644 --- a/src/interactions/autocomplete/autoredeem.rs +++ b/src/interactions/autocomplete/autoredeem.rs @@ -1,5 +1,6 @@ use twilight_model::application::command::CommandOptionChoice; +use super::best_matches::best_matches_as_choices; use crate::{ database::DbMember, errors::StarboardResult, @@ -7,8 +8,6 @@ use crate::{ utils::{id_as_i64::GetI64, into_id::IntoId}, }; -use super::best_matches::best_matches_as_choices; - pub async fn autoredeem_autocomplete( ctx: &CommandCtx, focused: &str, diff --git a/src/interactions/autocomplete/autostar_name.rs b/src/interactions/autocomplete/autostar_name.rs index b2893af8..480a7bb1 100644 --- a/src/interactions/autocomplete/autostar_name.rs +++ b/src/interactions/autocomplete/autostar_name.rs @@ -1,12 +1,11 @@ use twilight_model::application::command::CommandOptionChoice; +use super::best_matches::best_matches_as_choices; use crate::{ database::AutoStarChannel, errors::StarboardResult, interactions::context::CommandCtx, utils::id_as_i64::GetI64, }; -use super::best_matches::best_matches_as_choices; - pub async fn autostar_name_autocomplete( ctx: &CommandCtx, focused: &str, diff --git a/src/interactions/autocomplete/exclusive_group_name.rs b/src/interactions/autocomplete/exclusive_group_name.rs index a0fcac70..b1ffd408 100644 --- a/src/interactions/autocomplete/exclusive_group_name.rs +++ b/src/interactions/autocomplete/exclusive_group_name.rs @@ -1,12 +1,11 @@ use twilight_model::application::command::CommandOptionChoice; +use super::best_matches::best_matches_as_choices; use crate::{ database::ExclusiveGroup, errors::StarboardResult, interactions::context::CommandCtx, utils::id_as_i64::GetI64, }; -use super::best_matches::best_matches_as_choices; - pub async fn exclusive_group_name_autocomplete( ctx: &CommandCtx, focused: &str, diff --git a/src/interactions/autocomplete/filter_group.rs b/src/interactions/autocomplete/filter_group.rs index 4e09c1cb..2f6cb195 100644 --- a/src/interactions/autocomplete/filter_group.rs +++ b/src/interactions/autocomplete/filter_group.rs @@ -1,12 +1,11 @@ use twilight_model::application::command::CommandOptionChoice; +use super::best_matches::best_matches_as_choices; use crate::{ database::models::filter_group::FilterGroup, errors::StarboardResult, interactions::context::CommandCtx, utils::id_as_i64::GetI64, }; -use super::best_matches::best_matches_as_choices; - pub async fn filter_group_name_autocomplete( ctx: &CommandCtx, focused: &str, diff --git a/src/interactions/autocomplete/handle.rs b/src/interactions/autocomplete/handle.rs index a917ae83..dc080b9b 100644 --- a/src/interactions/autocomplete/handle.rs +++ b/src/interactions/autocomplete/handle.rs @@ -4,14 +4,13 @@ use twilight_model::{ }; use twilight_util::builder::InteractionResponseDataBuilder; -use crate::{errors::StarboardResult, interactions::context::CommandCtx}; - use super::{ autoredeem::autoredeem_autocomplete, autostar_name::autostar_name_autocomplete, exclusive_group_name::exclusive_group_name_autocomplete, filter_group::filter_group_name_autocomplete, override_name::override_name_autocomplete, starboard_name::starboard_name_autocomplete, }; +use crate::{errors::StarboardResult, interactions::context::CommandCtx}; pub fn get_sub_options(options: &Vec) -> Option<&Vec> { if options.len() != 1 { diff --git a/src/interactions/autocomplete/override_name.rs b/src/interactions/autocomplete/override_name.rs index f02638a8..9e783821 100644 --- a/src/interactions/autocomplete/override_name.rs +++ b/src/interactions/autocomplete/override_name.rs @@ -1,12 +1,11 @@ use twilight_model::application::command::CommandOptionChoice; +use super::best_matches::best_matches_as_choices; use crate::{ database::StarboardOverride, errors::StarboardResult, interactions::context::CommandCtx, utils::id_as_i64::GetI64, }; -use super::best_matches::best_matches_as_choices; - pub async fn override_name_autocomplete( ctx: &CommandCtx, focused: &str, diff --git a/src/interactions/autocomplete/starboard_name.rs b/src/interactions/autocomplete/starboard_name.rs index a029e01c..1a4f3f68 100644 --- a/src/interactions/autocomplete/starboard_name.rs +++ b/src/interactions/autocomplete/starboard_name.rs @@ -1,12 +1,11 @@ use twilight_model::application::command::CommandOptionChoice; +use super::best_matches::best_matches_as_choices; use crate::{ database::Starboard, errors::StarboardResult, interactions::context::CommandCtx, utils::id_as_i64::GetI64, }; -use super::best_matches::best_matches_as_choices; - pub async fn starboard_name_autocomplete( ctx: &CommandCtx, focused: &str, diff --git a/src/interactions/commands/chat/autostar/filters/mod.rs b/src/interactions/commands/chat/autostar/filters/mod.rs index b862605a..d0d8832c 100644 --- a/src/interactions/commands/chat/autostar/filters/mod.rs +++ b/src/interactions/commands/chat/autostar/filters/mod.rs @@ -1,9 +1,10 @@ mod add; mod remove; -use crate::{errors::StarboardResult, interactions::context::CommandCtx}; use twilight_interactions::command::{CommandModel, CreateCommand}; +use crate::{errors::StarboardResult, interactions::context::CommandCtx}; + #[derive(CommandModel, CreateCommand)] #[command( name = "filters", diff --git a/src/interactions/commands/chat/filters/view.rs b/src/interactions/commands/chat/filters/view.rs index 8e90e7b9..995bdb09 100644 --- a/src/interactions/commands/chat/filters/view.rs +++ b/src/interactions/commands/chat/filters/view.rs @@ -1,4 +1,5 @@ use std::time::Duration; + use thousands::Separable; use twilight_interactions::command::{CommandModel, CreateCommand}; use twilight_model::channel::message::Embed; diff --git a/src/interactions/commands/chat/moststarred.rs b/src/interactions/commands/chat/moststarred.rs index 70dc351f..15d649df 100644 --- a/src/interactions/commands/chat/moststarred.rs +++ b/src/interactions/commands/chat/moststarred.rs @@ -13,6 +13,7 @@ use twilight_model::{ user::User, }; +use super::random::{get_config, get_embedder, get_post_query}; use crate::{ core::embedder::{Embedder, builder::BuiltStarboardEmbed}, database::{DbMessage, Starboard, StarboardMessage}, @@ -22,8 +23,6 @@ use crate::{ utils::{id_as_i64::GetI64, views::wait_for::wait_for_component}, }; -use super::random::{get_config, get_embedder, get_post_query}; - #[derive(CommandModel, CreateCommand)] #[command( name = "moststarred", diff --git a/src/interactions/commands/chat/utils/freeze.rs b/src/interactions/commands/chat/utils/freeze.rs index 95f00988..9009cb1b 100644 --- a/src/interactions/commands/chat/utils/freeze.rs +++ b/src/interactions/commands/chat/utils/freeze.rs @@ -1,5 +1,6 @@ use twilight_interactions::command::{CommandModel, CreateCommand}; +use super::INVALID_MESSAGE_ERR; use crate::{ core::{premium::is_premium::is_guild_premium, starboard::handle::RefreshMessage}, database::DbMessage, @@ -9,8 +10,6 @@ use crate::{ utils::{id_as_i64::GetI64, into_id::IntoId, message_link::parse_message_link}, }; -use super::INVALID_MESSAGE_ERR; - #[derive(CommandModel, CreateCommand)] #[command( name = "freeze", diff --git a/src/interactions/commands/chat/utils/info.rs b/src/interactions/commands/chat/utils/info.rs index 97381364..c680d41a 100644 --- a/src/interactions/commands/chat/utils/info.rs +++ b/src/interactions/commands/chat/utils/info.rs @@ -2,6 +2,7 @@ use twilight_interactions::command::{CommandModel, CreateCommand}; use twilight_model::channel::message::MessageFlags; use twilight_util::builder::embed::EmbedFieldBuilder; +use super::INVALID_MESSAGE_ERR; use crate::{ concat_format, core::starboard::config::StarboardConfig, @@ -17,8 +18,6 @@ use crate::{ }, }; -use super::INVALID_MESSAGE_ERR; - #[derive(CommandModel, CreateCommand)] #[command(name = "info", desc = "Get info for a message.")] pub struct Info { diff --git a/src/interactions/commands/chat/utils/refresh.rs b/src/interactions/commands/chat/utils/refresh.rs index 3ec0492d..8d1d0066 100644 --- a/src/interactions/commands/chat/utils/refresh.rs +++ b/src/interactions/commands/chat/utils/refresh.rs @@ -1,5 +1,6 @@ use twilight_interactions::command::{CommandModel, CreateCommand}; +use super::INVALID_MESSAGE_ERR; use crate::{ core::{premium::is_premium::is_guild_premium, starboard::handle::RefreshMessage}, database::DbMessage, @@ -9,8 +10,6 @@ use crate::{ utils::{id_as_i64::GetI64, into_id::IntoId, message_link::parse_message_link}, }; -use super::INVALID_MESSAGE_ERR; - #[derive(CommandModel, CreateCommand)] #[command( name = "refresh", diff --git a/src/interactions/commands/chat/utils/trash.rs b/src/interactions/commands/chat/utils/trash.rs index 3ecc2730..201cc67f 100644 --- a/src/interactions/commands/chat/utils/trash.rs +++ b/src/interactions/commands/chat/utils/trash.rs @@ -1,5 +1,6 @@ use twilight_interactions::command::{CommandModel, CreateCommand}; +use super::INVALID_MESSAGE_ERR; use crate::{ core::{premium::is_premium::is_guild_premium, starboard::handle::RefreshMessage}, database::DbMessage, @@ -9,8 +10,6 @@ use crate::{ utils::{id_as_i64::GetI64, into_id::IntoId, message_link::parse_message_link}, }; -use super::INVALID_MESSAGE_ERR; - #[derive(CommandModel, CreateCommand)] #[command( name = "trash", diff --git a/src/interactions/components/handle.rs b/src/interactions/components/handle.rs index 04ce6238..d7d51748 100644 --- a/src/interactions/components/handle.rs +++ b/src/interactions/components/handle.rs @@ -1,6 +1,5 @@ -use crate::{errors::StarboardResult, interactions::context::ComponentCtx}; - use super::dismiss::handle_dismiss; +use crate::{errors::StarboardResult, interactions::context::ComponentCtx}; pub async fn handle_component(ctx: ComponentCtx) -> StarboardResult<()> { let Some(id) = ctx.data.custom_id.strip_prefix("stateless::") else { diff --git a/src/interactions/handle.rs b/src/interactions/handle.rs index b6d69576..eb31b5f6 100644 --- a/src/interactions/handle.rs +++ b/src/interactions/handle.rs @@ -2,12 +2,11 @@ use std::sync::Arc; use twilight_model::application::interaction::{Interaction, InteractionData, InteractionType}; -use crate::{client::bot::StarboardBot, errors::StarboardResult}; - use super::{ autocomplete::handle::handle_autocomplete, commands::handle::handle_command, components::handle::handle_component, context::Ctx, }; +use crate::{client::bot::StarboardBot, errors::StarboardResult}; pub async fn handle_interaction( interaction: Interaction, diff --git a/src/main.rs b/src/main.rs index e7c64dfa..d7aa19a3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,16 +34,7 @@ async fn main() { init_tracing(); let config = Config::from_env(); - - let _sentry_guard = config.sentry.as_ref().map(|url| { - sentry::init(( - url.to_owned(), - sentry::ClientOptions { - release: sentry::release_name!(), - ..Default::default() - }, - )) - }); + println!("{config:#?}"); let bot = match StarboardBot::new(config).await { Ok(val) => val, @@ -52,10 +43,11 @@ async fn main() { if let Some(bt) = ErrorCompat::backtrace(&why) { eprintln!("{:#?}", &bt); } - sentry::capture_error(&why); return; } }; + tracing::info!("READY"); + run(bot).await; } diff --git a/src/owner/handle.rs b/src/owner/handle.rs index c73d8a1e..d21c3a2f 100644 --- a/src/owner/handle.rs +++ b/src/owner/handle.rs @@ -5,12 +5,11 @@ use twilight_model::id::{ marker::{ChannelMarker, MessageMarker, UserMarker}, }; +use super::commands; use crate::{ cache::models::message::CachedMessage, client::bot::StarboardBot, errors::StarboardResult, }; -use super::commands; - pub async fn handle_message( bot: &StarboardBot, channel_id: Id, diff --git a/src/utils/notify.rs b/src/utils/notify.rs index b7665f30..f2278306 100644 --- a/src/utils/notify.rs +++ b/src/utils/notify.rs @@ -3,9 +3,8 @@ use twilight_model::{ id::{Id, marker::UserMarker}, }; -use crate::{client::bot::StarboardBot, errors::StarboardResult}; - use super::dm; +use crate::{client::bot::StarboardBot, errors::StarboardResult}; pub async fn notify( bot: &StarboardBot, diff --git a/src/utils/views/confirm.rs b/src/utils/views/confirm.rs index 79b014ed..50e4b097 100644 --- a/src/utils/views/confirm.rs +++ b/src/utils/views/confirm.rs @@ -11,14 +11,13 @@ use twilight_model::{ }, }; +use super::wait_for::wait_for_component; use crate::{ client::bot::StarboardBot, errors::StarboardResult, interactions::context::{CommandCtx, ComponentCtx}, }; -use super::wait_for::wait_for_component; - pub fn components(danger: bool) -> Vec { let buttons = vec![ Component::Button(Button { diff --git a/src/utils/views/paginator.rs b/src/utils/views/paginator.rs index 087988a2..c3e11cde 100644 --- a/src/utils/views/paginator.rs +++ b/src/utils/views/paginator.rs @@ -9,13 +9,12 @@ use twilight_model::{ }, }; +use super::wait_for::wait_for_component; use crate::{ errors::StarboardResult, interactions::context::{CommandCtx, ComponentCtx}, }; -use super::wait_for::wait_for_component; - pub fn components(current_page: usize, last_page: usize, done: bool) -> Vec { let buttons = vec![ Component::Button(Button { diff --git a/src/utils/views/select_paginator.rs b/src/utils/views/select_paginator.rs index 68b14f9c..8ba9ae28 100644 --- a/src/utils/views/select_paginator.rs +++ b/src/utils/views/select_paginator.rs @@ -11,6 +11,7 @@ use twilight_model::{ }, }; +use super::wait_for::wait_for_component; use crate::{ client::bot::StarboardBot, errors::StarboardResult, @@ -18,8 +19,6 @@ use crate::{ utils::div_ceil::div_ceil, }; -use super::wait_for::wait_for_component; - const ITEMS_PER_CHUNK: usize = 25; enum AnyContext { From 6153d69ff8e3b0862a76e151110fcc63abc290e6 Mon Sep 17 00:00:00 2001 From: circuitsacul Date: Mon, 20 Jul 2026 23:22:19 -0400 Subject: [PATCH 2/9] clippy & fmt --- rust-analyzer.toml | 4 +- src/cache/cache_struct.rs | 12 +- src/core/autostar.rs | 14 +-- src/core/embedder/attachment_handle.rs | 10 +- src/core/embedder/builder.rs | 24 ++-- src/core/embedder/gifv.rs | 4 +- src/core/embedder/handle.rs | 45 +++----- src/core/embedder/image_only_embed.rs | 2 +- src/core/embedder/imgur.rs | 38 +++---- src/core/embedder/parser.rs | 54 ++++----- src/core/filters.rs | 107 +++++++++--------- src/core/has_image.rs | 8 +- src/core/premium/redeem.rs | 8 +- src/core/premium/roles.rs | 4 +- src/core/starboard/handle.rs | 2 +- src/core/starboard/msg_status.rs | 42 ++++--- src/database/models/autostar_channel.rs | 8 +- src/database/models/starboard.rs | 2 - src/database/validation/mentions.rs | 2 +- src/database/validation/name.rs | 2 +- src/database/validation/starboard_settings.rs | 16 +-- src/database/validation/time_delta.rs | 13 ++- src/interactions/autocomplete/autoredeem.rs | 2 +- src/interactions/autocomplete/handle.rs | 2 +- .../commands/chat/overrides/edit/behavior.rs | 8 +- .../commands/chat/starboard/view.rs | 6 +- src/interactions/commands/format_settings.rs | 8 +- src/main.rs | 4 +- src/owner/commands/sql.rs | 2 +- src/utils/views/select_paginator.rs | 4 +- src/utils/views/wait_for.rs | 2 +- 31 files changed, 222 insertions(+), 237 deletions(-) diff --git a/rust-analyzer.toml b/rust-analyzer.toml index 0b4cedb5..4b15fc64 100644 --- a/rust-analyzer.toml +++ b/rust-analyzer.toml @@ -1,5 +1,5 @@ [cargo] -extraEnv = { "RUSTUP_TOOLCHAIN" = "nightly", "RUSTFLAGS" = "-Zthreads=16" } +extraEnv = { "RUSTUP_TOOLCHAIN" = "nightly-2026-05-03", "RUSTFLAGS" = "-Zthreads=16" } [check] -extraEnv = { "RUSTUP_TOOLCHAIN" = "nightly", "RUSTFLAGS" = "-Zthreads=16" } +extraEnv = { "RUSTUP_TOOLCHAIN" = "nightly-2026-05-03", "RUSTFLAGS" = "-Zthreads=16" } diff --git a/src/cache/cache_struct.rs b/src/cache/cache_struct.rs index cf0f9cc8..5ad64d0c 100644 --- a/src/cache/cache_struct.rs +++ b/src/cache/cache_struct.rs @@ -161,7 +161,7 @@ impl Cache { self.guilds.with(&guild_id, |_, guild| { guild .as_ref() - .map_or(false, |guild| guild.emojis.contains_key(&emoji_id)) + .is_some_and(|guild| guild.emojis.contains_key(&emoji_id)) }) } @@ -470,7 +470,7 @@ impl Cache { Ok(self.guilds.with(&guild_id, |_, guild| { guild .as_ref() - .map_or(false, |guild| guild.channels.contains_key(&parent_id)) + .is_some_and(|guild| guild.channels.contains_key(&parent_id)) })) } @@ -501,10 +501,10 @@ impl Cache { .map_or(channel_id, |&parent_id| parent_id); // check the cached nsfw/sfw channel list - if let Some(channel) = guild.channels.get(&channel_id) { - if let Some(nsfw) = channel.is_nsfw { - return CachedResult::Cached(nsfw); - } + if let Some(channel) = guild.channels.get(&channel_id) + && let Some(nsfw) = channel.is_nsfw + { + return CachedResult::Cached(nsfw); } CachedResult::NotCached(channel_id) diff --git a/src/core/autostar.rs b/src/core/autostar.rs index a354093e..46de1993 100644 --- a/src/core/autostar.rs +++ b/src/core/autostar.rs @@ -90,7 +90,7 @@ pub async fn handle( .cache .fog_user(bot, message.author_id) .await? - .map_or(false, |u| !u.is_bot); + .is_some_and(|u| !u.is_bot); if send { let to_send = { format!( @@ -139,12 +139,12 @@ async fn get_status( asc.min_chars )); } - if let Some(max_chars) = asc.max_chars { - if event.content.len() > max_chars as usize { - invalid.push(format!( - "- Your message cannot be longer than {max_chars} characters.", - )); - } + if let Some(max_chars) = asc.max_chars + && event.content.len() > max_chars as usize + { + invalid.push(format!( + "- Your message cannot be longer than {max_chars} characters.", + )); } if asc.require_image && !has_image(&event.embeds, &event.attachments) { tokio::time::sleep(Duration::from_secs(3)).await; diff --git a/src/core/embedder/attachment_handle.rs b/src/core/embedder/attachment_handle.rs index 7d9ea018..e652a204 100644 --- a/src/core/embedder/attachment_handle.rs +++ b/src/core/embedder/attachment_handle.rs @@ -63,7 +63,7 @@ impl AttachmentHandle { let content_type = match attachment.content_type.clone() { Some(ct) => Some(ct), None => { - let suffix = attachment.filename.split('.').last(); + let suffix = attachment.filename.split('.').next_back(); suffix.and_then(|suffix| match suffix { "png" | "jpg" | "jpeg" | "gif" | "gifv" => Some(format!("image/{suffix}")), _ => None, @@ -100,10 +100,10 @@ impl AttachmentHandle { return None; } - if let Some(ct) = &self.content_type { - if ct.starts_with("image") { - return Some(ImageSource::url(&self.url).unwrap()); - } + if let Some(ct) = &self.content_type + && ct.starts_with("image") + { + return Some(ImageSource::url(&self.url).unwrap()); } None diff --git a/src/core/embedder/builder.rs b/src/core/embedder/builder.rs index c44067b6..5258d42f 100644 --- a/src/core/embedder/builder.rs +++ b/src/core/embedder/builder.rs @@ -59,18 +59,18 @@ impl BuiltStarboardEmbed { force_partial: bool, watermark: bool, ) -> StarboardResult { - if let MessageResult::Ok(orig) = &handle.orig_message { - if !force_partial { - let parsed = ParsedMessage::parse(orig); - - let built = Self::Full(FullBuiltStarboardEmbed { - top_content: Self::build_top_content(handle), - embeds: Self::build_embeds(handle, orig, &parsed, watermark).await?, - upload_attachments: parsed.upload_attachments, - components: Self::build_components(handle), - }); - return Ok(built); - } + if let MessageResult::Ok(orig) = &handle.orig_message + && !force_partial + { + let parsed = ParsedMessage::parse(orig); + + let built = Self::Full(FullBuiltStarboardEmbed { + top_content: Self::build_top_content(handle), + embeds: Self::build_embeds(handle, orig, &parsed, watermark).await?, + upload_attachments: parsed.upload_attachments, + components: Self::build_components(handle), + }); + return Ok(built); } let built = Self::Partial(PartialBuiltStarboardEmbed { diff --git a/src/core/embedder/gifv.rs b/src/core/embedder/gifv.rs index 4e96339d..c0f136bb 100644 --- a/src/core/embedder/gifv.rs +++ b/src/core/embedder/gifv.rs @@ -17,7 +17,7 @@ pub fn get_gif_url(url: &str, provider: &str) -> Option { match provider { "Tenor" => { let caps: Vec<_> = TENOR.captures_iter(url).collect(); - let groups = caps.get(0)?; + let groups = caps.first()?; let gif_id = &groups[1]; let gif_id = gif_id[0..gif_id.len() - 1].to_string() + "C"; @@ -27,7 +27,7 @@ pub fn get_gif_url(url: &str, provider: &str) -> Option { "Giphy" => { let url = url.split('?').next().unwrap(); let caps: Vec<_> = GIPHY.captures_iter(url).collect(); - let groups = caps.get(0)?; + let groups = caps.first()?; let gif_id = &groups[1]; let name = &groups[2]; diff --git a/src/core/embedder/handle.rs b/src/core/embedder/handle.rs index c6f297e7..0ee34c4d 100644 --- a/src/core/embedder/handle.rs +++ b/src/core/embedder/handle.rs @@ -285,36 +285,27 @@ impl Embedder { MessageResult::Missing => return Ok(true), }; - if let Some(wh_id) = self.config.starboard.webhook_id { - if wh_id == msg.author_id.get_i64() { - if let Some(wh) = - get_valid_webhook(bot, &self.config.starboard, false, true).await? - { - let parent = bot - .cache - .fog_parent_channel_id( - bot, - self.config.starboard.guild_id.into_id(), - sb_channel_id, - ) - .await? - .unwrap(); + if let Some(wh_id) = self.config.starboard.webhook_id + && wh_id == msg.author_id.get_i64() + && let Some(wh) = get_valid_webhook(bot, &self.config.starboard, false, true).await? + { + let parent = bot + .cache + .fog_parent_channel_id(bot, self.config.starboard.guild_id.into_id(), sb_channel_id) + .await? + .unwrap(); - let mut ud = bot.http.delete_webhook_message( - wh.id, - wh.token.as_ref().unwrap(), - message_id, - ); + let mut ud = + bot.http + .delete_webhook_message(wh.id, wh.token.as_ref().unwrap(), message_id); - if parent != sb_channel_id || is_forum { - ud = ud.thread_id(real_channel_id); - } + if parent != sb_channel_id || is_forum { + ud = ud.thread_id(real_channel_id); + } - let ret = ud.await; - if ret.is_ok() { - return Ok(true); - } - } + let ret = ud.await; + if ret.is_ok() { + return Ok(true); } } diff --git a/src/core/embedder/image_only_embed.rs b/src/core/embedder/image_only_embed.rs index dca9ec2a..aa5c1230 100644 --- a/src/core/embedder/image_only_embed.rs +++ b/src/core/embedder/image_only_embed.rs @@ -53,7 +53,7 @@ pub fn maybe_get_attachment_handle(embed: &Embed) -> Option { }; let name = { - let name = url.split('/').last(); + let name = url.split('/').next_back(); match name { Some(name) => name.to_string(), None => "attachment".to_string(), diff --git a/src/core/embedder/imgur.rs b/src/core/embedder/imgur.rs index 89ae27e3..b7403a12 100644 --- a/src/core/embedder/imgur.rs +++ b/src/core/embedder/imgur.rs @@ -9,27 +9,27 @@ pub enum ImgurResult { } pub fn modify_imgur_embed(mut embed: Embed) -> ImgurResult { - if let Some(video) = &embed.video { - if let Some(proxy) = &video.proxy_url { - let ext = proxy.split('.').last().unwrap_or("mp4"); - return ImgurResult::Video(AttachmentHandle { - filename: format!("imgur_video.{ext}"), - content_type: Some("video".to_string()), - url: proxy.to_owned(), - }); - } + if let Some(video) = &embed.video + && let Some(proxy) = &video.proxy_url + { + let ext = proxy.split('.').next_back().unwrap_or("mp4"); + return ImgurResult::Video(AttachmentHandle { + filename: format!("imgur_video.{ext}"), + content_type: Some("video".to_string()), + url: proxy.to_owned(), + }); } let thumb = std::mem::take(&mut embed.thumbnail); - if let Some(thumb) = thumb { - if let Some(url) = modify_imgur_url(&thumb.url) { - embed.image = Some(EmbedImage { - height: None, - width: None, - proxy_url: None, - url, - }); - } + if let Some(thumb) = thumb + && let Some(url) = modify_imgur_url(&thumb.url) + { + embed.image = Some(EmbedImage { + height: None, + width: None, + proxy_url: None, + url, + }); } ImgurResult::Image(Box::new(embed)) @@ -42,7 +42,7 @@ pub fn modify_imgur_url(url: &str) -> Option { } let caps: Vec<_> = RE.captures_iter(url).collect(); - let groups = caps.get(0)?; + let groups = caps.first()?; let id = &groups[1]; let ext = &groups[2]; diff --git a/src/core/embedder/parser.rs b/src/core/embedder/parser.rs index 70ef7c98..45d261cc 100644 --- a/src/core/embedder/parser.rs +++ b/src/core/embedder/parser.rs @@ -96,17 +96,17 @@ impl ParsedMessage { for embed in &orig.embeds { // handle imgur - if let Some(provider) = &embed.provider { - if matches!(provider.name.as_deref(), Some("Imgur")) { - let ret = modify_imgur_embed(embed.clone()); - - match ret { - ImgurResult::Video(attachment) => upload_attachments.push(attachment), - ImgurResult::Image(embed) => embeds.push(*embed), - } - - continue; + if let Some(provider) = &embed.provider + && matches!(provider.name.as_deref(), Some("Imgur")) + { + let ret = modify_imgur_embed(embed.clone()); + + match ret { + ImgurResult::Video(attachment) => upload_attachments.push(attachment), + ImgurResult::Image(embed) => embeds.push(*embed), } + + continue; } // handle embeds that are purely attachments @@ -154,7 +154,7 @@ impl ParsedMessage { let handle = AttachmentHandle { filename: format!( "embed_video.{}", - proxy_url.split('.').last().unwrap_or("mp4") + proxy_url.split('.').next_back().unwrap_or("mp4") ), content_type: Some("video".to_string()), url: proxy_url.clone(), @@ -164,18 +164,18 @@ impl ParsedMessage { } // platform-specific modifications - if let Some(provider) = &embed.provider { - if let Some(mut name) = provider.name.as_deref() { - if name.starts_with("FixTweet") { - name = "FixTweet"; - } - match name { - "YouTube" => modify_yt_embed(&mut embed), - "FixTweet" => { - embed.description = None; - } - _ => (), + if let Some(provider) = &embed.provider + && let Some(mut name) = provider.name.as_deref() + { + if name.starts_with("FixTweet") { + name = "FixTweet"; + } + match name { + "YouTube" => modify_yt_embed(&mut embed), + "FixTweet" => { + embed.description = None; } + _ => (), } } @@ -198,11 +198,11 @@ impl ParsedMessage { url: format!("https://cdn.discordapp.com/stickers/{}.png", sticker.id), }; - if primary_image.is_none() { - if let Some(image) = handle.embedable_image() { - primary_image.replace(image); - continue; - } + if primary_image.is_none() + && let Some(image) = handle.embedable_image() + { + primary_image.replace(image); + continue; } if let Some(embed) = handle.as_embed() { diff --git a/src/core/filters.rs b/src/core/filters.rs index 0ae6f767..aab7ec2d 100644 --- a/src/core/filters.rs +++ b/src/core/filters.rs @@ -91,28 +91,28 @@ impl<'a> FilterEvaluater<'a> { } } - if let Some(req) = &check.user_has_all_of { - if !has_all_roles(&self.get_user_roles().await?, req) { - return Ok(false); - } + if let Some(req) = &check.user_has_all_of + && !has_all_roles(&self.get_user_roles().await?, req) + { + return Ok(false); } - if let Some(req) = &check.user_has_some_of { - if !has_any_role(&self.get_user_roles().await?, req) { - return Ok(false); - } + if let Some(req) = &check.user_has_some_of + && !has_any_role(&self.get_user_roles().await?, req) + { + return Ok(false); } - if let Some(req) = &check.user_missing_all_of { - if has_any_role(&self.get_user_roles().await?, req) { - return Ok(false); - } + if let Some(req) = &check.user_missing_all_of + && has_any_role(&self.get_user_roles().await?, req) + { + return Ok(false); } - if let Some(req) = &check.user_missing_some_of { - if has_all_roles(&self.get_user_roles().await?, req) { - return Ok(false); - } + if let Some(req) = &check.user_missing_some_of + && has_all_roles(&self.get_user_roles().await?, req) + { + return Ok(false); } // message context @@ -131,27 +131,26 @@ impl<'a> FilterEvaluater<'a> { // 2. You can't actually send any messages in a forum // // Only forum starter messages will have self.id == self.channel.id - if channel_id.get() == message_id.get() { - if let Some(parent_id) = self + if channel_id.get() == message_id.get() + && let Some(parent_id) = self .bot .cache .fog_parent_channel_id(self.bot, self.guild_id, channel_id) .await? - { - channel_id = parent_id; - } + { + channel_id = parent_id; } - if let Some(req) = &check.in_channel { - if !req.contains(&channel_id.get_i64()) { - return Ok(false); - } + if let Some(req) = &check.in_channel + && !req.contains(&channel_id.get_i64()) + { + return Ok(false); } - if let Some(req) = &check.not_in_channel { - if req.contains(&channel_id.get_i64()) { - return Ok(false); - } + if let Some(req) = &check.not_in_channel + && req.contains(&channel_id.get_i64()) + { + return Ok(false); } if let Some(req) = &check.in_channel_or_sub_channels { @@ -257,40 +256,40 @@ impl<'a> FilterEvaluater<'a> { return Ok(true); } - if let Some(req) = &check.voter_has_all_of { - if !has_all_roles(&self.get_voter_roles().await?, req) { - return Ok(false); - } + if let Some(req) = &check.voter_has_all_of + && !has_all_roles(&self.get_voter_roles().await?, req) + { + return Ok(false); } - if let Some(req) = &check.voter_has_some_of { - if !has_any_role(&self.get_voter_roles().await?, req) { - return Ok(false); - } + if let Some(req) = &check.voter_has_some_of + && !has_any_role(&self.get_voter_roles().await?, req) + { + return Ok(false); } - if let Some(req) = &check.voter_missing_all_of { - if has_any_role(&self.get_voter_roles().await?, req) { - return Ok(false); - } + if let Some(req) = &check.voter_missing_all_of + && has_any_role(&self.get_voter_roles().await?, req) + { + return Ok(false); } - if let Some(req) = &check.voter_missing_some_of { - if has_all_roles(&self.get_voter_roles().await?, req) { - return Ok(false); - } + if let Some(req) = &check.voter_missing_some_of + && has_all_roles(&self.get_voter_roles().await?, req) + { + return Ok(false); } let age_secs = message_id.age().as_secs(); - if let Some(req) = check.newer_than { - if age_secs > req as u64 { - return Ok(false); - } - } - if let Some(req) = check.older_than { - if age_secs < req as u64 { - return Ok(false); - } + if let Some(req) = check.newer_than + && age_secs > req as u64 + { + return Ok(false); + } + if let Some(req) = check.older_than + && age_secs < req as u64 + { + return Ok(false); } Ok(true) diff --git a/src/core/has_image.rs b/src/core/has_image.rs index 3d8c958a..5afe1a97 100644 --- a/src/core/has_image.rs +++ b/src/core/has_image.rs @@ -2,10 +2,10 @@ use twilight_model::channel::{Attachment, message::embed::Embed}; pub fn has_image(embeds: &Vec, attachments: &Vec) -> bool { for attachment in attachments { - if let Some(content_type) = &attachment.content_type { - if content_type.starts_with("image") { - return true; - } + if let Some(content_type) = &attachment.content_type + && content_type.starts_with("image") + { + return true; } } diff --git a/src/core/premium/redeem.rs b/src/core/premium/redeem.rs index 90a9af80..b6b02dbf 100644 --- a/src/core/premium/redeem.rs +++ b/src/core/premium/redeem.rs @@ -36,10 +36,10 @@ pub async fn redeem_premium( ) .fetch_one(&mut *tx) .await?; - if let Some(assert_guild_status) = assert_guild_status { - if guild.premium_end != assert_guild_status { - return Ok(RedeemPremiumResult::StateMismatch); - } + if let Some(assert_guild_status) = assert_guild_status + && guild.premium_end != assert_guild_status + { + return Ok(RedeemPremiumResult::StateMismatch); } // get the user diff --git a/src/core/premium/roles.rs b/src/core/premium/roles.rs index 999d42db..2088c3ab 100644 --- a/src/core/premium/roles.rs +++ b/src/core/premium/roles.rs @@ -56,8 +56,8 @@ pub async fn update_supporter_roles( let Some(member) = bot.cache.fog_member(bot, guild_id, user_id).await? else { return Ok(()); }; - let has_supporter = supporter_role.map_or(false, |r| member.roles.contains(&r)); - let has_patron = patron_role.map_or(false, |r| member.roles.contains(&r)); + let has_supporter = supporter_role.is_some_and(|r| member.roles.contains(&r)); + let has_patron = patron_role.is_some_and(|r| member.roles.contains(&r)); let is_active_patron = user.patreon_status == 1; let is_supporter = user.patreon_status != 0 || user.donated_cents != 0 || is_active_patron; diff --git a/src/core/starboard/handle.rs b/src/core/starboard/handle.rs index 0a035b12..1f116f65 100644 --- a/src/core/starboard/handle.rs +++ b/src/core/starboard/handle.rs @@ -35,7 +35,7 @@ async fn refresh_exclusive_group( refreshers.push((sort_key, ref_sb)); } - refreshers.sort_by(|left, right| right.0.cmp(&left.0)); + refreshers.sort_by_key(|&(k, _)| std::cmp::Reverse(k)); let mut message_exists = false; for (_, mut ref_sb) in refreshers { diff --git a/src/core/starboard/msg_status.rs b/src/core/starboard/msg_status.rs index d917a96f..ce9ed6e8 100644 --- a/src/core/starboard/msg_status.rs +++ b/src/core/starboard/msg_status.rs @@ -54,18 +54,18 @@ pub async fn get_message_status( return Ok(MessageStatus::Update(false)); } - if let Some(required_remove) = config.resolved.required_remove { - if points <= required_remove as i32 { - return Ok(MessageStatus::Remove); - } + if let Some(required_remove) = config.resolved.required_remove + && points <= required_remove as i32 + { + return Ok(MessageStatus::Remove); } - if let Some(required) = config.resolved.required { - if validate_regex(config, message_obj, is_premium) { - #[allow(clippy::collapsible_if)] - if points >= required as i32 { - return Ok(MessageStatus::Send(config.resolved.link_edits)); - } + if let Some(required) = config.resolved.required + && validate_regex(config, message_obj, is_premium) + { + #[allow(clippy::collapsible_if)] + if points >= required as i32 { + return Ok(MessageStatus::Send(config.resolved.link_edits)); } } @@ -85,19 +85,17 @@ fn validate_regex(config: &StarboardConfig, message_obj: &MessageResult, is_prem return false; }; - if let Some(re) = &config.resolved.matches { - if let Ok(re) = regex::Regex::new(re) { - if !re.is_match(&message_obj.content) { - return false; - } - } + if let Some(re) = &config.resolved.matches + && let Ok(re) = regex::Regex::new(re) + && !re.is_match(&message_obj.content) + { + return false; } - if let Some(re) = &config.resolved.not_matches { - if let Ok(re) = regex::Regex::new(re) { - if re.is_match(&message_obj.content) { - return false; - } - } + if let Some(re) = &config.resolved.not_matches + && let Ok(re) = regex::Regex::new(re) + && re.is_match(&message_obj.content) + { + return false; } true diff --git a/src/database/models/autostar_channel.rs b/src/database/models/autostar_channel.rs index caad36df..e3c5bf25 100644 --- a/src/database/models/autostar_channel.rs +++ b/src/database/models/autostar_channel.rs @@ -164,10 +164,10 @@ impl AutoStarChannel { } pub fn set_min_chars(&mut self, val: i16) -> Result<(), String> { - if let Some(max_chars) = self.max_chars { - if val > max_chars { - return Err("`min-chars` cannot be greater than `max-chars`.".to_string()); - } + if let Some(max_chars) = self.max_chars + && val > max_chars + { + return Err("`min-chars` cannot be greater than `max-chars`.".to_string()); } if val > constants::MAX_MIN_CHARS { diff --git a/src/database/models/starboard.rs b/src/database/models/starboard.rs index cf633d1c..2f0bf9fd 100644 --- a/src/database/models/starboard.rs +++ b/src/database/models/starboard.rs @@ -58,8 +58,6 @@ macro_rules! starboard_from_row { }}; } -pub(crate) use starboard_from_row; - impl Starboard { pub async fn create( pool: &sqlx::PgPool, diff --git a/src/database/validation/mentions.rs b/src/database/validation/mentions.rs index 9cb41613..3f1baae9 100644 --- a/src/database/validation/mentions.rs +++ b/src/database/validation/mentions.rs @@ -48,7 +48,7 @@ pub fn parse_role_ids(bot: &StarboardBot, guild_id: Id, inp: &str) for role_id in parse_numbers(inp) { if !bot.cache.guilds.with(&guild_id, |_, g| { - g.as_ref().map_or(false, |g| g.roles.contains_key(&role_id)) + g.as_ref().is_some_and(|g| g.roles.contains_key(&role_id)) }) { continue; } diff --git a/src/database/validation/name.rs b/src/database/validation/name.rs index 3cc431df..effa483b 100644 --- a/src/database/validation/name.rs +++ b/src/database/validation/name.rs @@ -1,6 +1,6 @@ use crate::constants; -pub fn validate_name(name: &String) -> Result { +pub fn validate_name(name: &str) -> Result { if name.len() > constants::MAX_NAME_LENGTH as usize { return Err(format!( "The name cannot be longer than {} characters.", diff --git a/src/database/validation/starboard_settings.rs b/src/database/validation/starboard_settings.rs index 65c841d6..08b575dc 100644 --- a/src/database/validation/starboard_settings.rs +++ b/src/database/validation/starboard_settings.rs @@ -23,10 +23,10 @@ pub fn validate_required(val: String, required_remove: Option) -> Result) -> Result= required { - return Err("`required-remove` must be less than `required`.".to_string()); - } + if let Some(required) = required + && val >= required + { + return Err("`required-remove` must be less than `required`.".to_string()); } if val < constants::MIN_REQUIRED_REMOVE { diff --git a/src/database/validation/time_delta.rs b/src/database/validation/time_delta.rs index bc39a382..03c9917e 100644 --- a/src/database/validation/time_delta.rs +++ b/src/database/validation/time_delta.rs @@ -83,12 +83,13 @@ pub fn validate_relative_duration( newer_than: Option, older_than: Option, ) -> Result<(), String> { - if let Some(newer_than) = newer_than { - if let Some(older_than) = older_than { - if older_than >= newer_than && older_than != 0 && newer_than != 0 { - return Err("`older-than` must be less than `newer-than`.".to_string()); - } - } + if let Some(newer_than) = newer_than + && let Some(older_than) = older_than + && older_than >= newer_than + && older_than != 0 + && newer_than != 0 + { + return Err("`older-than` must be less than `newer-than`.".to_string()); } if let Some(older_than) = older_than { if older_than < 0 { diff --git a/src/interactions/autocomplete/autoredeem.rs b/src/interactions/autocomplete/autoredeem.rs index 551b5746..61514b8d 100644 --- a/src/interactions/autocomplete/autoredeem.rs +++ b/src/interactions/autocomplete/autoredeem.rs @@ -35,6 +35,6 @@ pub async fn autoredeem_autocomplete( Ok(best_matches_as_choices( focused, &guild_names_ref, - Some(|n: &str| n.split(' ').last().unwrap().to_string()), + Some(|n: &str| n.split(' ').next_back().unwrap().to_string()), )) } diff --git a/src/interactions/autocomplete/handle.rs b/src/interactions/autocomplete/handle.rs index dc080b9b..3c3c69c5 100644 --- a/src/interactions/autocomplete/handle.rs +++ b/src/interactions/autocomplete/handle.rs @@ -12,7 +12,7 @@ use super::{ }; use crate::{errors::StarboardResult, interactions::context::CommandCtx}; -pub fn get_sub_options(options: &Vec) -> Option<&Vec> { +pub fn get_sub_options(options: &[CommandDataOption]) -> Option<&Vec> { if options.len() != 1 { return None; } diff --git a/src/interactions/commands/chat/overrides/edit/behavior.rs b/src/interactions/commands/chat/overrides/edit/behavior.rs index 115abb8d..81fe7afd 100644 --- a/src/interactions/commands/chat/overrides/edit/behavior.rs +++ b/src/interactions/commands/chat/overrides/edit/behavior.rs @@ -110,10 +110,10 @@ impl EditBehavior { }; settings.exclusive_group = Some(Some(group.id)); } - if let Some(val) = self.remove_exclusive_group { - if val { - settings.exclusive_group = Some(None); - } + if let Some(val) = self.remove_exclusive_group + && val + { + settings.exclusive_group = Some(None); } if let Some(val) = self.exclusive_group_priority { settings.exclusive_group_priority = Some(val as i16); diff --git a/src/interactions/commands/chat/starboard/view.rs b/src/interactions/commands/chat/starboard/view.rs index 5a6cd760..08a8f936 100644 --- a/src/interactions/commands/chat/starboard/view.rs +++ b/src/interactions/commands/chat/starboard/view.rs @@ -79,9 +79,7 @@ async fn starboard_embed( let mut desc = String::new(); if config.starboard.premium_locked { - desc.push_str(concat!( - "This starboard is locked because it exceeds the non-premium limit.\n\n" - )); + desc.push_str("This starboard is locked because it exceeds the non-premium limit.\n\n"); } write!( desc, @@ -91,7 +89,7 @@ async fn starboard_embed( .unwrap(); let embed = embed::build() - .title(format!("Starboard '{}'", &config.starboard.name)) + .title(format!("Starboard '{}'", config.starboard.name)) .description(desc) .field( EmbedFieldBuilder::new("Requirements", pretty.requirements) diff --git a/src/interactions/commands/format_settings.rs b/src/interactions/commands/format_settings.rs index 7e02fe24..0cb3d3e8 100644 --- a/src/interactions/commands/format_settings.rs +++ b/src/interactions/commands/format_settings.rs @@ -54,7 +54,7 @@ pub async fn format_settings( ) -> StarboardResult { let ov_values = config .overrides - .get(0) + .first() .map(|ov| ov.get_overrides().unwrap()); macro_rules! settings { @@ -121,9 +121,9 @@ pub async fn format_settings( }; let cooldown = { - let is_bold = ov_values.as_ref().map_or(false, |ov| { - ov.cooldown_count.is_some() || ov.cooldown_period.is_some() - }); + let is_bold = ov_values + .as_ref() + .is_some_and(|ov| ov.cooldown_count.is_some() || ov.cooldown_period.is_some()); let setting_name = if is_bold { "**cooldown**" } else { "cooldown" }; diff --git a/src/main.rs b/src/main.rs index d7aa19a3..f2739ad1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,9 +39,9 @@ async fn main() { let bot = match StarboardBot::new(config).await { Ok(val) => val, Err(why) => { - eprintln!("{}", &why); + eprintln!("{}", why); if let Some(bt) = ErrorCompat::backtrace(&why) { - eprintln!("{:#?}", &bt); + eprintln!("{:#?}", bt); } return; } diff --git a/src/owner/commands/sql.rs b/src/owner/commands/sql.rs index 3e755ca3..536f3f91 100644 --- a/src/owner/commands/sql.rs +++ b/src/owner/commands/sql.rs @@ -36,7 +36,7 @@ pub async fn run_sql( let mut tx = bot.pool.begin().await?; for (code, meta) in &blocks { - if meta.get("rollback").map_or(true, |v| v.parse().unwrap()) { + if meta.get("rollback").is_none_or(|v| v.parse().unwrap()) { rollback = true; } diff --git a/src/utils/views/select_paginator.rs b/src/utils/views/select_paginator.rs index 8ba9ae28..9e811080 100644 --- a/src/utils/views/select_paginator.rs +++ b/src/utils/views/select_paginator.rs @@ -23,7 +23,7 @@ const ITEMS_PER_CHUNK: usize = 25; enum AnyContext { Initial(CommandCtx), - Select(CommandCtx, ComponentCtx), + Select(CommandCtx, Box), } impl AnyContext { @@ -106,7 +106,7 @@ impl SelectPaginator { _ => unreachable!(), } - self.ctx = AnyContext::Select(self.ctx.into_initial_ctx(), ctx); + self.ctx = AnyContext::Select(self.ctx.into_initial_ctx(), Box::new(ctx)); } Ok(()) diff --git a/src/utils/views/wait_for.rs b/src/utils/views/wait_for.rs index 531869ab..0592cbae 100644 --- a/src/utils/views/wait_for.rs +++ b/src/utils/views/wait_for.rs @@ -38,7 +38,7 @@ pub async fn wait_for_component( Some(user_id) => user_id, }; - { msg.id == message_id && int_user_id == user_id && button_ids.contains(&&*data.custom_id) } + msg.id == message_id && int_user_id == user_id && button_ids.contains(&&*data.custom_id) }; let event = tokio::time::timeout( From bed8c224bdd8dcff6365a924e934e2da24938237 Mon Sep 17 00:00:00 2001 From: circuitsacul Date: Mon, 20 Jul 2026 23:23:28 -0400 Subject: [PATCH 3/9] fix: remove debug on config --- src/client/config.rs | 1 - src/main.rs | 1 - 2 files changed, 2 deletions(-) diff --git a/src/client/config.rs b/src/client/config.rs index c4f883e8..ab751ff3 100644 --- a/src/client/config.rs +++ b/src/client/config.rs @@ -2,7 +2,6 @@ use std::env; use dotenv::dotenv; -#[derive(Debug)] pub struct Config { pub token: String, pub patreon_token: Option, diff --git a/src/main.rs b/src/main.rs index f2739ad1..743572e3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,7 +34,6 @@ async fn main() { init_tracing(); let config = Config::from_env(); - println!("{config:#?}"); let bot = match StarboardBot::new(config).await { Ok(val) => val, From bc0536e641beb7784380cc3af5792f113c706537 Mon Sep 17 00:00:00 2001 From: circuitsacul Date: Thu, 23 Jul 2026 20:40:37 -0400 Subject: [PATCH 4/9] docs: update README; change dev compose.yml defaults --- README.md | 43 ++++++++++++++++++++++++++++++++++++------- compose.yml | 9 ++++++--- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index ceb550bf..335372de 100644 --- a/README.md +++ b/README.md @@ -16,25 +16,54 @@ A feature-rich and reliable Starboard bot, trusted by thousands of servers. ## Quickstart - Use `/starboards create name: starboard-name channel: #starboard` to create a starboard. - Use `/starboards view name: starboard-name` to view the settings. - - Use `/starboards edit [behavior|requirements|style|embed] name: starboard-name [options...]` to edit a starboard. + - Use `/starboards edit [behavior|requirements|style|embed] name: starboard-name [options...]` to + edit a starboard. ## Self-hosting -You're welcome to self-host this bot if you like, as well as fork it and add your own changes. If there are features you wish the main bot had, you're also welcome to open PRs or make an issue requesting features. +You're welcome to self-host this bot if you like, as well as fork it and add your own changes. If +there are features you wish the main bot had, you're also welcome to open PRs or make an issue +requesting features. -Currently, I offer support for self-hosting the bot if you get stuck - just join the support server, and create a thread with the "Self Hosting" tag. +Currently, I offer support for self-hosting the bot if you get stuck - just join the support +server, and create a thread with the "Self Hosting" tag. -This guide assumes that you already have a VPS to host the bot on. Some good low-cost providers are https://www.netcup.eu (what the main bot uses) and https://alphavps.com. +This guide assumes that you already have a VPS to host the bot on. Some good low-cost providers +are https://www.netcup.eu (what the main bot uses) and https://alphavps.com. -I'll add a proper self-hosting guide later, but essentially you need a PostgreSQL database, a .env file filled with the required variables from .env.example, and the pre-build docker image. To get the latest docker image from docker hub, use `docker pull circuitsacul/starboard:latest`. Start the bot with `docker run -d --env-file .env --network=host circuitsacul/starboard:latest`. +I'll add a proper self-hosting guide later, but essentially you need a PostgreSQL database, a +.env file filled with the required variables from .env.example, and the pre-built container image. + +To run just the pre-built container image standalone: + +```bash +podman pull circuitsacul/starboard:latest +podman run -d --env-file .env --network=host circuitsacul/starboard:latest +``` + +You'll likely want to use compose though. You can see how to use the example compose.yml +in the ## Development section below. ## Migration from Starboard-3 -If you're already hosting starboard-3 and want to switch to starboard-4, you have to alter the database structure. +If you're already hosting starboard-3 and want to switch to starboard-4, you have to alter the +database structure. Start by running `psql postgresql`. Then you can run: ```sql CREATE DATABASE starboard_4 WITH OWNER TEMPLATE ; ``` -Now exit, and then run `psql starboard_4 < migrate.sql` where `migrate.sql` is the file found in this repo. +Now exit, and then run `psql starboard_4 < migrate.sql` where `migrate.sql` is the file found in +this repo. After doing this, you should be able to launch starboard-4. + +## Development + +The easiest way to run the bot for development is to just use the compose.yml file. Officially, +I use podman, though docker likely works fine (and is what I used previously). + +```bash +podman compose up --build -d --force-recreate +``` + +The docker command is likely equivalent, though you may not need `--force-recreate`. diff --git a/compose.yml b/compose.yml index 423b0507..1115bc8c 100644 --- a/compose.yml +++ b/compose.yml @@ -1,3 +1,6 @@ +# this compose file is mostly for dev; you will likely not use it as-is for production +# deployment + name: starboard services: @@ -10,9 +13,9 @@ services: POSTGRES_USER: ${POSTGRES_USER} command: > postgres - -c shared_buffers=4GB - -c work_mem=16MB - -c max_connections=500 + -c shared_buffers=1GB + -c work_mem=4MB + -c max_connections=25 volumes: - ./.postgres/postgres18:/var/lib/postgresql:Z From 5596ed7b0eb1f44dc25d3c270fbe21c0b3e64169 Mon Sep 17 00:00:00 2001 From: circuitsacul Date: Thu, 23 Jul 2026 20:50:44 -0400 Subject: [PATCH 5/9] feat: switch to simpler containerfile --- .github/workflows/publish-docker-image.yml | 36 ------------------- .github/workflows/publish-image.yml | 26 ++++++++++++++ Containerfile | 20 +++++++++++ Dockerfile | 41 ---------------------- compose.yml | 2 +- 5 files changed, 47 insertions(+), 78 deletions(-) delete mode 100644 .github/workflows/publish-docker-image.yml create mode 100644 .github/workflows/publish-image.yml create mode 100644 Containerfile delete mode 100644 Dockerfile diff --git a/.github/workflows/publish-docker-image.yml b/.github/workflows/publish-docker-image.yml deleted file mode 100644 index 785e4f39..00000000 --- a/.github/workflows/publish-docker-image.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: publish-docker-image - -on: - release: - types: [published] - -jobs: - docker: - runs-on: ubuntu-latest - steps: - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Checkout Repository - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set Tag Name - run: echo "TAG_NAME=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - - - name: Build and push - uses: docker/build-push-action@v3 - with: - push: true - tags: circuitsacul/starboard:${{ env.TAG_NAME }},circuitsacul/starboard:latest diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml new file mode 100644 index 00000000..55a64c41 --- /dev/null +++ b/.github/workflows/publish-image.yml @@ -0,0 +1,26 @@ +name: publish-image + +on: + release: + types: [published] + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - uses: docker/setup-qemu-action@v2 + - uses: docker/setup-buildx-action@v2 + - uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - run: echo "TAG_NAME=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV + - uses: docker/build-push-action@v3 + with: + context: . + file: ./Containerfile + push: true + tags: circuitsacul/starboard:${{ env.TAG_NAME }},circuitsacul/starboard:latest diff --git a/Containerfile b/Containerfile new file mode 100644 index 00000000..eaeb88ba --- /dev/null +++ b/Containerfile @@ -0,0 +1,20 @@ +# syntax=docker/dockerfile:1.20-labs +FROM docker.io/rust:1.97-bookworm AS builder +WORKDIR /app +COPY src src +COPY Cargo.toml Cargo.toml +COPY Cargo.lock Cargo.lock +COPY .sqlx .sqlx +COPY migrations migrations + +ARG APPNAME=starboard +RUN --mount=type=cache,id=starboard-cargo-registry,target=/usr/local/cargo/registry,sharing=shared \ + --mount=type=cache,id=starboard-cargo-git,target=/usr/local/cargo/git,sharing=shared \ + --mount=type=cache,id=starboard-target,target=/app/target,sharing=locked \ + cargo build --release --locked --package ${APPNAME} && \ + cp /app/target/release/${APPNAME} /usr/local/bin/app + +FROM gcr.io/distroless/cc-debian13:nonroot AS runtime +USER nonroot:nonroot +COPY --from=builder /usr/local/bin/app / +ENTRYPOINT ["/app"] diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 999197e5..00000000 --- a/Dockerfile +++ /dev/null @@ -1,41 +0,0 @@ -FROM rust:1.97.1-slim-bookworm AS builder -WORKDIR /usr/src/starboard - -# force cargo to update the crates.io index. -# putting this first means that the cache won't be -# invalidated if src/migrations/cargo.toml/cargo.lock -# is changed. -RUN cargo search --limit 1 - -# install pkg-config (required for reqwest dependency) -RUN apt-get update -RUN apt-get install -y pkg-config libssl-dev - -# doing this allows caching of compiled dependencies -COPY Cargo.toml Cargo.toml -COPY Cargo.lock Cargo.lock -RUN mkdir src -RUN echo "fn main() { dbg!(1); }" > src/main.rs -RUN cargo build --release -RUN rm -r src && rm target/release/starboard - -# copy stuff over to the image that we need -COPY build.rs build.rs -COPY ./src ./src -COPY ./migrations ./migrations -COPY ./.sqlx ./.sqlx - -# install starboard -RUN cargo build --release - -# get rid of cargo -FROM debian:bookworm-slim - -# install certificates -RUN apt-get update && apt-get install -y ca-certificates - -# copy starboard over from the builder -COPY --from=builder /usr/src/starboard/target/release/starboard /usr/local/bin/starboard - -# run starboard -CMD ["starboard"] diff --git a/compose.yml b/compose.yml index 1115bc8c..ae7aadda 100644 --- a/compose.yml +++ b/compose.yml @@ -22,7 +22,7 @@ services: starboard: build: context: . - dockerfile: Dockerfile + dockerfile: Containerfile env_file: .env environment: SB_DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} From 33f6768fb55233764682affda40b9061d6bc45b0 Mon Sep 17 00:00:00 2001 From: circuitsacul Date: Thu, 23 Jul 2026 20:52:28 -0400 Subject: [PATCH 6/9] chore: remove useless stuff --- .gitattributes | 2 -- .gitignore | 9 +-------- 2 files changed, 1 insertion(+), 10 deletions(-) delete mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index dfe07704..00000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/.gitignore b/.gitignore index c378dcdf..0d2aaf63 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,9 @@ .env -.vscode -# Generated by Cargo -# will have compiled files and executables +# generated debug/ target/ - -# These are backup files generated by rustfmt **/*.rs.bk -# MSVC Windows builds of rustc generate these, which store debugging information -*.pdb - # postgres data dir .postgres From 9b58d2ed3c5ceee82516cfe0ad459f8510c8e11b Mon Sep 17 00:00:00 2001 From: circuitsacul Date: Thu, 23 Jul 2026 21:11:03 -0400 Subject: [PATCH 7/9] feat: justfile + prek --- .env.example | 2 +- ...747066547fb236f1f8e4f4e53b6c68800bb1.json} | 4 +- Cargo.toml | 50 +++++++++++-------- compose.yml | 2 + justfile | 43 ++++++++++++++++ migrate.sql | 10 ++-- prek.toml | 34 +++++++++++++ src/core/premium/locks.rs | 2 +- 8 files changed, 118 insertions(+), 29 deletions(-) rename .sqlx/{query-71da158d194f732eb561670f52249305966b553f38ebf7839b0a5064f02c0ebf.json => query-eee0fcf44d279a0f7f9c1db36cc3747066547fb236f1f8e4f4e53b6c68800bb1.json} (72%) create mode 100644 justfile create mode 100644 prek.toml diff --git a/.env.example b/.env.example index a702755c..4262464d 100644 --- a/.env.example +++ b/.env.example @@ -17,7 +17,7 @@ DISCORD_TOKEN= SHARDS=1 -#SB_DATABASE_URL= +SB_DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@127.0.0.1:5432/${POSTGRES_DB} SB_MAX_DB_CONNECTIONS=10 #OWNER_IDS=ID1,ID2 diff --git a/.sqlx/query-71da158d194f732eb561670f52249305966b553f38ebf7839b0a5064f02c0ebf.json b/.sqlx/query-eee0fcf44d279a0f7f9c1db36cc3747066547fb236f1f8e4f4e53b6c68800bb1.json similarity index 72% rename from .sqlx/query-71da158d194f732eb561670f52249305966b553f38ebf7839b0a5064f02c0ebf.json rename to .sqlx/query-eee0fcf44d279a0f7f9c1db36cc3747066547fb236f1f8e4f4e53b6c68800bb1.json index 22fb0136..94ec5430 100644 --- a/.sqlx/query-71da158d194f732eb561670f52249305966b553f38ebf7839b0a5064f02c0ebf.json +++ b/.sqlx/query-eee0fcf44d279a0f7f9c1db36cc3747066547fb236f1f8e4f4e53b6c68800bb1.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT count(*) as count FROM autostar_channels WHERE guild_id=$1 AND \n premium_locked=false", + "query": "SELECT count(*) as count FROM autostar_channels WHERE guild_id=$1 AND\n premium_locked=false", "describe": { "columns": [ { @@ -18,5 +18,5 @@ null ] }, - "hash": "71da158d194f732eb561670f52249305966b553f38ebf7839b0a5064f02c0ebf" + "hash": "eee0fcf44d279a0f7f9c1db36cc3747066547fb236f1f8e4f4e53b6c68800bb1" } diff --git a/Cargo.toml b/Cargo.toml index f1071ced..17766334 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,37 +6,47 @@ edition = "2024" [dependencies] twilight-gateway = "0.17.1" twilight-http = "0.17.1" -twilight-model = "0.17.1" -twilight-validate = "0.17.0" -twilight-util = { version = "0.17.0", features = ["builder", "snowflake"] } twilight-mention = "0.17.0" +twilight-model = "0.17.1" twilight-standby = "0.17.0" +twilight-util = { version = "0.17.0", features = ["builder", "snowflake"] } +twilight-validate = "0.17.0" twilight-interactions = "0.17.0" async-trait = "0.1.89" -tokio = { version = "1.48.0", features = ["full"] } -futures = "0.3.31" -dotenv = "0.15.0" -sqlx = { version = "0.8.6", features = ["macros", "postgres", "runtime-tokio", "tls-rustls-aws-lc-rs", "chrono", "json"] } +cached = "0.56.0" chrono = "0.4.42" -serde_json = "1.0" -serde = "1.0.228" -emojis = "0.8.0" dashmap = "6.1.0" -regex = "1.12.2" -lazy_static = "1.5.0" -humantime = "2.3.0" -reqwest = { version = "0.12.25", default-features = false, features = ["json", "rustls-tls"] } +dotenv = "0.15.0" +emojis = "0.8.0" floodgate = "0.5.1" -thousands = "0.2.0" -snafu = { version = "0.8.9", features = ["backtraces-impl-backtrace-crate"] } -serde_with = "3.16.1" +futures = "0.3.31" +humantime = "2.3.0" +lazy_static = "1.5.0" +moka = { version = "0.11.3", features = ["future"] } psutil = "3.3.0" +regex = "1.12.2" +reqwest = { version = "0.12.25", default-features = false, features = [ + "json", + "rustls-tls" +] } rust-fuzzy-search = "0.1.1" -moka = { version = "0.11.3", features = ["future"] } -cached = "0.56.0" +rustls = { version = "0.23.35" } +serde = "1.0.228" +serde_json = "1.0" +serde_with = "3.16.1" +snafu = { version = "0.8.9", features = ["backtraces-impl-backtrace-crate"] } +sqlx = { version = "0.8.6", features = [ + "chrono", + "json", + "macros", + "postgres", + "runtime-tokio", + "tls-rustls-aws-lc-rs" +] } +thousands = "0.2.0" +tokio = { version = "1.48.0", features = ["full"] } tracing = "0.1.43" tracing-subscriber = { version = "0.3.22", features = ["env-filter"] } -rustls = { version = "0.23.35" } unicode-segmentation = "1.13.2" diff --git a/compose.yml b/compose.yml index ae7aadda..78e14c1f 100644 --- a/compose.yml +++ b/compose.yml @@ -16,6 +16,8 @@ services: -c shared_buffers=1GB -c work_mem=4MB -c max_connections=25 + ports: + - 5432:5432 volumes: - ./.postgres/postgres18:/var/lib/postgresql:Z diff --git a/justfile b/justfile new file mode 100644 index 00000000..294ee302 --- /dev/null +++ b/justfile @@ -0,0 +1,43 @@ +set dotenv-load + +db-prepare: + DATABASE_URL=$SB_DATABASE_URL cargo sqlx prepare + +compose *args: + podman compose -f compose.yml {{args}} + +build *args: + just compose --parallel 1 build {{args}} + +up *args: + just compose up {{args}} --force-recreate + +run *args: + just build {{args}} + just up {{args}} + +down *args: + just compose down {{args}} + +services *args: + just {{args}} postgres + +app *args: + just {{args}} starboard + +fmt: + cargo +nightly fmt + prek run tombi-format +clippy: + cargo clippy --workspace --all-targets --all-features -- -D warnings +test: + cargo test +deny: + cargo deny -L error --all-features check --config .config/deny.toml +[default] +check: + prek run --all-files --stage manual + @just clippy + @just test +cicd: + @just check diff --git a/migrate.sql b/migrate.sql index 2bf48d5d..2bfeab67 100644 --- a/migrate.sql +++ b/migrate.sql @@ -1,11 +1,11 @@ --- This script was generated by the Schema Diff utility in pgAdmin 4, but heavily modified by me +-- This script was generated by the Schema Diff utility in pgAdmin 4, but heavily modified by me -- (circuitsacul). --- This script was generated by the Schema Diff utility in pgAdmin 4. --- For the circular dependencies, the order in which Schema Diff writes the objects is not very sophisticated +-- This script was generated by the Schema Diff utility in pgAdmin 4. +-- For the circular dependencies, the order in which Schema Diff writes the objects is not very sophisticated -- and may require manual changes to the script to ensure changes are applied in the correct order. -- Please report an issue for any failure with the reproduction steps. - BEGIN; + BEGIN; -- manual alter table aschannels rename to autostar_channels; @@ -590,4 +590,4 @@ DROP INDEX public._btree_index_sb_messages__sb_message_id; -- posrole_members DROP TABLE posrole_members; - END; \ No newline at end of file + END; diff --git a/prek.toml b/prek.toml new file mode 100644 index 00000000..91a73872 --- /dev/null +++ b/prek.toml @@ -0,0 +1,34 @@ +[[repos]] +repo = "builtin" +hooks = [ + { id = "trailing-whitespace" }, + { id = "check-added-large-files" }, + { id = "end-of-file-fixer" }, + { id = "check-case-conflict" }, + { id = "check-json" }, + { id = "check-json5" }, + { id = "check-toml" }, + { id = "check-yaml" }, + { id = "check-xml" }, + { id = "mixed-line-ending" }, + { id = "check-symlinks" }, +] + +[[repos]] +repo = "https://github.com/tombi-toml/tombi-pre-commit" +rev = "v0.9.6" +hooks = [ + { id = "tombi-format", exclude = { glob = "Cargo.lock" } }, + { id = "tombi-lint", exclude = { glob = "Cargo.lock" } }, +] + +[[repos]] +repo = "local" + +[[repos.hooks]] +id = "rustfmt" +name = "rustfmt" +language = "system" +entry = "cargo +nightly fmt" +types = ["rust"] +pass_filenames = false diff --git a/src/core/premium/locks.rs b/src/core/premium/locks.rs index 4ecb1c6f..174b3e9b 100644 --- a/src/core/premium/locks.rs +++ b/src/core/premium/locks.rs @@ -60,7 +60,7 @@ pub async fn refresh_premium_locks( // lock autostar channels let count = sqlx::query!( - "SELECT count(*) as count FROM autostar_channels WHERE guild_id=$1 AND + "SELECT count(*) as count FROM autostar_channels WHERE guild_id=$1 AND premium_locked=false", guild_id ) From 01b1f377c9c45dc7d483902352a2d257095d5d19 Mon Sep 17 00:00:00 2001 From: circuitsacul Date: Thu, 23 Jul 2026 21:32:56 -0400 Subject: [PATCH 8/9] chore: put postgres data in volume, env fixes, include build.rs in image --- .env.example | 12 ++++++------ .gitignore | 3 --- Containerfile | 1 + compose.yml | 7 +++++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.env.example b/.env.example index 4262464d..ab1a8810 100644 --- a/.env.example +++ b/.env.example @@ -4,20 +4,16 @@ POSTGRES_DB=starboard POSTGRES_USER=starboard POSTGRES_PASSWORD=starboard -################################################################################################### -# build config -RUST_LOG=twilight-http-ratelimiting=debug,info -#DATABASE_URL= - ################################################################################################### # bot config +RUST_LOG=twilight_http_ratelimiting=debug,info DEVELOPMENT=true DISCORD_TOKEN= SHARDS=1 -SB_DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@127.0.0.1:5432/${POSTGRES_DB} +SB_DATABASE_URL=postgres://starboard:starboard@127.0.0.1:5432/starboard SB_MAX_DB_CONNECTIONS=10 #OWNER_IDS=ID1,ID2 @@ -28,3 +24,7 @@ BOT_ID= #SUPPORTER_ROLE= #PATREON_TOKEN= + +################################################################################################### +# build config +#DATABASE_URL=${SB_DATABASE_URL} diff --git a/.gitignore b/.gitignore index 0d2aaf63..85212c98 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,3 @@ debug/ target/ **/*.rs.bk - -# postgres data dir -.postgres diff --git a/Containerfile b/Containerfile index eaeb88ba..999d9be2 100644 --- a/Containerfile +++ b/Containerfile @@ -6,6 +6,7 @@ COPY Cargo.toml Cargo.toml COPY Cargo.lock Cargo.lock COPY .sqlx .sqlx COPY migrations migrations +COPY build.rs build.rs ARG APPNAME=starboard RUN --mount=type=cache,id=starboard-cargo-registry,target=/usr/local/cargo/registry,sharing=shared \ diff --git a/compose.yml b/compose.yml index 78e14c1f..40ac365c 100644 --- a/compose.yml +++ b/compose.yml @@ -17,9 +17,9 @@ services: -c work_mem=4MB -c max_connections=25 ports: - - 5432:5432 + - "127.0.0.1:5432:5432" volumes: - - ./.postgres/postgres18:/var/lib/postgresql:Z + - postgres-data:/var/lib/postgresql starboard: build: @@ -30,3 +30,6 @@ services: SB_DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} restart: unless-stopped depends_on: [postgres] + +volumes: + postgres-data: From d78b964f0dfc6f2265985902b9c920e7e8fef4c2 Mon Sep 17 00:00:00 2001 From: circuitsacul Date: Thu, 23 Jul 2026 21:55:54 -0400 Subject: [PATCH 9/9] ci: better cicd, check + manual publish --- .env.example | 2 +- .github/workflows/cicd.yml | 70 +++++++++++++++++++++++++++++ .github/workflows/publish-image.yml | 26 ----------- 3 files changed, 71 insertions(+), 27 deletions(-) create mode 100644 .github/workflows/cicd.yml delete mode 100644 .github/workflows/publish-image.yml diff --git a/.env.example b/.env.example index ab1a8810..5d309d68 100644 --- a/.env.example +++ b/.env.example @@ -5,7 +5,7 @@ POSTGRES_USER=starboard POSTGRES_PASSWORD=starboard ################################################################################################### -# bot config +# runtime config RUST_LOG=twilight_http_ratelimiting=debug,info DEVELOPMENT=true diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml new file mode 100644 index 00000000..c2501294 --- /dev/null +++ b/.github/workflows/cicd.yml @@ -0,0 +1,70 @@ +name: cicd + +on: + pull_request: + release: + types: [published] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + check: + if: github.event_name == 'pull_request' || github.event_name == 'release' + runs-on: ubuntu-latest + env: + SQLX_OFFLINE: "true" + steps: + - uses: actions/checkout@v7 + - uses: dtolnay/rust-toolchain@nightly + with: + components: rustfmt + - uses: dtolnay/rust-toolchain@master + with: + toolchain: "1.97" + components: clippy + - uses: Swatinem/rust-cache@v2 + - uses: extractions/setup-just@v4 + - uses: j178/prek-action@v2 + with: + install-only: true + - run: just check + + publish: + needs: [check] + if: >- + !cancelled() && + (github.event_name == 'workflow_dispatch' || + (github.event_name == 'release' && needs.check.result == 'success')) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: docker/setup-buildx-action@v4 + - uses: docker/login-action@v4 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - id: meta + uses: docker/metadata-action@v6 + with: + images: circuitsacul/starboard + tags: | + type=raw,value=${{ github.event.release.tag_name }},enable=${{ github.event_name == 'release' }} + type=raw,value=latest,enable=${{ github.event_name == 'release' && !github.event.release.prerelease }} + type=raw,value=dev,enable=${{ github.event_name == 'workflow_dispatch' }} + type=sha,prefix=dev-,format=short,enable=${{ github.event_name == 'workflow_dispatch' }} + flavor: | + latest=false + - uses: docker/build-push-action@v7 + with: + context: . + file: ./Containerfile + platforms: linux/amd64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml deleted file mode 100644 index 55a64c41..00000000 --- a/.github/workflows/publish-image.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: publish-image - -on: - release: - types: [published] - -jobs: - docker: - runs-on: ubuntu-latest - steps: - - uses: docker/setup-qemu-action@v2 - - uses: docker/setup-buildx-action@v2 - - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - run: echo "TAG_NAME=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - - uses: docker/build-push-action@v3 - with: - context: . - file: ./Containerfile - push: true - tags: circuitsacul/starboard:${{ env.TAG_NAME }},circuitsacul/starboard:latest