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..5d309d68 100644 --- a/.env.example +++ b/.env.example @@ -1,18 +1,30 @@ -# required +################################################################################################### +# database config +POSTGRES_DB=starboard +POSTGRES_USER=starboard +POSTGRES_PASSWORD=starboard + +################################################################################################### +# runtime config +RUST_LOG=twilight_http_ratelimiting=debug,info +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=postgres://starboard:starboard@127.0.0.1:5432/starboard +SB_MAX_DB_CONNECTIONS=10 + +#OWNER_IDS=ID1,ID2 +BOT_ID= +#MAIN_GUILD= +#ERROR_CHANNEL_ID= +#PATRON_ROLE= +#SUPPORTER_ROLE= -PATREON_TOKEN= -SENTRY_URL= +#PATREON_TOKEN= -MAIN_GUILD= -ERROR_CHANNEL_ID= -PATRON_ROLE= -SUPPORTER_ROLE= +################################################################################################### +# build config +#DATABASE_URL=${SB_DATABASE_URL} 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/.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-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/.gitignore b/.gitignore index 5608610a..85212c98 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,6 @@ .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 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.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..17766334 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,38 +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"] } -sentry = { version = "0.46.0", default-features = false, features = ["reqwest", "rustls", "backtrace", "contexts", "debug-images", "panic"] } +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/Containerfile b/Containerfile new file mode 100644 index 00000000..999d9be2 --- /dev/null +++ b/Containerfile @@ -0,0 +1,21 @@ +# 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 +COPY build.rs build.rs + +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 2593e819..00000000 --- a/Dockerfile +++ /dev/null @@ -1,41 +0,0 @@ -FROM rust:1.91.0-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/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 new file mode 100644 index 00000000..40ac365c --- /dev/null +++ b/compose.yml @@ -0,0 +1,35 @@ +# this compose file is mostly for dev; you will likely not use it as-is for production +# deployment + +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=1GB + -c work_mem=4MB + -c max_connections=25 + ports: + - "127.0.0.1:5432:5432" + volumes: + - postgres-data:/var/lib/postgresql + + starboard: + build: + context: . + dockerfile: Containerfile + env_file: .env + environment: + SB_DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} + restart: unless-stopped + depends_on: [postgres] + +volumes: + postgres-data: 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/rust-analyzer.toml b/rust-analyzer.toml new file mode 100644 index 00000000..4b15fc64 --- /dev/null +++ b/rust-analyzer.toml @@ -0,0 +1,5 @@ +[cargo] +extraEnv = { "RUSTUP_TOOLCHAIN" = "nightly-2026-05-03", "RUSTFLAGS" = "-Zthreads=16" } + +[check] +extraEnv = { "RUSTUP_TOOLCHAIN" = "nightly-2026-05-03", "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..5ad64d0c 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 { @@ -162,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)) }) } @@ -471,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)) })) } @@ -502,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/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..ab751ff3 100644 --- a/src/client/config.rs +++ b/src/client/config.rs @@ -1,10 +1,10 @@ -use dotenv::dotenv; use std::env; +use dotenv::dotenv; + 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 +26,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 +60,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..46de1993 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, @@ -91,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!( @@ -140,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 5e310247..e652a204 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, @@ -64,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, @@ -101,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 abf18d8f..5258d42f 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()]", @@ -60,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 4558773d..0ee34c4d 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, @@ -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 7c82a944..45d261cc 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; @@ -97,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 @@ -155,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(), @@ -165,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; } + _ => (), } } @@ -199,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 440aa0eb..aab7ec2d 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) { @@ -92,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 @@ -132,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 { @@ -258,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/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/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 ) 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..b6b02dbf 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, @@ -37,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 c3615f54..1f116f65 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>, @@ -36,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/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..ce9ed6e8 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 @@ -55,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)); } } @@ -86,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/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/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 7cab2df2..61514b8d 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, @@ -36,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/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..3c3c69c5 100644 --- a/src/interactions/autocomplete/handle.rs +++ b/src/interactions/autocomplete/handle.rs @@ -4,16 +4,15 @@ 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> { +pub fn get_sub_options(options: &[CommandDataOption]) -> Option<&Vec> { if options.len() != 1 { return None; } 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/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/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/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/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..743572e3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -35,27 +35,18 @@ async fn main() { 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() - }, - )) - }); - 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); } - sentry::capture_error(&why); return; } }; + tracing::info!("READY"); + run(bot).await; } 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/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..9e811080 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,13 +19,11 @@ use crate::{ utils::div_ceil::div_ceil, }; -use super::wait_for::wait_for_component; - const ITEMS_PER_CHUNK: usize = 25; enum AnyContext { Initial(CommandCtx), - Select(CommandCtx, ComponentCtx), + Select(CommandCtx, Box), } impl AnyContext { @@ -107,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(