diff --git a/.dockerignore b/.dockerignore index 9091c98..3c1df40 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,5 +2,11 @@ /.git Cargo.lock -Config.json +Config.* Readme.md + +.devenv* +devenv* + +.direnv +.envrc diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..30da14f --- /dev/null +++ b/.envrc @@ -0,0 +1,5 @@ +export DIRENV_WARN_TIMEOUT=20s + +eval "$(devenv direnvrc)" + +use devenv diff --git a/.gitignore b/.gitignore index 4a84179..efebb08 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,13 @@ /target -Config.json +Config.* + +# devenv +.devenv* +devenv.local.nix + +# direnv +.direnv + +# pre-commit +.pre-commit-config.yaml diff --git a/Cargo.lock b/Cargo.lock index 34b21f0..6754fc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] @@ -41,53 +41,43 @@ dependencies = [ "libc", ] +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +dependencies = [ + "serde", +] [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", -] - -[[package]] -name = "async-tungstenite" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b71b31561643aa8e7df3effe284fa83ab1a840e52294c5f4bd7bfd8b2becbb" -dependencies = [ - "futures-io", - "futures-util", - "log", - "pin-project-lite", - "tokio", - "tokio-rustls 0.23.4", - "tungstenite", - "webpki-roots 0.22.6", + "syn 2.0.100", ] [[package]] -name = "atomic" -version = "0.6.0" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" -dependencies = [ - "bytemuck", -] +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" @@ -106,15 +96,15 @@ dependencies = [ [[package]] name = "base64" -version = "0.13.1" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" @@ -124,9 +114,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +dependencies = [ + "serde", +] [[package]] name = "block-buffer" @@ -139,15 +132,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] -name = "bytemuck" -version = "1.18.0" +name = "bytecount" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" +checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "byteorder" @@ -157,15 +150,46 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.2" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", +] [[package]] name = "cc" -version = "1.1.21" +version = "1.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" dependencies = [ "shlex", ] @@ -178,9 +202,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", @@ -188,7 +212,66 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-link", +] + +[[package]] +name = "command_attr" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fcc89439e1bb4e19050a9586a767781a3060000d2f3296fd2a40597ad9421c5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "config" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595aae20e65c3be792d05818e8c63025294ac3cb7e200f11459063a352a6ef80" +dependencies = [ + "async-trait", + "convert_case", + "json5", + "pathdiff", + "ron", + "rust-ini", + "serde", + "serde_json", + "toml", + "winnow", + "yaml-rust2", +] + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", ] [[package]] @@ -209,9 +292,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -225,6 +308,27 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" + [[package]] name = "crypto-common" version = "0.1.6" @@ -237,9 +341,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.4" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", @@ -247,27 +351,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.4" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 1.0.109", + "syn 2.0.100", ] [[package]] name = "darling_macro" -version = "0.14.4" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 1.0.109", + "syn 2.0.100", ] [[package]] @@ -277,18 +381,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", "serde", ] +[[package]] +name = "data-encoding" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" + [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", "serde", @@ -315,102 +425,100 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + [[package]] name = "dog" version = "0.1.0" dependencies = [ - "async-trait", "chrono", + "config", "duration-str", - "env_logger", - "figment", - "log", "poise", "regex", - "reqwest", + "reqwest 0.12.15", "serde", "serenity", "tokio", - "url", ] [[package]] name = "duration-str" -version = "0.7.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8bb6a301a95ba86fa0ebaf71d49ae4838c51f8b84cb88ed140dfb66452bb3c4" +checksum = "9add086174f60bcbcfde7175e71dcfd99da24dfd12f611d0faf74f4f26e15a06" dependencies = [ "chrono", - "nom", "rust_decimal", "serde", - "thiserror", + "thiserror 2.0.12", "time", + "winnow", ] [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] -[[package]] -name = "env_logger" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] -name = "fastrand" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" - -[[package]] -name = "figment" -version = "0.10.19" +name = "error-chain" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" dependencies = [ - "atomic", - "pear", - "serde", - "serde_json", - "uncased", "version_check", ] +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + [[package]] name = "flate2" -version = "1.0.33" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", @@ -422,6 +530,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "foreign-types" version = "0.3.2" @@ -448,9 +562,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -462,9 +576,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -472,44 +586,44 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.100", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -523,6 +637,15 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -541,14 +664,32 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] name = "gimli" -version = "0.31.0" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "h2" @@ -561,7 +702,26 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", "indexmap", "slab", "tokio", @@ -576,16 +736,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] -name = "hermit-abi" -version = "0.3.9" +name = "hashbrown" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "foldhash", +] [[package]] -name = "hermit-abi" -version = "0.4.0" +name = "hashlink" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.2", +] [[package]] name = "http" @@ -598,6 +764,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -605,15 +782,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.9.4" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -621,25 +821,19 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", "httparse", "httpdate", "itoa", @@ -651,6 +845,26 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.8", + "http 1.3.1", + "http-body 1.0.1", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + [[package]] name = "hyper-rustls" version = "0.24.2" @@ -658,36 +872,77 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http", - "hyper", + "http 0.2.12", + "hyper 0.14.32", "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", ] +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http 1.3.1", + "hyper 1.6.0", + "hyper-util", + "rustls 0.23.25", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.2", + "tower-service", +] + [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", - "hyper", + "http-body-util", + "hyper 1.6.0", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", ] [[package]] -name = "iana-time-zone" -version = "0.1.61" +name = "hyper-util" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.6.0", + "libc", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -701,6 +956,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -709,73 +1082,91 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] name = "indexmap" -version = "2.5.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.2", ] [[package]] -name = "inlinable_string" -version = "0.1.15" +name = "ipnet" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] -name = "ipnet" -version = "2.10.0" +name = "itoa" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] -name = "is-terminal" -version = "0.4.13" +name = "js-sys" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ - "hermit-abi 0.4.0", - "libc", - "windows-sys 0.52.0", + "once_cell", + "wasm-bindgen", ] [[package]] -name = "itoa" -version = "1.0.11" +name = "json5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] [[package]] -name = "js-sys" -version = "0.3.70" +name = "levenshtein" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" -dependencies = [ - "wasm-bindgen", -] +checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" + +[[package]] +name = "litemap" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" @@ -789,9 +1180,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "memchr" @@ -816,37 +1207,45 @@ dependencies = [ ] [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "mini-moka" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "c325dfab65f261f386debee8b0969da215b3fa0037e74c8a1234db7ba986d803" +dependencies = [ + "crossbeam-channel", + "crossbeam-utils", + "dashmap", + "skeptic", + "smallvec", + "tagptr", + "triomphe", +] [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi 0.3.9", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ "libc", "log", @@ -859,16 +1258,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "num-conv" version = "0.1.0" @@ -886,26 +1275,26 @@ dependencies = [ [[package]] name = "object" -version = "0.36.4" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "cfg-if", "foreign-types", "libc", @@ -922,20 +1311,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.100", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" dependencies = [ "cc", "libc", @@ -944,12 +1333,13 @@ dependencies = [ ] [[package]] -name = "ordered-float" -version = "2.10.1" +name = "ordered-multimap" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" dependencies = [ - "num-traits", + "dlv-list", + "hashbrown 0.14.5", ] [[package]] @@ -976,39 +1366,67 @@ dependencies = [ ] [[package]] -name = "pear" -version = "0.2.9" +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +dependencies = [ + "memchr", + "thiserror 2.0.12", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdeeaa00ce488657faba8ebf44ab9361f9365a97bd39ffb8a60663f57ff4b467" +checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" dependencies = [ - "inlinable_string", - "pear_codegen", - "yansi", + "pest", + "pest_generator", ] [[package]] -name = "pear_codegen" -version = "0.2.9" +name = "pest_generator" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bab5b985dc082b345f812b7df84e1bef27e7207b39e448439ba8bd69c93f147" +checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" dependencies = [ + "pest", + "pest_meta", "proc-macro2", - "proc-macro2-diagnostics", "quote", - "syn 2.0.77", + "syn 2.0.100", ] [[package]] -name = "percent-encoding" -version = "2.3.1" +name = "pest_meta" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" +dependencies = [ + "once_cell", + "pest", + "sha2", +] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1018,39 +1436,37 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "poise" -version = "0.5.7" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d104e4b5847283b2fbd6a7ec19fb6a8af328e2145623d056b66d750a30073fdf" +checksum = "1819d5a45e3590ef33754abce46432570c54a120798bdbf893112b4211fa09a6" dependencies = [ "async-trait", "derivative", - "futures-core", "futures-util", - "log", - "once_cell", "parking_lot", "poise_macros", "regex", "serenity", "tokio", + "tracing", ] [[package]] name = "poise_macros" -version = "0.5.7" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb516a8cf4e4ae4bd7ef5819d08c6ca408976461a9bea3ee3eec5138ac070c1" +checksum = "8fa2c123c961e78315cd3deac7663177f12be4460f5440dbf62a7ed37b1effea" dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.100", ] [[package]] @@ -1061,44 +1477,48 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] [[package]] -name = "proc-macro2-diagnostics" -version = "0.10.1" +name = "pulldown-cmark" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", - "version_check", - "yansi", + "bitflags 2.9.0", + "memchr", + "unicase", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "rand" version = "0.8.5" @@ -1126,23 +1546,23 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] name = "redox_syscall" -version = "0.5.4" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -1152,9 +1572,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1163,9 +1583,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" @@ -1178,30 +1598,27 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "hyper-tls", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-rustls 0.24.2", "ipnet", "js-sys", "log", "mime", "mime_guess", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", "rustls 0.21.12", - "rustls-pemfile", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", - "system-configuration", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", "tokio", - "tokio-native-tls", "tokio-rustls 0.24.1", "tokio-util", "tower-service", @@ -1215,40 +1632,91 @@ dependencies = [ ] [[package]] -name = "ring" -version = "0.16.20" +name = "reqwest" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" dependencies = [ - "cc", - "libc", + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.8", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-rustls 0.27.5", + "hyper-tls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 2.2.0", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "system-configuration 0.6.1", + "tokio", + "tokio-native-tls", + "tower", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", "web-sys", - "winapi", + "windows-registry", ] [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", - "spin 0.9.8", - "untrusted 0.9.0", + "untrusted", "windows-sys 0.52.0", ] +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.7", + "bitflags 2.9.0", + "serde", + "serde_derive", +] + +[[package]] +name = "rust-ini" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e310ef0e1b6eeb79169a1171daf9abcb87a2e17c03bee2c4bb100b55c75409f" +dependencies = [ + "cfg-if", + "ordered-multimap", + "trim-in-place", +] + [[package]] name = "rust_decimal" -version = "1.36.0" +version = "1.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +checksum = "faa7de2ba56ac291bd90c6b9bece784a52ae1411f9506544b3eae36dd2356d50" dependencies = [ "arrayvec", "num-traits", @@ -1262,39 +1730,54 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustix" -version = "0.38.37" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.20.9" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.16.20", + "ring", + "rustls-webpki 0.101.7", "sct", - "webpki", ] [[package]] name = "rustls" -version = "0.21.12" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" dependencies = [ "log", - "ring 0.17.8", - "rustls-webpki", - "sct", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki 0.103.1", + "subtle", + "zeroize", ] [[package]] @@ -1306,33 +1789,79 @@ dependencies = [ "base64 0.21.7", ] +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" + [[package]] name = "rustls-webpki" version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "same-file" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] [[package]] name = "schannel" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] @@ -1349,8 +1878,18 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "ring", + "untrusted", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "serde", + "zeroize", ] [[package]] @@ -1359,7 +1898,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "core-foundation", "core-foundation-sys", "libc", @@ -1368,49 +1907,57 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", ] [[package]] -name = "serde" -version = "1.0.210" +name = "semver" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ - "serde_derive", + "serde", ] [[package]] -name = "serde-value" -version = "0.7.0" +name = "serde" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_cow" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7bbbec7196bfde255ab54b65e34087c0849629280028238e67ee25d6a4b7da" dependencies = [ - "ordered-float", "serde", ] [[package]] name = "serde_derive" -version = "1.0.210" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.100", ] [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -1418,6 +1965,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -1432,41 +1988,57 @@ dependencies = [ [[package]] name = "serenity" -version = "0.11.7" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a7a89cef23483fc9d4caf2df41e6d3928e18aada84c56abd237439d929622c6" +checksum = "3d72ec4323681bf9a3cabe40fd080abc2435859b502a1b5aa9bf693f125bfa76" dependencies = [ + "arrayvec", "async-trait", - "async-tungstenite", - "base64 0.21.7", - "bitflags 1.3.2", + "base64 0.22.1", + "bitflags 2.9.0", "bytes", - "cfg-if", "chrono", + "command_attr", "dashmap", "flate2", "futures", - "mime", + "fxhash", + "levenshtein", "mime_guess", "parking_lot", "percent-encoding", - "reqwest", - "rustversion", + "reqwest 0.11.27", + "secrecy", "serde", - "serde-value", + "serde_cow", "serde_json", + "static_assertions", "time", "tokio", + "tokio-tungstenite", "tracing", "typemap_rev", + "typesize", "url", + "uwl", ] [[package]] -name = "sha-1" -version = "0.10.1" +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -1479,6 +2051,21 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "skeptic" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" +dependencies = [ + "bytecount", + "cargo_metadata", + "error-chain", + "glob", + "pulldown-cmark", + "tempfile", + "walkdir", +] + [[package]] name = "slab" version = "0.4.9" @@ -1490,37 +2077,43 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", ] [[package]] -name = "spin" -version = "0.5.2" +name = "stable_deref_trait" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] -name = "spin" -version = "0.9.8" +name = "static_assertions" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -1535,9 +2128,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -1550,6 +2143,26 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -1558,7 +2171,18 @@ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", "core-foundation", - "system-configuration-sys", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.9.0", + "core-foundation", + "system-configuration-sys 0.6.0", ] [[package]] @@ -1571,53 +2195,80 @@ dependencies = [ "libc", ] +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + [[package]] name = "tempfile" -version = "3.13.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ - "cfg-if", "fastrand", + "getrandom 0.3.2", "once_cell", "rustix", "windows-sys 0.59.0", ] [[package]] -name = "termcolor" -version = "1.4.1" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "winapi-util", + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "1.0.63" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.100", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -1630,40 +2281,44 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", ] [[package]] -name = "tinyvec" -version = "1.8.0" +name = "tiny-keccak" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ - "tinyvec_macros", + "crunchy", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] [[package]] name = "tokio" -version = "1.40.0" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "bytes", @@ -1677,13 +2332,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.100", ] [[package]] @@ -1698,30 +2353,56 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.20.9", + "rustls 0.21.12", "tokio", - "webpki", ] [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ - "rustls 0.21.12", + "rustls 0.22.4", + "rustls-pki-types", "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls 0.23.25", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" +dependencies = [ + "futures-util", + "log", + "rustls 0.22.4", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.25.0", + "tungstenite", + "webpki-roots 0.26.8", +] + [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" dependencies = [ "bytes", "futures-core", @@ -1730,6 +2411,61 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" version = "0.3.3" @@ -1738,9 +2474,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -1750,24 +2486,36 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.100", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] +[[package]] +name = "trim-in-place" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343e926fc669bc8cde4fa3129ab681c63671bae288b1f1081ceee6d9d37904fc" + +[[package]] +name = "triomphe" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" + [[package]] name = "try-lock" version = "0.2.5" @@ -1776,81 +2524,89 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.17.3" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" dependencies = [ - "base64 0.13.1", "byteorder", "bytes", - "http", + "data-encoding", + "http 1.3.1", "httparse", "log", "rand", - "rustls 0.20.9", - "sha-1", - "thiserror", + "rustls 0.22.4", + "rustls-pki-types", + "sha1", + "thiserror 1.0.69", "url", "utf-8", - "webpki", ] [[package]] name = "typemap_rev" -version = "0.1.5" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5b74f0a24b5454580a79abb6994393b09adf0ab8070f15827cb666255de155" +checksum = "74b08b0c1257381af16a5c3605254d529d3e7e109f3c62befc5d168968192998" [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] -name = "uncased" -version = "0.9.10" +name = "typesize" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +checksum = "e29e4cac0f1acdbbe7b4deb46876a04246dc6abf60b6f2587bef8ae327cd134c" dependencies = [ - "version_check", + "chrono", + "dashmap", + "hashbrown 0.14.5", + "mini-moka", + "parking_lot", + "secrecy", + "serde_json", + "time", + "typesize-derive", + "url", ] [[package]] -name = "unicase" -version = "2.7.0" +name = "typesize-derive" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +checksum = "536b6812192bda8551cfa0e52524e328c6a951b48e66529ee4522d6c721243d6" dependencies = [ - "version_check", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] -name = "unicode-bidi" -version = "0.3.15" +name = "ucd-trie" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] -name = "unicode-ident" -version = "1.0.13" +name = "unicase" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] -name = "unicode-normalization" -version = "0.1.24" +name = "unicode-ident" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] -name = "untrusted" -version = "0.7.1" +name = "unicode-segmentation" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "untrusted" @@ -1860,9 +2616,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -1876,6 +2632,24 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uwl" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4bf03e0ca70d626ecc4ba6b0763b934b6f2976e8c744088bb3c1d646fbb1ad0" + [[package]] name = "vcpkg" version = "0.2.15" @@ -1888,6 +2662,16 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -1903,49 +2687,59 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.100", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1953,28 +2747,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-streams" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -1985,77 +2782,115 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] -name = "webpki" -version = "0.22.4" +name = "webpki-roots" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "rustls-pki-types", ] [[package]] -name = "webpki-roots" -version = "0.22.6" +name = "winapi-util" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "webpki", + "windows-sys 0.59.0", ] [[package]] -name = "webpki-roots" -version = "0.25.4" +name = "windows-core" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings 0.4.0", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] [[package]] -name = "winapi" -version = "0.3.9" +name = "windows-interface" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] -name = "winapi-i686-pc-windows-gnu" +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-registry" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" +dependencies = [ + "windows-result", + "windows-strings 0.3.1", + "windows-targets 0.53.0", +] [[package]] -name = "winapi-util" -version = "0.1.9" +name = "windows-result" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" dependencies = [ - "windows-sys 0.59.0", + "windows-link", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "windows-strings" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +dependencies = [ + "windows-link", +] [[package]] -name = "windows-core" -version = "0.52.0" +name = "windows-strings" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" dependencies = [ - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -2109,13 +2944,29 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -2128,6 +2979,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -2140,6 +2997,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -2152,12 +3015,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -2170,6 +3045,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -2182,6 +3063,12 @@ 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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -2194,6 +3081,12 @@ 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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -2206,6 +3099,21 @@ 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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "winnow" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -2217,28 +3125,126 @@ dependencies = [ ] [[package]] -name = "yansi" -version = "1.0.1" +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "yaml-rust2" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "818913695e83ece1f8d2a1c52d54484b7b46d0f9c06beeb2649b9da50d9b512d" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink", +] + +[[package]] +name = "yoke" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure", +] [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.100", ] diff --git a/Cargo.toml b/Cargo.toml index 1181f37..1dc973c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,19 +3,46 @@ name = "dog" version = "0.1.0" edition = "2021" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -serenity = { version = "0.11", default-features = false, features = ["client", "gateway", "rustls_backend", "model"] } -tokio = { version = "1.32", features = ["macros", "rt-multi-thread"] } -figment = { version = "0.10", features = ["json", "env"] } -serde = { version = "1.0", features = ["derive"] } -poise = "0.5" -log = "0.4" -url = "2.4" -env_logger = "0.10" -chrono = "0.4" -duration-str = "0.7" -async-trait = "0.1" -reqwest = "0.11.27" -regex = "1.10.6" \ No newline at end of file +[dependencies.chrono] +version = "0.4" + +[dependencies.config] +version = "0.15" +features = [ + "json" +] + +[dependencies.duration-str] +version = "0.17" + +[dependencies.poise] +version = "0.6" + +[dependencies.regex] +version = "1" + +[dependencies.reqwest] +version = "0.12" + +[dependencies.serde] +version = "1" + +[dependencies.serenity] +version = "0.12" +features = [ + "rustls_backend" +] + +[dependencies.tokio] +version = "1.32" +features = [ + "macros", + "rt-multi-thread" +] + +[profile.release] +codegen-units = 1 +lto = true +opt-level = "s" +panic = "abort" +strip = true diff --git a/Dockerfile b/Dockerfile index 08717db..51899a4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.71.1-alpine as build +FROM rust:1.82.0-alpine as build RUN apk update RUN apk add pkgconfig openssl openssl-dev musl-dev @@ -12,7 +12,7 @@ COPY . . RUN cargo build --target x86_64-unknown-linux-musl --release -FROM ubuntu:24.10 +FROM ubuntu:25.04 WORKDIR /app diff --git a/devenv.lock b/devenv.lock new file mode 100644 index 0000000..0b61657 --- /dev/null +++ b/devenv.lock @@ -0,0 +1,103 @@ +{ + "nodes": { + "devenv": { + "locked": { + "dir": "src/modules", + "lastModified": 1743783972, + "owner": "cachix", + "repo": "devenv", + "rev": "2f53e2f867e0c2ba18b880e66169366e5f8ca554", + "type": "github" + }, + "original": { + "dir": "src/modules", + "owner": "cachix", + "repo": "devenv", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1733328505, + "owner": "edolstra", + "repo": "flake-compat", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1742649964, + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1733477122, + "owner": "cachix", + "repo": "devenv-nixpkgs", + "rev": "7bd9e84d0452f6d2e63b6e6da29fe73fac951857", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "rolling", + "repo": "devenv-nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "devenv": "devenv", + "git-hooks": "git-hooks", + "nixpkgs": "nixpkgs", + "pre-commit-hooks": [ + "git-hooks" + ] + } + } + }, + "root": "root", + "version": 7 +} diff --git a/devenv.nix b/devenv.nix new file mode 100644 index 0000000..fc9868e --- /dev/null +++ b/devenv.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + packages = with pkgs; [ + openssl + ]; + + languages = { + rust.enable = true; + }; +} diff --git a/devenv.yaml b/devenv.yaml new file mode 100644 index 0000000..68616a4 --- /dev/null +++ b/devenv.yaml @@ -0,0 +1,4 @@ +# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json +inputs: + nixpkgs: + url: github:cachix/devenv-nixpkgs/rolling diff --git a/src/command/admin/ban.rs b/src/command/admin/ban.rs index aa4c598..f4511d6 100644 --- a/src/command/admin/ban.rs +++ b/src/command/admin/ban.rs @@ -2,10 +2,6 @@ use poise::serenity_prelude as serenity; use crate::types; -use crate::util; -use crate::util::macros::log_sys; -use crate::util::traits::ExtendContext; - #[derive(Debug, poise::Modal)] #[name = "ban"] #[allow(dead_code)] @@ -23,7 +19,7 @@ struct BanModal { hide_in_help )] pub async fn ban_user( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, user: serenity::User, ) -> Result<(), types::Error> { ban(ctx, user).await @@ -36,16 +32,16 @@ pub async fn ban_user( hide_in_help )] pub async fn ban_message( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, msg: serenity::Message, ) -> Result<(), types::Error> { ban(ctx, msg.author).await } -async fn ban(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), types::Error> { - let guild = ctx.guild().unwrap(); +async fn ban(ctx: types::ContextApp<'_>, user: serenity::User) -> Result<(), types::Error> { + let guild = ctx.guild_id().unwrap(); - let Ok(bans) = guild.bans(ctx.http()).await else { + let Ok(bans) = guild.bans(ctx, None, None).await else { return Ok(()); }; @@ -70,40 +66,39 @@ async fn ban(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), typ return Ok(()); }; if let Err(_) = guild - .ban_with_reason(ctx.http(), user.id, 0, &form.reason) + .ban_with_reason(ctx, user.id, 0, &form.reason) .await { - ctx.send(|c| { - c.content("üye yasaklanamadı"); - c.ephemeral(true) - }) - .await?; + ctx.send( + poise::CreateReply::default() + .content("üye yasaklanamadı") + .ephemeral(true) + ).await?; return Ok(()); } - ctx.send_message(format!("{} yasaklandı", user)).await?; + //ctx.send_message(format!("{} yasaklandı", user)).await?; - log_sys!(ctx, "{} {} tarafından yasaklandı", user, ctx.author()); + //log_sys!(ctx, "{} {} tarafından yasaklandı", user, ctx.author()); return Ok(()); } async fn unban( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, user: serenity::User, - guild: serenity::Guild, + guild: serenity::GuildId, ) -> Result<(), types::Error> { - let result = - util::interactions::send_confirm(ctx, "bu üye zaten banlı banı kaldırmak istiyor musunuz?") - .await?; + let result = true; //util::interactions::send_confirm(ctx, "bu üye zaten banlı banı kaldırmak istiyor musunuz?") + // .await?; if result { - guild.unban(ctx.http(), &user).await?; + guild.unban(ctx, &user).await?; - ctx.send_message(format!("{} banı kaldırıldı", user)) - .await?; + //ctx.send_message(format!("{} banı kaldırıldı", user)) + // .await?; - log_sys!(ctx, "{} banı {} tarafından kaldırıldı", user, ctx.author()); + //log_sys!(ctx, "{} banı {} tarafından kaldırıldı", user, ctx.author()); } Ok(()) diff --git a/src/command/admin/kick.rs b/src/command/admin/kick.rs index 8a8091f..30527ff 100644 --- a/src/command/admin/kick.rs +++ b/src/command/admin/kick.rs @@ -1,8 +1,6 @@ use poise::serenity_prelude as serenity; use crate::types; -use crate::util::macros::log_sys; -use crate::util::traits::ExtendContext; #[derive(Debug, poise::Modal)] #[name = "kick"] @@ -21,7 +19,7 @@ struct KickModal { hide_in_help )] pub async fn kick_user( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, user: serenity::User, ) -> Result<(), types::Error> { kick(ctx, user).await @@ -34,21 +32,21 @@ pub async fn kick_user( hide_in_help )] pub async fn kick_message( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, msg: serenity::Message, ) -> Result<(), types::Error> { kick(ctx, msg.author).await } -async fn kick(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), types::Error> { +async fn kick(ctx: types::ContextApp<'_>, user: serenity::User) -> Result<(), types::Error> { let guild = ctx.guild_id().unwrap(); - if guild.member(ctx.http(), &user.id).await.is_err() { - ctx.send(|c| { - c.content("üye bulunamadığından atılamadı"); - c.ephemeral(true) - }) - .await?; + if guild.member(ctx, &user.id).await.is_err() { + ctx.send( + poise::CreateReply::default() + .content("üye bulunamadığından atılamadı") + .ephemeral(true) + ).await?; return Ok(()); }; @@ -66,12 +64,12 @@ async fn kick(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), ty }; guild - .kick_with_reason(ctx.http(), user.id, &form.reason) + .kick_with_reason(ctx, user.id, &form.reason) .await?; - ctx.send_message(format!("{} atıldı", user)).await?; + //ctx.send_message(format!("{} atıldı", user)).await?; - log_sys!(ctx, "{} {} tarafından atıldı", user, ctx.author()); + //log_sys!(ctx, "{} {} tarafından atıldı", user, ctx.author()); return Ok(()); } diff --git a/src/command/admin/mod.rs b/src/command/admin/mod.rs index af79732..e75e1d0 100644 --- a/src/command/admin/mod.rs +++ b/src/command/admin/mod.rs @@ -3,12 +3,12 @@ use crate::types; mod ban; mod kick; mod mute; -mod pin; +//mod pin; mod purge; mod say; mod warn; -pub fn commands() -> types::CommandVec { +pub fn commands() -> Vec { return vec![ ban::ban_user(), ban::ban_message(), @@ -23,6 +23,6 @@ pub fn commands() -> types::CommandVec { warn::warn_message(), warn::unwarn_user(), warn::unwarn_message(), - pin::pin(), + //pin::pin(), ]; } diff --git a/src/command/admin/mute.rs b/src/command/admin/mute.rs index bae3c29..1936e2b 100644 --- a/src/command/admin/mute.rs +++ b/src/command/admin/mute.rs @@ -3,10 +3,6 @@ use poise::serenity_prelude as serenity; use crate::types; -use crate::util; -use crate::util::macros::log_sys; -use crate::util::traits::ExtendContext; - #[derive(Debug, poise::Modal)] #[name = "mute"] #[allow(dead_code)] @@ -26,7 +22,7 @@ struct MuteModal { hide_in_help )] pub async fn mute_user( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, user: serenity::User, ) -> Result<(), types::Error> { mute(ctx, user).await @@ -39,21 +35,21 @@ pub async fn mute_user( hide_in_help )] pub async fn mute_message( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, msg: serenity::Message, ) -> Result<(), types::Error> { mute(ctx, msg.author).await } -async fn mute(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), types::Error> { +async fn mute(ctx: types::ContextApp<'_>, user: serenity::User) -> Result<(), types::Error> { let guild = ctx.guild_id().unwrap(); - let Ok(mut member) = guild.member(ctx.http(), &user.id).await else { - ctx.send(|c| { - c.content("üye bulunamadığından susturulamadı"); - c.ephemeral(true) - }) - .await?; + let Ok(mut member) = guild.member(ctx, &user.id).await else { + ctx.send( + poise::CreateReply::default() + .content("üye bulunamadığından susturulamadı") + .ephemeral(true) + ).await?; return Ok(()); }; @@ -75,61 +71,70 @@ async fn mute(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), ty return Ok(()); }; + let Ok(duration) = duration_str::parse(&form.duration) else { + ctx.send( + poise::CreateReply::default() + .content("belirtilen süre geçersiz") + .ephemeral(true) + ).await?; + return Ok(()); + }; + if let Err(_) = member .disable_communication_until_datetime( - ctx.http(), + ctx, serenity::Timestamp::from( - chrono::Utc::now() + duration_str::parse(&form.duration).unwrap(), + chrono::Utc::now() + duration, ), ) .await { - ctx.send(|c| { - c.content("üye susturulmadı"); - c.ephemeral(true) - }) - .await?; + ctx.send( + poise::CreateReply::default() + .content("üye susturulmadı") + .ephemeral(true) + ).await?; return Ok(()); } - ctx.send_message(format!("{} {} süreliğine susturuldu", user, &form.duration)) - .await?; + //ctx.send_message(format!("{} {} süreliğine susturuldu", user, &form.duration)) + // .await?; - log_sys!( - ctx, - "{} {} süreliğine {} tarafından susturuldu", - user, - &form.duration, - ctx.author() - ); + //log_sys!( + // ctx, + // "{} {} süreliğine {} tarafından susturuldu", + // user, + // &form.duration, + // ctx.author() + //); return Ok(()); } async fn unmute( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, user: serenity::User, _guild: serenity::GuildId, mut member: serenity::Member, ) -> Result<(), types::Error> { - let result = util::interactions::send_confirm( - ctx, - "bu üye zaten susturulmuş susturmayı kaldırmak istiyor musunuz?", - ) - .await?; + let result = true; //util::interactions::send_confirm( + // ctx, + // "bu üye zaten susturulmuş susturmayı kaldırmak istiyor musunuz?", + //) + //.await?; if result { - member.enable_communication(ctx.http()).await?; + member.enable_communication(ctx).await?; - ctx.send_message(format!("{} susturması kaldırıldı", user)) - .await?; + //ctx.send_message(format!("{} susturması kaldırıldı", user)) + // .await?; - log_sys!( - ctx, - "{} susturması {} tarafından kaldırıldı", - user, - ctx.author() - ); + //log_sys!( + // ctx, + // "{} susturması {} tarafından kaldırıldı", + // user, + // ctx.author() + //); } Ok(()) diff --git a/src/command/admin/pin/create.rs b/src/command/admin/pin/create.rs index b1f1124..54a500e 100644 --- a/src/command/admin/pin/create.rs +++ b/src/command/admin/pin/create.rs @@ -1,12 +1,9 @@ -use ::serenity::json; -use ::serenity::prelude::Mentionable; use poise::serenity_prelude as serenity; - -use crate::util::macros::log_sys; -use crate::{types, util}; +use serenity::Mentionable; +use serenity::json; pub async fn handle( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, msg: serenity::Message, ) -> Result<(), types::Error> { let Some(result) = util::interactions::send_dropdown( @@ -21,12 +18,12 @@ pub async fn handle( let board = ctx.data().config.boards.get(&result).cloned().unwrap(); - let webhook = board.webhook(ctx.http()).await?; + let webhook = board.webhook(ctx).await?; let member = ctx .guild() .unwrap() - .member(ctx.http(), msg.author.id) + .member(ctx, msg.author.id) .await?; let name = member.display_name().clone(); @@ -35,7 +32,7 @@ pub async fn handle( .unwrap_or_else(|| msg.author.avatar_url().unwrap()); webhook - .execute(ctx.http(), true, |w| { + .execute(ctx, true, |w| { w.username(&name) .avatar_url(&avatar) .content(msg.content.clone()); @@ -61,17 +58,17 @@ pub async fn handle( .await?; msg.reply( - ctx.http(), + ctx, format!("mesaj {} panosuna pinlendi", board.channel.mention(),), ) .await?; - log_sys!( - ctx, - "{} {} mesajını {} panosuna pinledi", - ctx.author(), - msg.link(), - board.channel.mention() - ); + //log_sys!( + // ctx, + // "{} {} mesajını {} panosuna pinledi", + // ctx.author(), + // msg.link(), + // board.channel.mention() + //); Ok(()) } diff --git a/src/command/admin/pin/edit.rs b/src/command/admin/pin/edit.rs index eba61b5..29f16e5 100644 --- a/src/command/admin/pin/edit.rs +++ b/src/command/admin/pin/edit.rs @@ -1,8 +1,7 @@ -use ::serenity::json; use poise::serenity_prelude as serenity; +use serenity::json; use crate::types; -use crate::util::traits::ExtendContext; #[derive(Debug, poise::Modal)] #[name = "pini düzenle"] @@ -15,15 +14,15 @@ struct EditPinModal { } pub async fn handle( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, mut msg: serenity::Message, ) -> Result<(), types::Error> { let Some(webhook_id) = msg.webhook_id else { - ctx.send(|c| { - c.content("not a webhook message"); - c.ephemeral(true) - }) - .await?; + ctx.send( + poise::CreateReply::default() + .content("not a webhook message") + .ephemeral(true) + ).await?; return Ok(()); }; @@ -65,7 +64,7 @@ pub async fn handle( return Ok(()); } - let webhook = webhook_id.to_webhook(ctx.http()).await?; + let webhook = webhook_id.to_webhook(ctx).await?; if let Some((index, field)) = note_field { if let Some(new) = &form.note { @@ -88,17 +87,17 @@ pub async fn handle( .collect(); webhook - .edit_message(ctx.http(), msg.id, |e| e.embeds(embeds)) + .edit_message(ctx, msg.id, |e| e.embeds(embeds)) .await?; - ctx.log_sys_with_embed( - format!("{} {} pinini düzenledi", ctx.author(), msg.link()), - |c| { - c.field("eski", note_value.unwrap_or_default(), true); - c.field("yeni", form.note.unwrap_or_default(), true) - }, - ) - .await?; + //ctx.log_sys_with_embed( + // format!("{} {} pinini düzenledi", ctx.author(), msg.link()), + // |c| { + // c.field("eski", note_value.unwrap_or_default(), true); + // c.field("yeni", form.note.unwrap_or_default(), true) + // }, + //) + //.await?; Ok(()) } diff --git a/src/command/admin/pin/mod.rs b/src/command/admin/pin/mod.rs index 49a8974..b855572 100644 --- a/src/command/admin/pin/mod.rs +++ b/src/command/admin/pin/mod.rs @@ -1,5 +1,5 @@ -use ::serenity::json; use poise::serenity_prelude as serenity; +use serenity::json; use crate::types; @@ -12,7 +12,7 @@ mod edit; guild_only, hide_in_help )] -pub async fn pin(ctx: types::AppContext<'_>, msg: serenity::Message) -> Result<(), types::Error> { +pub async fn pin(ctx: types::ContextApp<'_>, msg: serenity::Message) -> Result<(), types::Error> { let result = ctx .data .config diff --git a/src/command/admin/purge.rs b/src/command/admin/purge.rs index 52d878b..a9adf1b 100644 --- a/src/command/admin/purge.rs +++ b/src/command/admin/purge.rs @@ -1,19 +1,21 @@ -use ::serenity::prelude::Mentionable; use poise::serenity_prelude as serenity; +use serenity::Mentionable; use crate::types; -use crate::util::macros::log_sys; -const LIMIT: u64 = 100; +const LIMIT: u8 = 100; #[poise::command(slash_command, category = "admin", guild_only)] pub async fn purge( - ctx: types::AppContext<'_>, - #[max = 100] count: u64, + ctx: types::ContextApp<'_>, + #[max = 100] count: u8, ) -> Result<(), types::Error> { let messages = ctx .channel_id() - .messages(ctx.http(), |g| g.limit(count)) + .messages( + ctx, serenity::GetMessages::new() + .limit(count) + ) .await?; delete(ctx, messages).await @@ -26,7 +28,7 @@ pub async fn purge( hide_in_help )] pub async fn purge_message( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, msg: serenity::Message, ) -> Result<(), types::Error> { let Some(form) = PurgeModal::execute(ctx).await else { @@ -36,7 +38,11 @@ pub async fn purge_message( let Some((before, after)) = form.parse() else { let mut messages = ctx .channel_id() - .messages(ctx.http(), |g| g.after(&msg).limit(101)) + .messages( + ctx, serenity::GetMessages::new() + .after(&msg) + .limit(101) + ) .await?; if messages.len() <= LIMIT as usize { @@ -48,20 +54,28 @@ pub async fn purge_message( }; if before == 0 && after == 0 { - msg.delete(ctx.http()).await?; + msg.delete(ctx).await?; return Ok(()); } let mut messages_before = if before > 0 { ctx.channel_id() - .messages(ctx.http(), |g| g.before(&msg).limit(before)) + .messages( + ctx, serenity::GetMessages::new() + .after(&msg) + .limit(before) + ) .await? } else { vec![] }; let mut messages_after = if after > 0 { ctx.channel_id() - .messages(ctx.http(), |g| g.after(&msg).limit(after)) + .messages( + ctx, serenity::GetMessages::new() + .after(&msg) + .limit(after) + ) .await? } else { vec![] @@ -84,7 +98,7 @@ struct PurgeModal { } impl PurgeModal { - async fn execute(ctx: types::AppContext<'_>) -> Option { + async fn execute(ctx: types::ContextApp<'_>) -> Option { poise::execute_modal( ctx, Some(Self { @@ -96,7 +110,7 @@ impl PurgeModal { .await .ok()? } - fn parse(&self) -> Option<(u64, u64)> { + fn parse(&self) -> Option<(u8, u8)> { let b = self.before.as_ref().map(|b| b.parse().unwrap_or(0)); let a = self.after.as_ref().map(|a| a.parse().unwrap_or(0)); @@ -116,26 +130,26 @@ impl PurgeModal { } async fn delete( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, messages: Vec, ) -> Result<(), types::Error> { ctx.channel_id() - .delete_messages(ctx.http(), &messages) + .delete_messages(ctx, &messages) .await?; - ctx.send(|c| { - c.content(format!("{} mesaj silindi", messages.len())); - c.ephemeral(true) - }) - .await?; + ctx.send( + poise::CreateReply::default() + .content(format!("{} mesaj silindi", messages.len())) + .ephemeral(true) + ).await?; - log_sys!( - ctx, - "{} {} kanalında {} mesaj silindi", - ctx.author(), - ctx.channel_id().mention(), - messages.len() - ); + //log_sys!( + // ctx, + // "{} {} kanalında {} mesaj silindi", + // ctx.author(), + // ctx.channel_id().mention(), + // messages.len() + //); let log_member = ctx.data.config.logs.member; @@ -144,29 +158,29 @@ async fn delete( continue; } - log_member - .send_message(ctx.http(), |c| { - c.add_embed(|c| { - c.description(format!( - "{} kanalında {} tarafından gönderilen bir mesaj kaldırıldı", - ctx.channel_id().mention(), - message.author, - )) - }); - - if !message.content.is_empty() { - c.add_embed(|c| c.description(message.content)); - } - - for attachment in &message.attachments { - c.add_file(serenity::AttachmentType::Image( - url::Url::parse(&attachment.url).unwrap(), - )); - } - - c - }) - .await?; + //log_member + // .send_message(ctx, |c| { + // c.add_embed(|c| { + // c.description(format!( + // "{} kanalında {} tarafından gönderilen bir mesaj kaldırıldı", + // ctx.channel_id().mention(), + // message.author, + // )) + // }); + + // if !message.content.is_empty() { + // c.add_embed(|c| c.description(message.content)); + // } + + // for attachment in &message.attachments { + // c.add_file(serenity::AttachmentType::Image( + // url::Url::parse(&attachment.url).unwrap(), + // )); + // } + + // c + // }) + // .await?; } Ok(()) } diff --git a/src/command/admin/say.rs b/src/command/admin/say.rs index d1d793d..361ccc5 100644 --- a/src/command/admin/say.rs +++ b/src/command/admin/say.rs @@ -1,8 +1,6 @@ use poise::serenity_prelude as serenity; use crate::types; -use crate::util::macros::log_sys; -use crate::util::traits::{ExtendChannelId, ExtendContext}; #[derive(Debug, poise::Modal)] #[name = "say"] @@ -16,7 +14,7 @@ struct SayModal { #[poise::command(slash_command, category = "admin", guild_only)] pub async fn say( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, channel: Option, ) -> Result<(), types::Error> { let Some(form) = ({ @@ -34,15 +32,16 @@ pub async fn say( let target = channel.unwrap_or(ctx.channel_id()); - let message = target - .send_message_content(ctx.http(), form.message) - .await?; + let message= target.send_message( + ctx, serenity::CreateMessage::new() + .content(form.message) + ).await?; - log_sys!( - ctx, - "{} bot aracılığı ile {} mesajını gönderdi", - ctx.author(), - message.link() - ); + //log_sys!( + // ctx, + // "{} bot aracılığı ile {} mesajını gönderdi", + // ctx.author(), + // message.link() + //); Ok(()) } diff --git a/src/command/admin/warn.rs b/src/command/admin/warn.rs index 5e3514d..04f9d44 100644 --- a/src/command/admin/warn.rs +++ b/src/command/admin/warn.rs @@ -1,8 +1,6 @@ use poise::serenity_prelude as serenity; use crate::types; -use crate::util::macros::log_sys; -use crate::util::traits::ExtendContext; #[derive(Debug, poise::Modal)] #[name = "warn"] @@ -21,7 +19,7 @@ struct WarnModal { hide_in_help )] pub async fn warn_user( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, user: serenity::User, ) -> Result<(), types::Error> { warn(ctx, user).await @@ -34,21 +32,21 @@ pub async fn warn_user( hide_in_help )] pub async fn warn_message( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, msg: serenity::Message, ) -> Result<(), types::Error> { warn(ctx, msg.author).await } -async fn warn(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), types::Error> { +async fn warn(ctx: types::ContextApp<'_>, user: serenity::User) -> Result<(), types::Error> { let guild = ctx.guild_id().unwrap(); - let Ok(mut member) = guild.member(ctx.http(), &user.id).await else { - ctx.send(|c| { - c.content("üye bulunamadığından uyarılamadı"); - c.ephemeral(true) - }) - .await?; + let Ok(mut member) = guild.member(ctx, &user.id).await else { + ctx.send( + poise::CreateReply::default() + .content("üye bulunamadığından uyarılamadı") + .ephemeral(true) + ).await?; return Ok(()); }; @@ -65,7 +63,7 @@ async fn warn(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), ty return Ok(()); }; - let warns = &ctx.data.config.warns; + let warns = &ctx.data.config.roles.warnings; let Some(role) = warns.iter().find_map(|role| { if !member.roles.contains(role) { @@ -74,51 +72,51 @@ async fn warn(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), ty None } }) else { - ctx.send(|c| { - c.content("üye zaten yeterince uyarı aldı"); - c.ephemeral(true) - }) - .await?; + ctx.send( + poise::CreateReply::default() + .content("üye zaten yeterince uyarı aldı") + .ephemeral(true) + ).await?; return Ok(()); }; - member.add_role(ctx.http(), role).await?; + member.add_role(ctx, role).await?; - ctx.send_message(format!("{} uyarıldı", user)).await?; + //ctx.send_message(format!("{} uyarıldı", user)).await?; - ctx.log_sys_with_embed( - format!("{} {} tarafından uyarıldı", user, ctx.author()), - |c| c.field("sebep", form.reason, true), - ) - .await?; + //ctx.log_sys_with_embed( + // format!("{} {} tarafından uyarıldı", user, ctx.author()), + // |c| c.field("sebep", form.reason, true), + //) + //.await?; if warns.iter().all(|r| member.roles.contains(r)) { - ctx.send_message( - "üye uyarı hakkını doldurduğundan yönetim cezaya karar veresiye kadar susturulmuştur", - ) - .await?; + //ctx.send_message( + // "üye uyarı hakkını doldurduğundan yönetim cezaya karar veresiye kadar susturulmuştur", + //) + //.await?; if let Some(time) = member.communication_disabled_until { - log_sys!( - ctx, - "{} eski susturmasının bitmesine ", - user, - time.timestamp() - ); + //log_sys!( + // ctx, + // "{} eski susturmasının bitmesine ", + // user, + // time.timestamp() + //); } member .disable_communication_until_datetime( - ctx.http(), + ctx, serenity::Timestamp::from(chrono::Utc::now() + duration_str::parse("24d").unwrap()), ) .await?; - ctx.send_message(format!( - "{} cezasına karar verilesiye kadar susturuldu", - user - )) - .await?; + //ctx.send_message(format!( + // "{} cezasına karar verilesiye kadar susturuldu", + // user + //)) + //.await?; } Ok(()) @@ -131,7 +129,7 @@ async fn warn(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), ty hide_in_help )] pub async fn unwarn_user( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, user: serenity::User, ) -> Result<(), types::Error> { unwarn(ctx, user).await @@ -144,25 +142,25 @@ pub async fn unwarn_user( hide_in_help )] pub async fn unwarn_message( - ctx: types::AppContext<'_>, + ctx: types::ContextApp<'_>, msg: serenity::Message, ) -> Result<(), types::Error> { unwarn(ctx, msg.author).await } -pub async fn unwarn(ctx: types::AppContext<'_>, user: serenity::User) -> Result<(), types::Error> { +pub async fn unwarn(ctx: types::ContextApp<'_>, user: serenity::User) -> Result<(), types::Error> { let guild = ctx.guild_id().unwrap(); - let Ok(mut member) = guild.member(ctx.http(), &user.id).await else { - ctx.send(|c| { - c.content("üye bulunamadığından uyarı kaldırılamadı"); - c.ephemeral(true) - }) - .await?; + let Ok(mut member) = guild.member(ctx, &user.id).await else { + ctx.send( + poise::CreateReply::default() + .content("üye bulunamadığından uyarı kaldırılamadı") + .ephemeral(true) + ).await?; return Ok(()); }; - let warns = ctx.data.config.warns.clone(); + let warns = ctx.data.config.roles.warnings.clone(); let Some(role) = warns.iter().rev().find_map(|role| { if member.roles.contains(role) { @@ -171,25 +169,25 @@ pub async fn unwarn(ctx: types::AppContext<'_>, user: serenity::User) -> Result< None } }) else { - ctx.send(|c| { - c.content("üye hiç uyarı almamış"); - c.ephemeral(true) - }) - .await?; + ctx.send( + poise::CreateReply::default() + .content("üye hiç uyarı almamış") + .ephemeral(true) + ).await?; return Ok(()); }; - member.remove_role(ctx.http(), role).await?; + member.remove_role(ctx, role).await?; - ctx.send_message(format!("{} bir uyarısı kaldırıldı", member)) - .await?; + //ctx.send_message(format!("{} bir uyarısı kaldırıldı", member)) + // .await?; - log_sys!( - ctx, - "{} bir uyarısı {} tarafından kaldırıldı", - member, - ctx.author() - ); + //log_sys!( + // ctx, + // "{} bir uyarısı {} tarafından kaldırıldı", + // member, + // ctx.author() + //); Ok(()) } diff --git a/src/command/mod.rs b/src/command/mod.rs index c2c4132..d7379eb 100644 --- a/src/command/mod.rs +++ b/src/command/mod.rs @@ -2,6 +2,11 @@ use crate::types; mod admin; -pub fn list() -> types::CommandVec { - vec![admin::commands()].into_iter().flatten().collect() +pub fn list() -> Vec { + vec![ + admin::commands() + ] + .into_iter() + .flatten() + .collect() } diff --git a/src/config.rs b/src/config.rs deleted file mode 100644 index c533f06..0000000 --- a/src/config.rs +++ /dev/null @@ -1,48 +0,0 @@ -use figment::{ - providers::{Env, Format, Json}, - Figment, -}; -use poise::serenity_prelude as serenity; -use serde::Deserialize; -use std::collections::HashMap; - -#[derive(Clone, Deserialize)] -pub struct WebhookChannel { - pub webhook: String, - pub channel: serenity::ChannelId, -} - -impl WebhookChannel { - pub async fn webhook(&self, http: H) -> serenity::Result - where - H: AsRef, - { - serenity::Webhook::from_url(http, &self.webhook).await - } -} - -#[derive(Deserialize)] -pub struct LogChannels { - pub system: serenity::ChannelId, - pub member: serenity::ChannelId, -} - -#[derive(Deserialize)] -pub struct Config { - pub token: String, - pub warns: Vec, - pub boards: HashMap, - pub logs: LogChannels, - pub admins: Vec, - pub autorole: serenity::RoleId, - pub guild_id: serenity::GuildId, -} - -impl Config { - pub fn load() -> figment::error::Result { - Figment::new() - .merge(Json::file("Config.json")) - .merge(Env::prefixed("DOG_")) - .extract() - } -} diff --git a/src/handler/command.rs b/src/handler/command.rs index 6b5e02b..48ea11a 100644 --- a/src/handler/command.rs +++ b/src/handler/command.rs @@ -1,31 +1,25 @@ use crate::types; -pub async fn pre_handle(ctx: types::Context<'_>) { - println!("Executing command {}...", ctx.command().qualified_name); -} +pub async fn handle(ctx: types::Context<'_>) -> Result { + let Some(category) = &ctx.command().category else { + return Ok(true); + }; -pub async fn post_handle(ctx: types::Context<'_>) { - println!("Executed command {}!", ctx.command().qualified_name); -} + if category == "admin" { + let admins = &ctx.data().config.admins; + + if admins.contains(&ctx.author().id) { + return Ok(true); + } + + ctx.send( + poise::CreateReply::default() + .content("bu komutu kullanmanız için yönetici olmanız lazım") + .ephemeral(true) + ).await?; -pub async fn run_handle(ctx: types::Context<'_>) -> Result { - let config = &ctx.data().config; + return Ok(false); + } - Ok(match ctx.command().category { - Some(category) => match category { - "admin" => { - let is = config.admins.contains(&ctx.author().id); - if !is { - ctx.send(|c| { - c.content("bu komutu kullanmanız için yönetici olmanız lazım"); - c.ephemeral(true) - }) - .await?; - } - is - } - &_ => true, - }, - None => true, - }) + Ok(true) } diff --git a/src/handler/error.rs b/src/handler/error.rs index d75cfd0..ba79b52 100644 --- a/src/handler/error.rs +++ b/src/handler/error.rs @@ -1,14 +1,16 @@ use crate::types; -pub async fn handle(error: types::FrameworkError<'_>) { +pub async fn handle(error: types::ErrorFramework<'_>) { match error { - poise::FrameworkError::Setup { error, .. } => panic!("Failed to start bot: {:?}", error), - poise::FrameworkError::Command { error, ctx } => { - println!("Error in command `{}`: {:?}", ctx.command().name, error,); + poise::FrameworkError::Setup { error, .. } => { + panic!("failed to start bot: {:?}", error) + }, + poise::FrameworkError::Command { error, ctx , .. } => { + println!("error in command `{}`: {:?}", ctx.command().name, error,); } error => { if let Err(e) = poise::builtins::on_error(error).await { - println!("Error while handling error: {}", e) + println!("error while handling error: {}", e) } } } diff --git a/src/handler/event/guild_member_add.rs b/src/handler/event/guild_member_add.rs index bcc7049..934f126 100644 --- a/src/handler/event/guild_member_add.rs +++ b/src/handler/event/guild_member_add.rs @@ -1,20 +1,19 @@ use poise::serenity_prelude as serenity; + use crate::types; pub async fn handle( ctx: &serenity::Context, - _framework: types::FrameworkContext<'_>, + _framework: types::ContextFramework<'_>, data: &types::Data, new_member: &serenity::Member, // Change here ) -> Result<(), types::Error> { - println!("New member joined: {:?}", new_member.user.name); - let mut member = new_member.clone(); - let role = data.config.autorole; + let role = data.config.roles.default; - if let Err(err) = member.add_role(&ctx.http, role).await { - eprintln!("Error adding role: {:?}", err); + if let Err(err) = new_member.add_role(ctx, role).await { + eprintln!("error adding role: {:?}", err); } else { - println!("Successfully added role to: {:?}", new_member.user.name); + println!("successfully added role to: {:?}", new_member.user.name); } Ok(()) diff --git a/src/handler/event/message.rs b/src/handler/event/message.rs index e3d0dff..086aedc 100644 --- a/src/handler/event/message.rs +++ b/src/handler/event/message.rs @@ -1,68 +1,90 @@ -use poise::serenity_prelude::{Message, Context}; -use reqwest::get; +use poise::serenity_prelude as serenity; use regex::Regex; +use std::sync::LazyLock; + use crate::types; +const GITHUB_REGEX: LazyLock = LazyLock::new(|| { + Regex::new(r"https://github\.com/(?P[^/]+)/(?P[^/]+)/blob/(?P.+?)/(?P[^/]+)\.(?P[^#]+)#L(?P\d+)(?:-L(?P\d+))?").unwrap() +}); + pub async fn handle( - ctx: &Context, - _framework: types::FrameworkContext<'_>, - data: &types::Data, - message: &Message, + ctx: &serenity::Context, + _framework: types::ContextFramework<'_>, + _data: &types::Data, + message: &serenity::Message, ) -> Result<(), types::Error> { if message.author.bot { return Ok(()); } - let msg = message.content.clone(); - - let re = Regex::new(r"https://github\.com/(?P[^/]+)/(?P[^/]+)/blob/(?P.+?)/(?P[^/]+)\.(?P[^#]+)#L(?P\d+)(?:-L(?P\d+))?").unwrap(); - - if let Some(captures) = re.captures(&msg) { - let user = &captures["user"]; - let repo = &captures["repo"]; - let path = &captures["path"]; - let file = &captures["file"]; - let extension = &captures["extension"]; - let start_line = &captures["start_line"]; - let end_line = captures.name("end_line").map(|m| m.as_str()).unwrap_or(start_line); - - let url = format!( - "https://raw.githubusercontent.com/{}/{}/{}/{}.{}", - user, repo, path, file, extension - ); - - let res = get(&url).await?; - let res_text = res.text().await?; - - let base = start_line.parse::().unwrap(); - let end = end_line.parse::().unwrap(); - if end == base { - let start = base - 5; - let end = base + 5; - let mut lines = res_text.lines().enumerate().filter(|(i, _)| { + let Some(captures) = GITHUB_REGEX.captures(&message.content) else { + return Ok(()); + }; + + let user = &captures["user"]; + let repo = &captures["repo"]; + let path = &captures["path"]; + let file = &captures["file"]; + let extension = &captures["extension"]; + let start_line = &captures["start_line"]; + let end_line = captures + .name("end_line") + .map(|m| m.as_str()) + .unwrap_or(start_line); + + let url = format!( + "https://raw.githubusercontent.com/{}/{}/{}/{}.{}", + user, repo, path, file, extension + ); + + let res = reqwest::get(&url).await?; + let res_text = res.text().await?; + + let base = start_line.parse::().unwrap(); + let end = end_line.parse::().unwrap(); + + if end == base { + let mut start = base - 5; + let end = base + 5; + + if start < 0 { + start = 0; + } + + let mut lines = res_text + .lines() + .enumerate() + .filter(|(i, _)| { *i >= start as usize && *i <= end as usize }); - let mut result = String::new(); - while let Some((i, line)) = lines.next() { - result.push_str(&format!("{}: {}\n", i, line)); - } + let mut result = String::new(); + while let Some((i, line)) = lines.next() { + result.push_str(&format!("{}: {}\n", i+1, line)); + } - message.reply(&ctx.http, format!("```{}\n{}\n```", extension, result)).await?; - } else { - let mut lines = res_text.lines().enumerate().filter(|(i, _)| { - *i >= base as usize && *i <= end as usize + message.reply( + ctx, format!("```{}\n{}\n```", extension, result) + ).await?; + } else { + let mut lines = res_text + .lines() + .enumerate() + .filter(|(i, _)| { + *i + 1 >= base as usize && *i + 1 <= end as usize }); - let mut result = String::new(); - while let Some((i, line)) = lines.next() { - result.push_str(&format!("{}: {}\n", i, line)); - } - - message.reply(&ctx.http, format!("```{}\n{}\n```", extension, result)).await?; + let mut result = String::new(); + while let Some((i, line)) = lines.next() { + result.push_str(&format!("{}: {}\n", i+1, line)); } + + message.reply( + ctx, format!("```{}\n{}\n```", extension, result) + ).await?; } Ok(()) -} \ No newline at end of file +} diff --git a/src/handler/event/message_delete.rs b/src/handler/event/message_delete.rs index ec543b1..f02c566 100644 --- a/src/handler/event/message_delete.rs +++ b/src/handler/event/message_delete.rs @@ -1,23 +1,25 @@ -use ::serenity::prelude::Mentionable; use poise::serenity_prelude as serenity; +use serenity::Mentionable; use crate::types; pub async fn handle( ctx: &serenity::Context, - _framework: types::FrameworkContext<'_>, + _framework: types::ContextFramework<'_>, data: &types::Data, channel_id: &serenity::ChannelId, message_id: &serenity::MessageId, - _guild_id: &Option, + guild_id: &Option, ) -> Result<(), types::Error> { - let message = ctx.cache.message(channel_id, message_id); + let message = ctx.cache + .message(channel_id, message_id) + .map(|x| x.to_owned()); let Some(message) = message else { return Ok(()); }; - if message.guild_id.is_none() { + if guild_id.is_none() { return Ok(()); } @@ -27,30 +29,32 @@ pub async fn handle( return Ok(()); } - let log = logs.member; - - log.send_message(ctx, |c| { - c.add_embed(|c| { - c.description(format!( - "{} kanalında {} tarafından gönderilen bir mesaj kaldırıldı", - channel_id.mention(), - message.author, - )) - }); - - if !message.content.is_empty() { - c.add_embed(|c| c.description(message.content)); - } - - for attachment in &message.attachments { - c.add_file(serenity::AttachmentType::Image( - url::Url::parse(&attachment.url).unwrap(), - )); - } - - c - }) - .await?; + let mut builder = serenity::CreateMessage::new() + .add_embed( + serenity::CreateEmbed::new() + .description(format!( + "{} kanalında {} tarafından gönderilen bir mesaj kaldırıldı", + channel_id.mention(), + message.author, + )) + ); + + if !message.content.is_empty() { + builder = builder.add_embed( + serenity::CreateEmbed::new() + .description(&message.content) + ); + } + + for attachment in &message.attachments { + let file = serenity::CreateAttachment::url(ctx, &attachment.url) + .await?; + + builder = builder.add_file(file); + } + + logs.member.send_message(ctx, builder) + .await?; Ok(()) } diff --git a/src/handler/event/message_update.rs b/src/handler/event/message_update.rs index 575be5f..a7bd5dd 100644 --- a/src/handler/event/message_update.rs +++ b/src/handler/event/message_update.rs @@ -1,11 +1,11 @@ -use ::serenity::prelude::Mentionable; use poise::serenity_prelude as serenity; +use serenity::Mentionable; use crate::types; pub async fn handle( ctx: &serenity::Context, - _framework: types::FrameworkContext<'_>, + _framework: types::ContextFramework<'_>, data: &types::Data, old: &Option, new: &Option, @@ -26,19 +26,21 @@ pub async fn handle( return Ok(()); } - data.log_mem_with_embed( - ctx, - format!( + let embed = serenity::CreateEmbed::new() + .description(format!( "{} {} kanalında gönderdiği bir mesajı düzenledi", old_message.author, old_message.channel_id.mention(), - ), - |c| { - c.field("eski", old_message.content.clone(), true); - c.field("yeni", new_message.content.clone(), true) - }, - ) - .await?; + )) + .field("eski", old_message.content.clone(), true) + .field("yeni", new_message.content.clone(), true); + + let logs = &data.config.logs; + + logs.member.send_message( + ctx, serenity::CreateMessage::new() + .add_embed(embed) + ).await?; Ok(()) } diff --git a/src/handler/event/mod.rs b/src/handler/event/mod.rs index 2aa8d50..3731511 100644 --- a/src/handler/event/mod.rs +++ b/src/handler/event/mod.rs @@ -1,5 +1,5 @@ use poise::serenity_prelude as serenity; -use poise::Event; +use serenity::FullEvent; use crate::types; @@ -11,40 +11,51 @@ mod message; pub async fn handle( ctx: &serenity::Context, - framework: types::FrameworkContext<'_>, + event: &FullEvent, + framework: types::ContextFramework<'_>, data: &types::Data, - event: &Event<'_>, ) -> Result<(), types::Error> { match event { - Event::MessageDelete { - channel_id, - deleted_message_id, - guild_id, + FullEvent::MessageDelete { + channel_id, deleted_message_id, guild_id } => { message_delete::handle( - ctx, - framework, - data, - channel_id, - deleted_message_id, - guild_id, - ) - .await? + ctx, framework, data, channel_id, deleted_message_id, guild_id + ).await? } - Event::MessageUpdate { - old_if_available, - new, - event, - } => message_update::handle(ctx, framework, data, old_if_available, new, event).await?, - Event::ReactionRemove { removed_reaction } => { - reaction_remove::handle(ctx, framework, data, removed_reaction).await? + + FullEvent::MessageUpdate { + old_if_available, new, event + } => { + message_update::handle( + ctx, framework, data, old_if_available, new, event + ).await? + }, + + FullEvent::ReactionRemove { + removed_reaction + } => { + reaction_remove::handle( + ctx, framework, data, removed_reaction + ).await? } - Event::GuildMemberAddition { new_member } => { - guild_member_add::handle(ctx, framework, data, new_member).await? + + FullEvent::GuildMemberAddition { + new_member + } => { + guild_member_add::handle( + ctx, framework, data, new_member + ).await? } - Event::Message { new_message } => { - message::handle(ctx, framework, data, new_message).await? + + FullEvent::Message { + new_message + } => { + message::handle( + ctx, framework, data, new_message + ).await? } + _ => {} } Ok(()) diff --git a/src/handler/event/reaction_remove.rs b/src/handler/event/reaction_remove.rs index b7a44dc..b9f7b37 100644 --- a/src/handler/event/reaction_remove.rs +++ b/src/handler/event/reaction_remove.rs @@ -4,7 +4,7 @@ use crate::types; pub async fn handle( ctx: &serenity::Context, - _framework: types::FrameworkContext<'_>, + _framework: types::ContextFramework<'_>, data: &types::Data, reaction: &serenity::Reaction, ) -> Result<(), types::Error> { @@ -12,26 +12,22 @@ pub async fn handle( return Ok(()); }; - if member.guild_id.is_none() { - return Ok(()); - } - - let Some(user) = &member.user else { - return Ok(()); - }; - - data.log_mem( - ctx, - format!( + let embed = serenity::CreateEmbed::new() + .description(format!( "{} {} mesajından {} tepkisini kaldırdı", - user, + member.user, reaction .message_id .link(reaction.channel_id, reaction.guild_id), reaction.emoji, - ), - ) - .await?; + )); + + let logs = &data.config.logs; + + logs.member.send_message( + ctx, serenity::CreateMessage::new() + .add_embed(embed) + ).await?; Ok(()) } diff --git a/src/handler/mod.rs b/src/handler/mod.rs index f76344c..3574ec6 100644 --- a/src/handler/mod.rs +++ b/src/handler/mod.rs @@ -1,6 +1,6 @@ use poise::serenity_prelude as serenity; -use crate::{config, types}; +use crate::types; pub mod command; pub mod error; @@ -10,36 +10,46 @@ pub async fn handle_setup( ctx: &serenity::Context, _framework: &types::Framework, ready: &serenity::Ready, - config: config::Config, + config: types::Config, ) -> Result { - let mut slash = vec![]; - let mut menu = vec![]; + let commands = commands(); + + poise::builtins::register_in_guild( + ctx, &commands.0[..], config.guild + ).await?; + poise::builtins::register_globally( + ctx, &commands.1[..] + ).await?; + + ctx.cache.set_max_messages(100); + + println!("logged in as {}", ready.user.name); + + Ok(types::Data { + config + }) +} + +// pity that discord limits menu commands to 5... +fn commands() -> (Vec, Vec) { + let mut a = vec![]; + let mut b = vec![]; for command in crate::command::list() { if command.context_menu_action.is_none() { - slash.push(command); + a.push(command); } else { - menu.push(command); + b.push(command); } } - let guild = config.guild_id; - for _ in 1..=5 { - let Some(command) = menu.pop() else { continue }; - slash.push(command) - } - - poise::builtins::register_in_guild(ctx, &slash[..], guild).await?; - - poise::builtins::register_globally(ctx, &menu[..]).await?; - - ctx.cache.set_max_messages(100); - - ctx.set_presence(None, serenity::OnlineStatus::DoNotDisturb) - .await; + let Some(command) = b.pop() else { + continue + }; - println!("logged in as {}", ready.user.name); + a.push(command) + } - Ok(types::Data { config }) + (a, b) } diff --git a/src/main.rs b/src/main.rs index 33d8daf..0742a01 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,28 +1,29 @@ use poise::serenity_prelude as serenity; -use std::time::Duration; mod command; -mod config; mod handler; mod types; -mod util; #[tokio::main] async fn main() -> Result<(), types::Error> { - env_logger::init(); + let config = types::Config::load() + .expect("unable to load config"); + let token = config.token.clone(); - let config = config::Config::load().expect("unable to load settings"); - - poise::Framework::builder() - .token(config.token.clone()) + let framework = poise::Framework::builder() .options(options()) - .intents( - serenity::GatewayIntents::all() - ) .setup(move |ctx, ready, framework| { Box::pin(handler::handle_setup(ctx, framework, ready, config)) }) - .run() + .build(); + + let intents = serenity::GatewayIntents::all(); + let client = serenity::ClientBuilder::new(token, intents) + .framework(framework) + .await; + + client? + .start() .await?; Ok(()) @@ -31,19 +32,18 @@ async fn main() -> Result<(), types::Error> { fn options() -> types::FrameworkOptions { poise::FrameworkOptions { commands: command::list(), - prefix_options: poise::PrefixFrameworkOptions { - edit_tracker: Some(poise::EditTracker::for_timespan(Duration::from_secs(3600))), - additional_prefixes: vec![], - ..Default::default() - }, - skip_checks_for_owners: false, - on_error: |err| Box::pin(handler::error::handle(err)), - pre_command: |ctx| Box::pin(handler::command::pre_handle(ctx)), - post_command: |ctx| Box::pin(handler::command::post_handle(ctx)), - command_check: Some(|ctx| Box::pin(handler::command::run_handle(ctx))), + command_check: Some(|ctx| { + Box::pin(handler::command::handle(ctx)) + }), + event_handler: |ctx, event, framework, data| { - Box::pin(handler::event::handle(ctx, framework, data, event)) + Box::pin(handler::event::handle(ctx, event, framework, data)) }, + + on_error: |err| { + Box::pin(handler::error::handle(err)) + }, + ..Default::default() } } diff --git a/src/types.rs b/src/types.rs index 7b6bfcc..936dd05 100644 --- a/src/types.rs +++ b/src/types.rs @@ -1,95 +1,59 @@ -use ::serenity::builder::CreateEmbed; -use ::serenity::model::prelude::Message; -use poise::serenity_prelude as serenity; +use poise::serenity_prelude::*; -use crate::config::Config; - -pub type CommandVec = Vec>; - -pub type Framework = poise::Framework; -pub type FrameworkOptions = poise::FrameworkOptions; +pub type Command = poise::Command; pub type Context<'a> = poise::Context<'a, Data, Error>; -pub type AppContext<'a> = poise::ApplicationContext<'a, Data, Error>; -pub type FrameworkContext<'a> = poise::FrameworkContext<'a, Data, Error>; +pub type ContextApp<'a> = poise::ApplicationContext<'a, Data, Error>; +pub type ContextFramework<'a> = poise::FrameworkContext<'a, Data, Error>; pub type Error = Box; -pub type FrameworkError<'a> = poise::FrameworkError<'a, Data, Error>; +pub type ErrorFramework<'a> = poise::FrameworkError<'a, Data, Error>; + +pub type Framework = poise::Framework; +pub type FrameworkOptions = poise::FrameworkOptions; pub struct Data { pub config: Config, } -impl Data { - pub async fn log_mem(&self, http: H, content: C) -> serenity::Result - where - H: AsRef, - C: ToString, - { - self.config - .logs - .member - .send_message(http, |c| c.embed(|c| c.description(content))) - .await - } +use std::collections::HashMap; - pub async fn log_mem_with_embed( - &self, - http: H, - content: C, - f: F, - ) -> serenity::Result - where - H: AsRef, - C: ToString, - F: FnOnce(&mut CreateEmbed) -> &mut CreateEmbed, - { - self.config - .logs - .member - .send_message(http, |c| { - c.embed(|c| { - let n = f(c); - n.description(content); - n - }) - }) - .await - } +use serde::Deserialize; - pub async fn log_sys(&self, http: H, content: C) -> serenity::Result - where - H: AsRef, - C: ToString, - { - self.config - .logs - .system - .send_message(http, |c| c.embed(|c| c.description(content))) - .await - } +#[derive(Deserialize)] +pub struct Config { + pub token: String, + pub guild: GuildId, + pub admins: Vec, + pub boards: HashMap, + pub roles: Roles, + pub logs: Logs, +} + +#[derive(Deserialize)] +pub struct Board { + pub webhook: String, + pub channel: ChannelId, +} + +#[derive(Deserialize)] +pub struct Roles { + pub default: RoleId, + pub warnings: Vec, +} + +#[derive(Deserialize)] +pub struct Logs { + pub system: ChannelId, + pub member: ChannelId, +} - pub async fn log_sys_with_embed( - &self, - http: H, - content: C, - f: F, - ) -> serenity::Result - where - H: AsRef, - C: ToString, - F: FnOnce(&mut CreateEmbed) -> &mut CreateEmbed, - { - self.config - .logs - .system - .send_message(http, |c| { - c.embed(|c| { - let n = f(c); - n.description(content); - n - }) - }) - .await +impl Config { + pub fn load() -> Result { + config::Config::builder() + .add_source(config::File::with_name("Config")) + .add_source(config::Environment::with_prefix("DOG_")) + .build()? + .try_deserialize() } } diff --git a/src/util/interactions/confirm.rs b/src/util/interactions/confirm.rs deleted file mode 100644 index b2f8f9a..0000000 --- a/src/util/interactions/confirm.rs +++ /dev/null @@ -1,43 +0,0 @@ -use poise::serenity_prelude as serenity; - -use crate::types; - -pub async fn send_confirm( - ctx: types::AppContext<'_>, - text: impl Into, -) -> Result { - let reply = ctx - .send(|m| { - m.content(text).components(|c| { - c.create_action_row(|c| { - c.create_button(|c| { - c.custom_id("button_yes"); - c.label("evet") - }); - c.create_button(|c| { - c.custom_id("button_no"); - c.label("hayır") - }) - }) - }); - m.ephemeral(true) - }) - .await?; - - while let Some(mci) = serenity::CollectComponentInteraction::new(ctx.serenity_context()) - .author_id(ctx.author().id) - .channel_id(ctx.channel_id()) - .message_id(reply.message().await.unwrap().id) - .timeout(std::time::Duration::from_secs(60)) - .await - { - reply.delete(types::Context::Application(ctx)).await?; - return Ok(match mci.data.custom_id.as_str() { - "button_yes" => true, - _ => false, - }); - } - - reply.delete(types::Context::Application(ctx)).await?; - Ok(false) -} diff --git a/src/util/interactions/dropdown.rs b/src/util/interactions/dropdown.rs deleted file mode 100644 index 31cf7c7..0000000 --- a/src/util/interactions/dropdown.rs +++ /dev/null @@ -1,46 +0,0 @@ -use poise::serenity_prelude as serenity; - -use crate::types; - -pub async fn send_dropdown( - ctx: types::AppContext<'_>, - text: impl Into, - values: Vec>, -) -> Result, types::Error> { - let reply = ctx - .send(|m| { - m.content(text).components(|c| { - c.create_action_row(|a| { - a.create_select_menu(|c| { - c.custom_id("dropdown"); - c.options(|c| { - for value in values { - c.create_option(|c| { - let value = value.into(); - c.label(value.clone()).value(value) - }); - } - c - }) - }) - }) - }); - m.ephemeral(true) - }) - .await?; - - while let Some(mci) = serenity::CollectComponentInteraction::new(ctx.serenity_context()) - .author_id(ctx.author().id) - .channel_id(ctx.channel_id()) - .message_id(reply.message().await.unwrap().id) - .timeout(std::time::Duration::from_secs(60)) - .filter(move |mci| mci.data.custom_id == "dropdown") - .await - { - reply.delete(types::Context::Application(ctx)).await?; - return Ok(Some(mci.data.values[0].clone())); - } - - reply.delete(types::Context::Application(ctx)).await?; - Ok(None) -} diff --git a/src/util/interactions/mod.rs b/src/util/interactions/mod.rs deleted file mode 100644 index c625034..0000000 --- a/src/util/interactions/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod confirm; -mod dropdown; - -pub use confirm::send_confirm; -pub use dropdown::send_dropdown; diff --git a/src/util/macros/log.rs b/src/util/macros/log.rs deleted file mode 100644 index d471a34..0000000 --- a/src/util/macros/log.rs +++ /dev/null @@ -1,25 +0,0 @@ -#[macro_export] -macro_rules! log_mem { - ($ctx:expr, $template:expr, $($arg:expr),*) => { - { - use crate::util::traits::ExtendContext; - - $ctx.log_mem( - format!($template, $($arg),*) - ).await?; - } - }; -} - -#[macro_export] -macro_rules! log_sys { - ($ctx:expr, $template:expr, $($arg:expr),*) => { - { - use crate::util::traits::ExtendContext; - - $ctx.log_sys( - format!($template, $($arg),*) - ).await?; - } - }; -} diff --git a/src/util/macros/mod.rs b/src/util/macros/mod.rs deleted file mode 100644 index b58c5aa..0000000 --- a/src/util/macros/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -mod log; - -pub use crate::log_mem; -pub use crate::log_sys; diff --git a/src/util/mod.rs b/src/util/mod.rs deleted file mode 100644 index 72e9475..0000000 --- a/src/util/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod interactions; -pub mod macros; -pub mod traits; diff --git a/src/util/traits/channel.rs b/src/util/traits/channel.rs deleted file mode 100644 index 4b49340..0000000 --- a/src/util/traits/channel.rs +++ /dev/null @@ -1,22 +0,0 @@ -use ::serenity::model::prelude::Message; -use async_trait::async_trait; -use poise::serenity_prelude as serenity; - -#[async_trait] -pub trait ExtendChannelId { - async fn send_message_content(&self, http: H, content: C) -> serenity::Result - where - H: AsRef + Send + Sync, - C: ToString + Send; -} - -#[async_trait] -impl ExtendChannelId for serenity::ChannelId { - async fn send_message_content(&self, http: H, content: C) -> serenity::Result - where - H: AsRef + Send + Sync, - C: ToString + Send, - { - self.send_message(http, |c| c.content(content)).await - } -} diff --git a/src/util/traits/context.rs b/src/util/traits/context.rs deleted file mode 100644 index df073b0..0000000 --- a/src/util/traits/context.rs +++ /dev/null @@ -1,71 +0,0 @@ -use ::serenity::builder::CreateEmbed; -use ::serenity::model::prelude::Message; -use async_trait::async_trait; -use poise::serenity_prelude as serenity; - -use super::ExtendChannelId; -use crate::types; - -#[async_trait] -pub trait ExtendContext { - async fn log_mem(&self, content: C) -> serenity::Result - where - C: ToString + Send; - async fn log_mem_with_embed(&self, content: C, f: F) -> serenity::Result - where - C: ToString + Send, - F: FnOnce(&mut CreateEmbed) -> &mut CreateEmbed + Send + Sync; - async fn log_sys(&self, content: C) -> serenity::Result - where - C: ToString + Send; - async fn log_sys_with_embed(&self, content: C, f: F) -> serenity::Result - where - C: ToString + Send, - F: FnOnce(&mut CreateEmbed) -> &mut CreateEmbed + Send + Sync; - - async fn send_message(&self, content: C) -> serenity::Result - where - C: ToString + Send; -} - -#[async_trait] -impl ExtendContext for types::AppContext<'_> { - async fn log_mem(&self, content: C) -> serenity::Result - where - C: ToString + Send, - { - self.data.log_mem(self.http(), content).await - } - - async fn log_mem_with_embed(&self, content: C, f: F) -> serenity::Result - where - C: ToString + Send, - F: FnOnce(&mut CreateEmbed) -> &mut CreateEmbed + Send + Sync, - { - self.data.log_mem_with_embed(self.http(), content, f).await - } - - async fn log_sys(&self, content: C) -> serenity::Result - where - C: ToString + Send, - { - self.data.log_sys(self.http(), content).await - } - - async fn log_sys_with_embed(&self, content: C, f: F) -> serenity::Result - where - C: ToString + Send, - F: FnOnce(&mut CreateEmbed) -> &mut CreateEmbed + Send + Sync, - { - self.data.log_sys_with_embed(self.http(), content, f).await - } - - async fn send_message(&self, content: C) -> serenity::Result - where - C: ToString + Send, - { - self.channel_id() - .send_message_content(self.http(), content) - .await - } -} diff --git a/src/util/traits/mod.rs b/src/util/traits/mod.rs deleted file mode 100644 index 241ca97..0000000 --- a/src/util/traits/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod channel; -mod context; - -pub use channel::ExtendChannelId; -pub use context::ExtendContext;