From a8e9a9bb49db76dafb3c1cbc17a379922ce29528 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Thu, 26 Oct 2023 17:46:43 +0200 Subject: [PATCH] build: Bump Serenity --- Cargo.lock | 899 +++++++++++++++++------------- Cargo.toml | 16 +- src/commands/configuration.rs | 34 +- src/commands/misc.rs | 46 +- src/commands/moderation.rs | 205 ++----- src/events/guild_member_update.rs | 9 +- src/events/interaction.rs | 16 +- src/events/mod.rs | 34 +- src/events/presence_update.rs | 25 + src/events/ready.rs | 8 +- src/main.rs | 40 +- src/model/application.rs | 1 + src/utils/bot.rs | 8 +- src/utils/code_embed/utils.rs | 38 +- src/utils/decancer.rs | 11 +- src/utils/message.rs | 68 ++- src/utils/message_response.rs | 94 ++-- src/utils/moderation.rs | 241 +++----- src/utils/poll.rs | 72 +-- 19 files changed, 929 insertions(+), 936 deletions(-) create mode 100644 src/events/presence_update.rs diff --git a/Cargo.lock b/Cargo.lock index 9ed83d6..525f706 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + [[package]] name = "adler" version = "1.0.2" @@ -10,20 +19,22 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.7.6" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ + "cfg-if", "getrandom", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -44,30 +55,23 @@ dependencies = [ ] [[package]] -name = "async-trait" -version = "0.1.68" +name = "arrayvec" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.18", + "serde", ] [[package]] -name = "async-tungstenite" -version = "0.17.2" +name = "async-trait" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b71b31561643aa8e7df3effe284fa83ab1a840e52294c5f4bd7bfd8b2becbb" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ - "futures-io", - "futures-util", - "log", - "pin-project-lite", - "tokio", - "tokio-rustls 0.23.4", - "tungstenite", - "webpki-roots", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -76,6 +80,21 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.13.1" @@ -84,9 +103,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "bitflags" @@ -94,6 +113,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + [[package]] name = "bitvec" version = "1.0.1" @@ -117,48 +142,51 @@ dependencies = [ [[package]] name = "bson" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aeb8bae494e49dbc330dd23cf78f6f7accee22f640ce3ab17841badaa4ce232" +checksum = "58da0ae1e701ea752cc46c1bb9f39d5ecefc7395c3ecd526261a566d4f16e0c2" dependencies = [ "ahash", "base64 0.13.1", "bitvec", "hex", - "indexmap", + "indexmap 1.9.3", "js-sys", - "lazy_static", + "once_cell", "rand", "serde", "serde_bytes", "serde_json", - "time 0.3.22", + "time", "uuid", ] [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -168,18 +196,17 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets", ] [[package]] @@ -188,6 +215,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.4" @@ -196,9 +233,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c" +checksum = "3fbc60abd742b35f2492f808e1abbb83d45f72db402e14c55057edc9c7b1e9e4" dependencies = [ "libc", ] @@ -244,12 +281,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ - "darling_core 0.20.1", - "darling_macro 0.20.1", + "darling_core 0.20.3", + "darling_macro 0.20.3", ] [[package]] @@ -282,16 +319,16 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] @@ -318,23 +355,23 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ - "darling_core 0.20.1", + "darling_core 0.20.3", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] name = "dashmap" -version = "5.4.0" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.2", "lock_api", "once_cell", "parking_lot_core", @@ -349,9 +386,19 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "decancer" -version = "1.6.2" +version = "1.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808127a7de612079ec37bfc1abc48ed77a6015a971a8bd7d4178d79147cbc839" +checksum = "080b09f6adad25c23d8c47c54e52e59b0dc09d079c4b23e0f147dac440359d0d" + +[[package]] +name = "deranged" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +dependencies = [ + "powerfmt", + "serde", +] [[package]] name = "derivative" @@ -417,9 +464,9 @@ checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] @@ -437,10 +484,22 @@ dependencies = [ ] [[package]] -name = "flate2" -version = "1.0.26" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -469,9 +528,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -483,9 +542,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -493,15 +552,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -510,38 +569,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-channel", "futures-core", @@ -555,6 +614,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" @@ -573,14 +641,20 @@ checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", ] [[package]] -name = "h2" -version = "0.3.19" +name = "gimli" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "h2" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes", "fnv", @@ -588,7 +662,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 1.9.3", "slab", "tokio", "tokio-util", @@ -601,6 +675,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" + [[package]] name = "heck" version = "0.4.1" @@ -609,12 +689,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.2.6" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -678,15 +755,15 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.26" +version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ "bytes", "futures-channel", @@ -699,7 +776,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -708,29 +785,30 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ + "futures-util", "http", "hyper", - "rustls 0.21.2", + "rustls", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", ] [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -776,7 +854,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +dependencies = [ + "equivalent", + "hashbrown 0.14.2", ] [[package]] @@ -785,23 +873,23 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2 0.5.3", + "socket2 0.5.5", "widestring", "windows-sys", - "winreg 0.50.0", + "winreg", ] [[package]] name = "ipnet" -version = "2.7.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "js-sys" @@ -820,9 +908,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.146" +version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] name = "linked-hash-map" @@ -832,9 +920,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -842,9 +930,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "lru-cache" @@ -869,18 +957,19 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "md-5" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ + "cfg-if", "digest", ] [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "mime" @@ -909,24 +998,24 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "windows-sys", ] [[package]] name = "mongodb" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe15399de63ad4294c80069967736cbb87ebe467a8cd0629df9cab88a6fbde6" +checksum = "e22d517e7e678e1c9a2983ec704b43f3b22f38b1b7a247ea3ddb36d21578bf4e" dependencies = [ "async-trait", "base64 0.13.1", - "bitflags", + "bitflags 1.3.2", "bson", "chrono", "derivative", @@ -943,20 +1032,20 @@ dependencies = [ "percent-encoding", "rand", "rustc_version_runtime", - "rustls 0.20.8", + "rustls", "rustls-pemfile", "serde", "serde_bytes", "serde_with", "sha-1", "sha2", - "socket2 0.4.9", + "socket2 0.4.10", "stringprep", "strsim", "take_mut", "thiserror", "tokio", - "tokio-rustls 0.23.4", + "tokio-rustls", "tokio-util", "trust-dns-proto", "trust-dns-resolver", @@ -1045,23 +1134,32 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ "hermit-abi", "libc", ] +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.18.0" @@ -1074,15 +1172,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "ordered-float" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" -dependencies = [ - "num-traits", -] - [[package]] name = "overload" version = "0.1.1" @@ -1101,13 +1190,13 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "smallvec", "windows-targets", ] @@ -1140,9 +1229,9 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -1153,8 +1242,7 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "poise" version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d591af1c934c29adda172665f69b837e642d4fee85598baffb95dd98110467d" +source = "git+https://github.com/serenity-rs/poise.git?branch=serenity-next#b1d6bf643e877b5d689207d275a3b75363b0784b" dependencies = [ "async-trait", "derivative", @@ -1172,8 +1260,7 @@ dependencies = [ [[package]] name = "poise_macros" version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40270099e1527efae99fdc0609d397e76310b529d4980ad38ab14d81803ca0fa" +source = "git+https://github.com/serenity-rs/poise.git?branch=serenity-next#b1d6bf643e877b5d689207d275a3b75363b0784b" dependencies = [ "darling 0.14.4", "proc-macro2", @@ -1181,6 +1268,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1189,9 +1282,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.60" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] @@ -1204,9 +1297,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.28" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -1253,16 +1346,16 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -1278,9 +1371,21 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.4" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", @@ -1289,17 +1394,17 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "bytes", "encoding_rs", "futures-core", @@ -1317,13 +1422,14 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.2", + "rustls", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "tokio-util", "tower-service", "url", @@ -1332,7 +1438,7 @@ dependencies = [ "wasm-streams", "web-sys", "webpki-roots", - "winreg 0.10.1", + "winreg", ] [[package]] @@ -1347,9 +1453,9 @@ dependencies = [ [[package]] name = "revanced-discord-bot" -version = "2.5.1" +version = "2.5.2" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "bson", "chrono", "decancer", @@ -1364,7 +1470,7 @@ dependencies = [ "serde", "serde_json", "serde_regex", - "serde_with_macros 2.3.3", + "serde_with_macros 3.4.0", "tokio", "tracing", "tracing-subscriber", @@ -1372,19 +1478,24 @@ dependencies = [ [[package]] name = "ring" -version = "0.16.20" +version = "0.17.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" dependencies = [ "cc", + "getrandom", "libc", - "once_cell", "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys", ] +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + [[package]] name = "rustc_version" version = "0.2.3" @@ -1400,7 +1511,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", + "semver 1.0.20", ] [[package]] @@ -1415,21 +1526,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" -dependencies = [ - "log", - "ring", - "sct", - "webpki", -] - -[[package]] -name = "rustls" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f" +checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" dependencies = [ "log", "ring", @@ -1439,51 +1538,55 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", ] [[package]] name = "rustls-webpki" -version = "0.100.1" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ "ring", "untrusted", ] -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ "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]] name = "semver" version = "0.9.0" @@ -1495,9 +1598,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "semver-parser" @@ -1507,50 +1610,40 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.164" +version = "1.0.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" +checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" dependencies = [ "serde_derive", ] -[[package]] -name = "serde-value" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" -dependencies = [ - "ordered-float", - "serde", -] - [[package]] name = "serde_bytes" -version = "0.11.9" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.164" +version = "1.0.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" +checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] name = "serde_json" -version = "1.0.97" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf3bf93142acad5821c99197022e170842cdbc1c30482b98750c688c640842a" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" dependencies = [ - "indexmap", + "indexmap 2.0.2", "itoa", "ryu", "serde", @@ -1602,43 +1695,41 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "2.3.3" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788" dependencies = [ - "darling 0.20.1", + "darling 0.20.3", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] name = "serenity" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fd5e7b5858ad96e99d440138f34f5b98e1b959ebcd3a1036203b30e78eb788" +version = "0.11.6" +source = "git+https://github.com/serenity-rs/serenity?rev=a0c102f9acfd8d7184650815e06e0301954cb9e7#a0c102f9acfd8d7184650815e06e0301954cb9e7" dependencies = [ + "arrayvec", "async-trait", - "async-tungstenite", - "base64 0.13.1", - "bitflags", + "base64 0.21.5", + "bitflags 2.4.1", "bytes", - "cfg-if", "chrono", "dashmap", "flate2", "futures", - "mime", + "fxhash", "mime_guess", "parking_lot", "percent-encoding", "reqwest", - "rustversion", + "secrecy", "serde", - "serde-value", "serde_json", - "time 0.3.22", + "time", "tokio", + "tokio-tungstenite", "tracing", "typemap_rev", "url", @@ -1656,10 +1747,21 @@ dependencies = [ ] [[package]] -name = "sha2" -version = "0.10.7" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +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 = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -1668,9 +1770,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -1686,24 +1788,24 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -1711,9 +1813,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", "windows-sys", @@ -1721,16 +1823,17 @@ dependencies = [ [[package]] name = "spin" -version = "0.5.2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "stringprep" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" dependencies = [ + "finl_unicode", "unicode-bidi", "unicode-normalization", ] @@ -1760,15 +1863,36 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.18" +version = "2.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "take_mut" version = "0.2.2" @@ -1783,22 +1907,22 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] @@ -1813,22 +1937,13 @@ dependencies = [ [[package]] name = "time" -version = "0.1.45" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ + "deranged", "itoa", + "powerfmt", "serde", "time-core", "time-macros", @@ -1836,15 +1951,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.9" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" dependencies = [ "time-core", ] @@ -1866,18 +1981,18 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.2" +version = "1.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" +checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", "mio", "num_cpus", "pin-project-lite", "signal-hook-registry", - "socket2 0.4.9", + "socket2 0.5.5", "tokio-macros", "windows-sys", ] @@ -1890,18 +2005,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls 0.20.8", - "tokio", - "webpki", + "syn 2.0.38", ] [[package]] @@ -1910,15 +2014,30 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.21.2", + "rustls", "tokio", ] [[package]] -name = "tokio-util" -version = "0.7.8" +name = "tokio-tungstenite" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -1937,11 +2056,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -1950,20 +2068,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.25" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8803eee176538f94ae9a14b55b2804eb7e1441f8210b1c31290b3bccdccff73b" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -1971,12 +2089,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] @@ -2047,23 +2165,22 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tungstenite" -version = "0.17.3" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ - "base64 0.13.1", "byteorder", "bytes", + "data-encoding", "http", "httparse", "log", "rand", - "rustls 0.20.8", - "sha-1", + "rustls", + "sha1", "thiserror", "url", "utf-8", - "webpki", ] [[package]] @@ -2079,21 +2196,21 @@ dependencies = [ [[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.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicase" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ "version_check", ] @@ -2106,9 +2223,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -2121,15 +2238,15 @@ dependencies = [ [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna 0.4.0", @@ -2145,9 +2262,9 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "uuid" -version = "1.3.4" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa2982af2eec27de306107c027578ff7f423d65f7250e40ce0fea8f45248b81" +checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" dependencies = [ "getrandom", "serde", @@ -2174,12 +2291,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -2207,7 +2318,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", "wasm-bindgen-shared", ] @@ -2241,7 +2352,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2254,9 +2365,9 @@ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "wasm-streams" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" +checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" dependencies = [ "futures-util", "js-sys", @@ -2275,24 +2386,11 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" [[package]] name = "widestring" @@ -2323,10 +2421,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ "windows-targets", ] @@ -2342,9 +2440,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -2357,54 +2455,45 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winreg" @@ -2424,3 +2513,29 @@ checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] + +[[package]] +name = "zerocopy" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81ba595b9f2772fbee2312de30eeb80ec773b4cb2f1e8098db024afadda6c06f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772666c41fb6dceaf520b564b962d738a8e1a83b41bd48945f50837aed78bb1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + +[[package]] +name = "zeroize" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" diff --git a/Cargo.toml b/Cargo.toml index 74a4914..c5d3e09 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ homepage = "https://revanced.app" license = "GPL-3.0" name = "revanced-discord-bot" repository = "https://github.com/revanced/revanced-discord-bot" -version = "2.5.1" +version = "2.5.2" edition = "2021" [profile.release] @@ -17,9 +17,9 @@ panic = "abort" [dependencies] bson = "2.4" -serde_with_macros = "2.0.1" +serde_with_macros = "3.4.0" mongodb = "2.4.0" -poise = "0.5.2" +poise = { git = "https://github.com/serenity-rs/poise.git", branch = "serenity-next" } decancer = "1.5.4" tokio = { version = "1.26.0", features = ["rt-multi-thread"] } dotenv = "0.15.0" @@ -27,10 +27,16 @@ serde = { version = "1.0.158", features = ["derive"] } serde_json = "1.0.94" regex = "1.7.3" serde_regex = "1.1.0" -reqwest = { version = "0.11.15", features= ["rustls-tls"], default-features = false } +reqwest = { version = "0.11.15", features = [ + "rustls-tls", + "json", +], default-features = false } chrono = "0.4.24" dirs = "5.0.0" -tracing = { version = "0.1.37", features = ["max_level_debug", "release_max_level_info"] } +tracing = { version = "0.1.37", features = [ + "max_level_debug", + "release_max_level_info", +] } tracing-subscriber = "0.3.16" hmac-sha256 = "1.1.6" base64 = "0.21.0" diff --git a/src/commands/configuration.rs b/src/commands/configuration.rs index 6d69a28..e379d1f 100644 --- a/src/commands/configuration.rs +++ b/src/commands/configuration.rs @@ -1,3 +1,5 @@ +use poise::serenity_prelude::CreateEmbed; +use poise::CreateReply; use tracing::debug; use crate::utils::bot::load_configuration; @@ -15,12 +17,13 @@ pub async fn reload(ctx: Context<'_>) -> Result<(), Error> { debug!("{} reloaded the configuration.", ctx.author().name); - ctx.send(|f| { - f.ephemeral(true).embed(|f| { - f.description("Successfully reloaded configuration.") - .color(embed_color) - }) - }) + ctx.send( + CreateReply::new().ephemeral(true).embed( + CreateEmbed::new() + .description("Successfully reloaded configuration.") + .color(embed_color), + ), + ) .await?; Ok(()) @@ -32,18 +35,17 @@ pub async fn stop(ctx: Context<'_>) -> Result<(), Error> { debug!("{} stopped the bot.", ctx.author().name); let color = ctx.data().read().await.configuration.general.embed_color; - ctx.send(|f| { - f.ephemeral(true) - .embed(|f| f.description("Stopped the bot.").color(color)) - }) + + ctx.send( + CreateReply::new().ephemeral(true).embed( + CreateEmbed::new() + .description("Stopped the bot.") + .color(color), + ), + ) .await?; - ctx.framework() - .shard_manager() - .lock() - .await - .shutdown_all() - .await; + ctx.framework().shard_manager().shutdown_all().await; Ok(()) } diff --git a/src/commands/misc.rs b/src/commands/misc.rs index c242641..0a249eb 100644 --- a/src/commands/misc.rs +++ b/src/commands/misc.rs @@ -1,5 +1,5 @@ -use poise::serenity_prelude::{self as serenity, MessageId, ParseValue, ReactionType}; -use poise::ReplyHandle; +use poise::serenity_prelude::{CreateActionRow, CreateAllowedMentions, CreateButton, ReactionType}; +use poise::{CreateReply, ReplyHandle}; use crate::utils::message::clone_message; use crate::{Context, Error}; @@ -14,8 +14,9 @@ pub async fn reply( async fn send_ephermal<'a>( ctx: &Context<'a>, content: &str, - ) -> Result, serenity::Error> { - ctx.send(|f| f.ephemeral(true).content(content)).await + ) -> Result, poise::serenity_prelude::Error> { + ctx.send(CreateReply::new().ephemeral(true).content(content)) + .await } let http = &ctx.serenity_context().http; @@ -23,7 +24,7 @@ pub async fn reply( if let Some(reply_message) = reply_message { if let Ok(reply_message) = reply_message.parse::() { - match channel.message(http, MessageId(reply_message)).await { + match channel.message(http, reply_message).await { Ok(reply_message) => { reply_message.reply(http, &message).await?; }, @@ -71,29 +72,24 @@ pub async fn poll( let message = ctx .serenity_context() .http - .get_message(channel_id, message_id) + .get_message(channel_id.into(), message_id.into()) .await?; - ctx.send(|m| { - let mut clone = clone_message(&message, m).components(|c| { - c.create_action_row(|r| { - r.create_button(|b| { - b.label("Vote") - .emoji(ReactionType::Unicode("🗳️".to_string())) - .custom_id(format!("poll:{id}:{age}")) - }) - }) - }); + let message = clone_message(&message).components(vec![CreateActionRow::Buttons(vec![ + CreateButton::new(format!("poll:{id}:{age}")) + .label("Vote") + .emoji(ReactionType::Unicode("🗳️".to_string())), + ])]); - if ping { - clone = clone.allowed_mentions(|am| { - am.parse(ParseValue::Users) - .parse(ParseValue::Roles) - .parse(ParseValue::Everyone) - }); - } - - clone + ctx.send(if ping { + message.allowed_mentions( + CreateAllowedMentions::default() + .all_roles(true) + .all_users(true) + .everyone(true), + ) + } else { + message }) .await?; diff --git a/src/commands/moderation.rs b/src/commands/moderation.rs index 165fa82..8cb8079 100644 --- a/src/commands/moderation.rs +++ b/src/commands/moderation.rs @@ -1,16 +1,22 @@ + + + use bson::{doc, Document}; use chrono::Utc; use mongodb::options::{UpdateModifications, UpdateOptions}; use poise::serenity_prelude::{ self as serenity, + CreateEmbed, + CreateEmbedFooter, + EditMessage, + GetMessages, Mentionable, - PermissionOverwrite, - Permissions, UserId, }; -use tracing::{debug, error, trace}; +use poise::CreateReply; +use tracing::{debug, trace}; -use crate::db::model::{LockedChannel, Muted}; +use crate::db::model::{Muted}; use crate::utils::bot::get_member; use crate::utils::macros::to_user; use crate::utils::moderation::{ @@ -23,145 +29,6 @@ use crate::utils::moderation::{ use crate::utils::parse_duration; use crate::{Context, Error}; -/// Lock a channel. -#[poise::command(slash_command)] -pub async fn lock(ctx: Context<'_>) -> Result<(), Error> { - let data = &ctx.data().read().await; - let configuration = &data.configuration; - let database = &data.database; - let discord = &ctx.serenity_context(); - let cache = &discord.cache; - let http = &discord.http; - - let channel_id = ctx.channel_id().0; - let channel = &cache.guild_channel(channel_id).unwrap(); - - let author = ctx.author(); - - let query: Document = LockedChannel { - channel_id: Some(channel_id.to_string()), - ..Default::default() - } - .into(); - - // Check if channel is already muted, if so succeed. - if let Ok(mut cursor) = database - .find::("locked", query.clone(), None) - .await - { - if cursor.advance().await.unwrap() { - respond_moderation( - &ctx, - &ModerationKind::Lock( - channel.clone(), - author.clone(), - Some(Error::from("Channel already locked")), - ), - configuration, - ) - .await?; - return Ok(()); - } - } - - // accumulate all roles with write permissions - let permission_overwrites: Vec<_> = channel - .permission_overwrites - .iter() - .filter_map(|r| { - if r.allow.send_messages() || !r.deny.send_messages() { - Some(r.clone()) - } else { - None - } - }) - .collect(); - - // save the original overwrites - let updated: Document = LockedChannel { - overwrites: Some(permission_overwrites.clone()), - ..Default::default() - } - .into(); - - database - .update::( - "locked", - query, - UpdateModifications::Document(doc! { "$set": updated}), - Some(UpdateOptions::builder().upsert(true).build()), - ) - .await?; - - // lock the channel by and creating the new permission overwrite - for permission_overwrite in &permission_overwrites { - let permission = Permissions::SEND_MESSAGES & Permissions::ADD_REACTIONS; - - if let Err(err) = channel - .create_permission(http, &PermissionOverwrite { - allow: permission_overwrite.allow & !permission, - deny: permission_overwrite.deny | permission, - kind: permission_overwrite.kind, - }) - .await - { - error!("Failed to create the new permission: {:?}", err); - } - } - - respond_moderation( - &ctx, - &ModerationKind::Lock(channel.clone(), author.clone(), None), - configuration, - ) - .await -} - -/// Unlock a channel. -#[poise::command(slash_command)] -pub async fn unlock(ctx: Context<'_>) -> Result<(), Error> { - let data = &ctx.data().read().await; - let configuration = &data.configuration; - let database = &data.database; - let discord = &ctx.serenity_context(); - let cache = &discord.cache; - let http = &discord.http; - - let channel_id = ctx.channel_id().0; - - let delete_result = database - .find_and_delete::( - "locked", - LockedChannel { - channel_id: Some(channel_id.to_string()), - ..Default::default() - } - .into(), - None, - ) - .await; - - let channel = cache.guild_channel(channel_id).unwrap(); - - let author = ctx.author(); - - let mut error = None; - if let Ok(Some(locked_channel)) = delete_result { - for overwrite in &locked_channel.overwrites.unwrap() { - channel.create_permission(http, overwrite).await?; - } - } else { - error = Some(Error::from("Channel already unlocked")) - } - - respond_moderation( - &ctx, - &ModerationKind::Unlock(channel.clone(), author.clone(), error), // TODO: handle error - configuration, - ) - .await -} - /// Unmute a member. #[poise::command(slash_command)] pub async fn unmute( @@ -175,8 +42,8 @@ pub async fn unmute( let data = &ctx.data().read().await; let configuration = &data.configuration; - if let Some(pending_unmute) = data.pending_unmutes.get(&id.0) { - trace!("Cancelling pending unmute for {}", id.0); + if let Some(pending_unmute) = data.pending_unmutes.get(&id.get()) { + trace!("Cancelling pending unmute for {}", id); pending_unmute.abort(); } @@ -231,7 +98,7 @@ pub async fn mute( }; let mut updated = Muted { - guild_id: Some(guild_id.0.to_string()), + guild_id: Some(guild_id.to_string()), expires: unmute_time, reason: Some(reason.clone()), ..Default::default() @@ -265,8 +132,8 @@ pub async fn mute( ) .await?; - if let Some(pending_unmute) = data.pending_unmutes.get(&id.0) { - trace!("Cancelling pending unmute for {}", id.0); + if let Some(pending_unmute) = data.pending_unmutes.get(&id.get()) { + trace!("Cancelling pending unmute for {}", id); pending_unmute.abort(); } @@ -281,7 +148,7 @@ pub async fn mute( .await?; } else { data.pending_unmutes.insert( - id.0, + id.get(), queue_unmute_member( discord.clone(), data.database.clone(), @@ -341,14 +208,15 @@ pub async fn purge( let author = ctx.author(); let handle = ctx - .send(|f| { - f.embed(|f| { - f.title("Purging messages") + .send( + CreateReply::new().embed( + CreateEmbed::new() + .title("Purging messages") .description("Accumulating...") .color(embed_color) - .thumbnail(&image) - }) - }) + .thumbnail(&image), + ), + ) .await?; let mut response = handle.message().await?; @@ -361,9 +229,12 @@ pub async fn purge( loop { // Filter out messages that are too old let mut messages = channel - .messages(&ctx.serenity_context(), |m| { - m.limit(count_to_delete as u64).before(response.id) - }) + .messages( + &ctx.serenity_context(), + GetMessages::new() + .limit(count_to_delete as u8) + .before(response.id), + ) .await? .into_iter() .take_while(|m| m.timestamp.timestamp() > too_old_timestamp) @@ -384,7 +255,7 @@ pub async fn purge( if let Ok(message_id) = message_id.parse::() { messages = messages .into_iter() - .take_while(|m| m.id.0 > message_id) + .take_while(|m| m.id.get() > message_id) .collect::>(); debug!( "Filtered messages until {}. Left: {}", @@ -411,21 +282,19 @@ pub async fn purge( response .to_mut() - .edit(&ctx.serenity_context(), |e| { - e.set_embed( + .edit( + &ctx.serenity_context(), + EditMessage::new().embed( serenity::CreateEmbed::default() .title("Purge successful") .field("Deleted messages", deleted_amount.to_string(), false) - .field("Action by", author.mention(), false) + .field("Action by", author.mention().to_string(), false) .color(embed_color) .thumbnail(&image) - .footer(|f| { - f.text("ReVanced"); - f.icon_url(image) - }) + .footer(CreateEmbedFooter::new("ReVanced").icon_url(image)) .clone(), - ) - }) + ), + ) .await?; Ok(()) } diff --git a/src/events/guild_member_update.rs b/src/events/guild_member_update.rs index d44b611..80467ef 100644 --- a/src/events/guild_member_update.rs +++ b/src/events/guild_member_update.rs @@ -3,8 +3,11 @@ use crate::utils::decancer::cure; pub async fn guild_member_update( ctx: &serenity::Context, - old_if_available: &Option, - new: &serenity::Member, + old_if_available: &Option, + new: &Option, + _: &GuildMemberUpdateEvent, ) { - cure(ctx, old_if_available, new).await; + if let Some(member) = new { + cure(ctx, old_if_available, member).await; + } } diff --git a/src/events/interaction.rs b/src/events/interaction.rs index 7e1b588..ad346a2 100644 --- a/src/events/interaction.rs +++ b/src/events/interaction.rs @@ -1,8 +1,8 @@ use chrono::{Duration, Utc}; use poise::serenity_prelude::{ - ComponentType, - MessageComponentInteraction, - MessageComponentInteractionData, + ComponentInteraction, + ComponentInteractionData, + ComponentInteractionDataKind, }; use super::*; @@ -10,11 +10,11 @@ use crate::utils; pub async fn interaction_create( ctx: &serenity::Context, interaction: &serenity::Interaction, -) -> Result<(), crate::serenity::SerenityError> { - if let serenity::Interaction::MessageComponent(MessageComponentInteraction { +) -> Result<(), serenity::prelude::SerenityError> { + if let serenity::Interaction::Component(ComponentInteraction { data: - MessageComponentInteractionData { - component_type: ComponentType::Button, + ComponentInteractionData { + kind: ComponentInteractionDataKind::Button, custom_id, .. }, @@ -33,7 +33,7 @@ pub async fn handle_poll( ctx: &serenity::Context, interaction: &serenity::Interaction, custom_id: &str, -) -> Result<(), crate::serenity::SerenityError> { +) -> Result<(), serenity::prelude::SerenityError> { fn parse(str: &str) -> T where ::Err: std::fmt::Debug, diff --git a/src/events/mod.rs b/src/events/mod.rs index be8ce21..1d06ea3 100644 --- a/src/events/mod.rs +++ b/src/events/mod.rs @@ -1,6 +1,14 @@ use std::sync::Arc; -use poise::serenity_prelude::{self as serenity, Mutex, RwLock, ShardManager, UserId}; +use poise::serenity_prelude::prelude::RwLock; +use poise::serenity_prelude::{ + self as serenity, + GuildMemberUpdateEvent, + Member, + Presence, + ShardManager, + UserId, +}; use tracing::log::error; use crate::{Data, Error}; @@ -15,7 +23,7 @@ pub struct Handler { options: poise::FrameworkOptions, data: T, bot_id: RwLock>, - shard_manager: RwLock>>>, + shard_manager: RwLock>>, } // Custom handler to dispatch poise events @@ -29,18 +37,18 @@ impl Handler { } } - pub async fn set_shard_manager(&self, shard_manager: Arc>) { + pub async fn set_shard_manager(&self, shard_manager: Arc) { *self.shard_manager.write().await = Some(shard_manager); } - async fn dispatch_poise_event(&self, ctx: &serenity::Context, event: &poise::Event<'_>) { + async fn dispatch_poise_event(&self, event: &serenity::FullEvent) { let framework_data = poise::FrameworkContext { bot_id: self.bot_id.read().await.unwrap(), options: &self.options, user_data: &self.data, shard_manager: &(*self.shard_manager.read().await).clone().unwrap(), /* Shard manager can be read between all poise events without locks */ }; - poise::dispatch_event(framework_data, ctx, event).await; + poise::dispatch_event(framework_data, event).await; } } @@ -58,16 +66,18 @@ impl serenity::EventHandler for Handler>> { async fn guild_member_update( &self, ctx: serenity::Context, - old_if_available: Option, - new: serenity::Member, + old_if_available: Option, + new: Option, + event: GuildMemberUpdateEvent, ) { - guild_member_update::guild_member_update(&ctx, &old_if_available, &new).await; + guild_member_update::guild_member_update(&ctx, &old_if_available, &new, &event).await; } async fn message(&self, ctx: serenity::Context, new_message: serenity::Message) { message_create::message_create(&ctx, &new_message).await; - self.dispatch_poise_event(&ctx, &poise::Event::Message { + self.dispatch_poise_event(&serenity::FullEvent::Message { + ctx, new_message, }) .await; @@ -80,7 +90,8 @@ impl serenity::EventHandler for Handler>> { new: Option, event: serenity::MessageUpdateEvent, ) { - self.dispatch_poise_event(&ctx, &poise::Event::MessageUpdate { + self.dispatch_poise_event(&serenity::FullEvent::MessageUpdate { + ctx, old_if_available, new, event, @@ -99,7 +110,8 @@ impl serenity::EventHandler for Handler>> { error!("Failed to handle interaction: {:?}.", e); } - self.dispatch_poise_event(&ctx, &poise::Event::InteractionCreate { + self.dispatch_poise_event(&serenity::FullEvent::InteractionCreate { + ctx, interaction, }) .await; diff --git a/src/events/presence_update.rs b/src/events/presence_update.rs new file mode 100644 index 0000000..6a9bcf6 --- /dev/null +++ b/src/events/presence_update.rs @@ -0,0 +1,25 @@ +use super::*; +use crate::model::application::Configuration; +use crate::utils::bot::get_data_lock; +use crate::utils::decancer::cure; + +pub async fn presence_update(ctx: &serenity::Context, new_data: &Presence) { + let data = get_data_lock(ctx).await; + let configuration: &Configuration = &data.read().await.configuration; + + if !configuration.general.cure_on_presence_update { + return; + } + + cure( + ctx, + &None, + &new_data + .guild_id + .unwrap() + .member(&ctx.http, new_data.user.id) + .await + .unwrap(), + ) + .await; +} diff --git a/src/events/ready.rs b/src/events/ready.rs index cd8c30f..a802dc5 100644 --- a/src/events/ready.rs +++ b/src/events/ready.rs @@ -25,7 +25,9 @@ pub async fn load_muted_members(ctx: &serenity::Context, _: &serenity::Ready) { while cursor.advance().await.unwrap() { let current: Muted = cursor.deserialize_current().unwrap(); - let Some(expires) = current.expires else { continue }; + let Some(expires) = current.expires else { + continue; + }; let guild_id = current.guild_id.unwrap().parse::().unwrap(); let user_id = current.user_id.unwrap().parse::().unwrap(); @@ -36,8 +38,8 @@ pub async fn load_muted_members(ctx: &serenity::Context, _: &serenity::Ready) { queue_unmute_member( ctx.clone(), data.database.clone(), - serenity::GuildId(guild_id), - serenity::UserId(user_id), + guild_id.into(), + user_id.into(), mute_role_id, amount_left as u64, // i64 as u64 is handled properly here ), diff --git a/src/main.rs b/src/main.rs index f0fa752..65adf44 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,7 +6,9 @@ use api::client::Api; use commands::{configuration, misc, moderation}; use db::database::Database; use events::Handler; -use poise::serenity_prelude::{self as serenity, RwLock, UserId}; +use poise::serenity_prelude::prelude::{RwLock, TypeMapKey}; +use poise::serenity_prelude::{CreateEmbed, UserId}; +use poise::CreateReply; use tokio::task::JoinHandle; use tracing::{error, trace}; use utils::bot::load_configuration; @@ -24,7 +26,7 @@ mod utils; type Error = Box; type Context<'a> = poise::Context<'a, Arc>, Error>; -impl serenity::TypeMapKey for Data { +impl TypeMapKey for Data { type Value = Arc>; } @@ -54,8 +56,6 @@ async fn main() { moderation::purge(), moderation::ban(), moderation::unban(), - moderation::lock(), - moderation::unlock(), misc::reply(), misc::poll(), ]; @@ -68,7 +68,7 @@ async fn main() { .users .iter() .cloned() - .map(UserId) + .map(UserId::from) .collect::>() .into_iter() .collect(); @@ -116,7 +116,7 @@ async fn main() { if !(administrators .users // Check if the user is an administrator - .contains(&member.user.id.0) + .contains(&member.user.id.get()) || administrators .roles .iter() @@ -125,22 +125,23 @@ async fn main() { member .roles .iter() - .any(|member_role| member_role.0 == role_id) + .any(|member_role| member_role.get() == role_id) })) { if let Err(e) = ctx - .send(|m| { - m.ephemeral(true).embed(|e| { - e.title("Permission error") + .send( + CreateReply::new().ephemeral(true).embed( + CreateEmbed::new() + .title("Permission error") .description( "You do not have permission to use this command.", ) .color(configuration.general.embed_color) .thumbnail(member.user.avatar_url().unwrap_or_else( || member.user.default_avatar_url(), - )) - }) - }) + )), + ), + ) .await { error!("Error sending message: {:?}", e) @@ -152,9 +153,9 @@ async fn main() { Ok(true) }) }), - event_handler: |_ctx, event, _framework, _data| { + event_handler: |event, _framework, _data| { Box::pin(async move { - tracing::trace!("{:?}", event.name()); + tracing::trace!("{:?}", event.snake_case_name()); Ok(()) }) }, @@ -163,12 +164,13 @@ async fn main() { data.clone(), // Pass configuration as user data for the framework )); - let mut client = serenity::Client::builder( + let mut client = poise::serenity_prelude::Client::builder( env::var("DISCORD_AUTHORIZATION_TOKEN") .expect("DISCORD_AUTHORIZATION_TOKEN environment variable not set"), - serenity::GatewayIntents::non_privileged() - | serenity::GatewayIntents::MESSAGE_CONTENT - | serenity::GatewayIntents::GUILD_MEMBERS, + poise::serenity_prelude::GatewayIntents::non_privileged() + | poise::serenity_prelude::GatewayIntents::MESSAGE_CONTENT + | poise::serenity_prelude::GatewayIntents::GUILD_MEMBERS + | poise::serenity_prelude::GatewayIntents::GUILD_PRESENCES, ) .event_handler_arc(handler.clone()) .await diff --git a/src/model/application.rs b/src/model/application.rs index da8bd6d..7cbbf75 100644 --- a/src/model/application.rs +++ b/src/model/application.rs @@ -66,6 +66,7 @@ pub struct General { pub embed_color: i32, pub mute: Mute, pub logging_channel: u64, + pub cure_on_presence_update: bool, } #[derive(Default, Serialize, Deserialize)] diff --git a/src/utils/bot.rs b/src/utils/bot.rs index de4e783..5410d82 100644 --- a/src/utils/bot.rs +++ b/src/utils/bot.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use poise::serenity_prelude::{self as serenity, RwLock}; +use poise::serenity_prelude::{self as serenity}; use crate::model::application::Configuration; use crate::Data; @@ -10,7 +10,9 @@ pub fn load_configuration() -> Configuration { } // Share the lock reference between the threads in serenity framework -pub async fn get_data_lock(ctx: &serenity::Context) -> Arc> { +pub async fn get_data_lock( + ctx: &serenity::Context, +) -> Arc> { ctx.data.read().await.get::().unwrap().clone() } @@ -21,7 +23,7 @@ pub async fn get_member( ) -> serenity::Result> { match guild_id.member(ctx, user_id).await { Ok(member) => Ok(Some(member)), - Err(serenity::SerenityError::Http(err)) + Err(serenity::prelude::SerenityError::Http(err)) if matches!( err.status_code(), Some(serenity::http::StatusCode::NOT_FOUND) diff --git a/src/utils/code_embed/utils.rs b/src/utils/code_embed/utils.rs index a55f0a2..860dbbd 100644 --- a/src/utils/code_embed/utils.rs +++ b/src/utils/code_embed/utils.rs @@ -1,3 +1,4 @@ +use poise::serenity_prelude::{CreateAttachment, CreateMessage, EditMessage}; use reqwest::Url; use tracing::{debug, error, trace}; @@ -63,26 +64,29 @@ pub async fn code_preview(ctx: &serenity::Context, new_message: &serenity::Messa return; // Nothing to do } - if let Err(err) = new_message + if let Err(err) = &new_message .channel_id - .send_message(&ctx.http, |message| { - let mut message = message.reference_message(new_message); + .send_message( + &ctx.http, + { + let mut message = CreateMessage::new(); - for preview in code_previews.iter() { - let language = match preview.code.language.as_ref() { - Some(language) => language, - None => "txt", - }; + for preview in code_previews.iter() { + let language = match preview.code.language.as_ref() { + Some(language) => language, + None => "txt", + }; - let name = format!("{}.{}", &preview.code.branch_or_sha, language); + let name = format!("{}.{}", &preview.code.branch_or_sha, language); - let content = preview.preview.as_ref().unwrap().as_bytes(); + let content = preview.preview.as_ref().unwrap().as_bytes(); - message = message.add_file((content, name.as_str())); - } + message = message.add_file(CreateAttachment::bytes(content, name.as_str())); + } - message - }) + message + }, + ) .await { error!( @@ -93,7 +97,11 @@ pub async fn code_preview(ctx: &serenity::Context, new_message: &serenity::Messa return; } - if let Err(err) = new_message.clone().suppress_embeds(&ctx.http).await { + if let Err(err) = new_message + .clone() + .edit(&ctx.http, EditMessage::new().suppress_embeds(true)) + .await + { error!("Failed to remove embeds. Error: {:?}", err); } } diff --git a/src/utils/decancer.rs b/src/utils/decancer.rs index 049db2e..f0e5910 100644 --- a/src/utils/decancer.rs +++ b/src/utils/decancer.rs @@ -1,5 +1,6 @@ extern crate decancer; +use poise::serenity_prelude::EditMember; use tracing::{error, info, trace}; use super::*; @@ -17,7 +18,7 @@ pub async fn cure( let name = member.display_name().to_string(); if let Some(old) = old_if_available { - if old.display_name().to_string() == name { + if *old.display_name() == name { trace!( "Skipping decancer for {} because their name hasn't changed", member.user.tag() @@ -41,9 +42,11 @@ pub async fn cure( match member .guild_id - .edit_member(&ctx.http, member.user.id, |edit_member| { - edit_member.nickname(cured_name) - }) + .edit_member( + &ctx.http, + member.user.id, + EditMember::default().nickname(cured_name), + ) .await { Ok(_) => info!("Cured user {}", member.user.tag()), diff --git a/src/utils/message.rs b/src/utils/message.rs index d6a9fff..ff9785e 100644 --- a/src/utils/message.rs +++ b/src/utils/message.rs @@ -1,54 +1,48 @@ use chrono::Utc; -use poise::serenity_prelude::Message; +use poise::serenity_prelude::{CreateEmbed, CreateEmbedAuthor, CreateEmbedFooter, Message}; use poise::CreateReply; -pub fn clone_message<'a, 'b>( - message: &'a Message, - to_reply: &'b mut CreateReply<'a>, -) -> &'b mut CreateReply<'a> { - let mut reply = to_reply.content(message.content.as_str()); +pub fn clone_message(message: &Message) -> CreateReply { + let mut reply = CreateReply::new().content(message.content.as_str()); - if let Some(embed) = message.embeds.get(0) { - reply = reply.embed(|e| { - let mut new_embed = e; + if let Some(embed) = message.embeds.first() { + let mut new_embed = CreateEmbed::new(); - if let Some(color) = embed.colour { - new_embed = new_embed.color(color); - } + if let Some(color) = embed.colour { + new_embed = new_embed.color(color); + } - new_embed = new_embed.timestamp(Utc::now().to_rfc3339()); + new_embed = new_embed.timestamp(Utc::now()); - if let Some(title) = &embed.title { - new_embed = new_embed.title(title); - } + if let Some(title) = &embed.title { + new_embed = new_embed.title(title); + } - if let Some(description) = &embed.description { - new_embed = new_embed.description(description); - } + if let Some(description) = &embed.description { + new_embed = new_embed.description(description); + } - if let Some(footer) = &embed.footer { - new_embed = new_embed.footer(|f| f.text(&footer.text)); - } + if let Some(footer) = &embed.footer { + new_embed = new_embed.footer(CreateEmbedFooter::new(&footer.text)); + } - if let Some(author) = &embed.author { - new_embed = new_embed.author(|a| a.name(&author.name)); - } + if let Some(author) = &embed.author { + new_embed = new_embed.author(CreateEmbedAuthor::new(&author.name)); + } - if let Some(image) = &embed.image { - new_embed = new_embed.image(image.url.as_str()); - } + if let Some(image) = &embed.image { + new_embed = new_embed.image(image.url.as_str()); + } - if let Some(thumbnail) = &embed.thumbnail { - new_embed = new_embed.thumbnail(thumbnail.url.as_str()); - } + if let Some(thumbnail) = &embed.thumbnail { + new_embed = new_embed.thumbnail(thumbnail.url.as_str()); + } - for field in &embed.fields { - new_embed = - new_embed.field(field.name.as_str(), field.value.as_str(), field.inline); - } + for field in &embed.fields { + new_embed = new_embed.field(field.name.as_str(), field.value.as_str(), field.inline); + } - new_embed - }) + reply = reply.embed(new_embed); } reply diff --git a/src/utils/message_response.rs b/src/utils/message_response.rs index 41fc87e..eaff0bd 100644 --- a/src/utils/message_response.rs +++ b/src/utils/message_response.rs @@ -1,4 +1,12 @@ use chrono::{DateTime, Duration, NaiveDateTime, Utc}; +use poise::serenity_prelude::{ + CreateEmbed, + CreateEmbedAuthor, + CreateEmbedFooter, + CreateMessage, + EditThread, + GetMessages, +}; use regex::Regex; use tracing::log::error; @@ -24,7 +32,7 @@ pub async fn handle_message_response(ctx: &serenity::Context, new_message: &sere let member_roles = &member.roles; let joined_at = member.joined_at.unwrap().unix_timestamp(); - let must_joined_at = DateTime::::from_utc( + let must_joined_at = DateTime::::from_naive_utc_and_offset( NaiveDateTime::from_timestamp_opt(joined_at, 0).unwrap(), Utc, ); @@ -36,7 +44,7 @@ pub async fn handle_message_response(ctx: &serenity::Context, new_message: &sere if !roles.iter().any(|&role_id| { member_roles .iter() - .any(|&member_role| role_id == member_role.0) + .any(|&member_role| role_id == member_role.get()) }) { continue; } @@ -44,7 +52,7 @@ pub async fn handle_message_response(ctx: &serenity::Context, new_message: &sere if let Some(channels) = &includes.channels { // check if the channel is whitelisted, if not, check if the channel is a thread, if it is check if the parent id is whitelisted - if !channels.contains(&new_message.channel_id.0) { + if !channels.contains(&new_message.channel_id.get()) { if response.thread_options.is_some() { if guild_message.is_none() { guild_message = Some( @@ -57,8 +65,10 @@ pub async fn handle_message_response(ctx: &serenity::Context, new_message: &sere ); }; - let Some(parent_id) = guild_message.as_ref().unwrap().parent_id else { continue; }; - if !channels.contains(&parent_id.0) { + let Some(parent_id) = guild_message.as_ref().unwrap().parent_id else { + continue; + }; + if !channels.contains(&parent_id.get()) { continue; } } else { @@ -80,7 +90,7 @@ pub async fn handle_message_response(ctx: &serenity::Context, new_message: &sere if roles.iter().any(|&role_id| { member_roles .iter() - .any(|&member_role| role_id == member_role.0) + .any(|&member_role| role_id == member_role.get()) }) { continue; } @@ -120,32 +130,40 @@ pub async fn handle_message_response(ctx: &serenity::Context, new_message: &sere } if let Err(err) = channel_id - .send_message(&ctx.http, |m| { - if let Some(reference) = message_reference { - m.reference_message(reference); - } else { - m.reference_message(new_message); - } + .send_message( + &ctx.http, + { + let mut message = CreateMessage::default(); + message = if let Some(reference) = message_reference { + message.reference_message(reference) + } else { + message.reference_message(new_message) + }; - match &response.response.embed { - Some(embed) => m.embed(|e| { - e.title(&embed.title) - .description(&embed.description) - .color(embed.color) - .fields(embed.fields.iter().map(|field| { - (field.name.clone(), field.value.clone(), field.inline) - })) - .footer(|f| { - f.text(&embed.footer.text); - f.icon_url(&embed.footer.icon_url) - }) - .thumbnail(&embed.thumbnail.url) - .image(&embed.image.url) - .author(|a| a.name(&embed.author.name).icon_url(&embed.author.icon_url)) - }), - None => m.content(response.response.message.as_ref().unwrap()), - } - }) + match &response.response.embed { + Some(embed) => message.embed( + CreateEmbed::new() + .title(&embed.title) + .description(&embed.description) + .color(embed.color) + .fields(embed.fields.iter().map(|field| { + (field.name.clone(), field.value.clone(), field.inline) + })) + .footer( + CreateEmbedFooter::new(&embed.footer.text) + .icon_url(&embed.footer.icon_url), + ) + .thumbnail(&embed.thumbnail.url) + .image(&embed.image.url) + .author( + CreateEmbedAuthor::new(&embed.author.name) + .icon_url(&embed.author.icon_url), + ), + ), + None => message.content(response.response.message.as_ref().unwrap()), + } + }, + ) .await { error!( @@ -154,7 +172,7 @@ pub async fn handle_message_response(ctx: &serenity::Context, new_message: &sere err ); } else if let Some(thread_options) = &response.thread_options { - let channel = channel_id + let mut channel = channel_id .to_channel(&ctx.http) .await .unwrap() @@ -170,7 +188,7 @@ pub async fn handle_message_response(ctx: &serenity::Context, new_message: &sere if thread_options.only_on_first_message && !channel_id - .messages(&ctx.http, |b| b.limit(1).before(new_message)) + .messages(&ctx.http, GetMessages::new().limit(1).before(new_message)) .await .unwrap() .is_empty() @@ -179,10 +197,12 @@ pub async fn handle_message_response(ctx: &serenity::Context, new_message: &sere } if let Err(err) = channel - .edit_thread(&ctx.http, |e| { - e.locked(thread_options.lock_on_response) - .archived(thread_options.close_on_response) - }) + .edit_thread( + &ctx.http, + EditThread::new() + .locked(thread_options.lock_on_response) + .archived(thread_options.close_on_response), + ) .await { error!( diff --git a/src/utils/moderation.rs b/src/utils/moderation.rs index 1d0a488..b1c8c8c 100644 --- a/src/utils/moderation.rs +++ b/src/utils/moderation.rs @@ -1,8 +1,19 @@ use std::cmp; -use std::sync::{Arc, RwLock}; +use std::sync::{Arc, Mutex}; use mongodb::options::FindOptions; -use poise::serenity_prelude::{ChannelId, GuildChannel, GuildId, Mentionable, User, UserId}; +use poise::serenity_prelude::{ + ChannelId, + CreateEmbed, + CreateEmbedFooter, + CreateMessage, + GuildId, + Mentionable, + User, + UserId, +}; +use poise::CreateReply; +use serenity::prelude::SerenityError; use tokio::task::JoinHandle; use tracing::{debug, error, warn}; @@ -11,7 +22,6 @@ use super::*; use crate::db::database::Database; use crate::db::model::Muted; use crate::model::application::{Configuration, Mute}; -use crate::serenity::SerenityError; use crate::utils::bot::get_member; use crate::{Context, Error}; @@ -20,8 +30,6 @@ pub enum ModerationKind { Unmute(User, User, Option), // User, Command author, Error Ban(User, User, Option, Option), // User, Command author, Reason, Error Unban(User, User, Option), // User, Command author, Error - Lock(GuildChannel, User, Option), // Channel name, Command author, Error - Unlock(GuildChannel, User, Option), // Channel name, Command author, Error } pub enum BanKind { Ban(User, Option, Option), // User, Amount of days to delete messages, Reason @@ -48,7 +56,7 @@ pub async fn mute_on_join(ctx: &serenity::Context, new_member: &mut serenity::Me if found { debug!("Muted member {} rejoined the server", new_member.user.tag()); if new_member - .add_role(&ctx.http, RoleId(data.configuration.general.mute.role)) + .add_role(&ctx.http, data.configuration.general.mute.role) .await .is_ok() { @@ -85,7 +93,7 @@ pub fn queue_unmute_member( .find_and_delete::( "muted", Muted { - user_id: Some(user_id.0.to_string()), + user_id: Some(user_id.to_string()), ..Default::default() } .into(), @@ -123,18 +131,16 @@ pub async fn respond_moderation<'a>( ) -> Result<(), Error> { let current_user = ctx.serenity_context().http.get_current_user().await?; - let send_ephemeral = RwLock::new(false); + let send_ephemeral = Arc::new(Mutex::new(false)); - let create_embed = |f: &mut serenity::CreateEmbed| { - let mut moderated_user: Option<&User> = None; + let create_embed = || { + let f = CreateEmbed::new(); let result = match moderation { ModerationKind::Mute(user, author, reason, expires, error) => { - moderated_user = Some(user); - let embed = match error { Some(err) => { - *send_ephemeral.write().unwrap() = true; + *send_ephemeral.lock().unwrap() = true; f.title(format!("Failed to mute {}", user.tag())) .field("Exception", err.to_string(), false) @@ -158,40 +164,37 @@ pub async fn respond_moderation<'a>( // add expiration date to embed if mute has a duration if let Some(expire) = expires { - embed.field("Expires", expire, true); + embed.field("Expires", expire, true) + } else { + embed } - embed }, - ModerationKind::Unmute(user, author, error) => { - moderated_user = Some(user); - match error { - Some(err) => { - *send_ephemeral.write().unwrap() = true; + ModerationKind::Unmute(user, author, error) => match error { + Some(err) => { + *send_ephemeral.lock().unwrap() = true; - f.title(format!("Failed to unmute {}", user.tag())) - .field("Exception", err.to_string(), false) - .field( - "Action", - format!( - "{} was unmuted by {} but failed", - user.mention(), - author.mention() - ), - false, - ) - }, - None => f.title(format!("Unmuted {}", user.tag())).field( - "Action", - format!("{} was unmuted by {}", user.mention(), author.mention()), - false, - ), - } + f.title(format!("Failed to unmute {}", user.tag())) + .field("Exception", err.to_string(), false) + .field( + "Action", + format!( + "{} was unmuted by {} but failed", + user.mention(), + author.mention() + ), + false, + ) + }, + None => f.title(format!("Unmuted {}", user.tag())).field( + "Action", + format!("{} was unmuted by {}", user.mention(), author.mention()), + false, + ), }, ModerationKind::Ban(user, author, reason, error) => { - moderated_user = Some(user); let f = match error { Some(err) => { - *send_ephemeral.write().unwrap() = true; + *send_ephemeral.lock().unwrap() = true; f.title(format!("Failed to ban {}", user.tag())) .field("Exception", err.to_string(), false) @@ -217,164 +220,94 @@ pub async fn respond_moderation<'a>( f } }, - ModerationKind::Unban(user, author, error) => { - moderated_user = Some(user); - match error { - Some(err) => { - *send_ephemeral.write().unwrap() = true; - - f.title(format!("Failed to unban {}", user.tag())) - .field("Exception", err.to_string(), false) - .field( - "Action", - format!( - "{} was unbanned by {} but failed", - user.mention(), - author.mention() - ), - false, - ) - }, - None => f.title(format!("Unbanned {}", user.tag())).field( - "Action", - format!("{} was unbanned by {}", user.mention(), author.mention()), - false, - ), - } - }, - ModerationKind::Lock(channel, author, error) => match error { + ModerationKind::Unban(user, author, error) => match error { Some(err) => { - *send_ephemeral.write().unwrap() = true; + *send_ephemeral.lock().unwrap() = true; - f.title(format!("Failed to lock {} ", channel.name())) + f.title(format!("Failed to unban {}", user.tag())) .field("Exception", err.to_string(), false) .field( "Action", format!( - "{} was locked by {} but failed", - channel.mention(), + "{} was unbanned by {} but failed", + user.mention(), author.mention() ), false, ) }, - None => f - .title(format!("Locked {}", channel.name())) - .description( - "Unlocking the channel will restore the original permission overwrites.", - ) - .field( - "Action", - format!("{} was locked by {}", channel.mention(), author.mention()), - false, - ), - }, - ModerationKind::Unlock(channel, author, error) => match error { - Some(err) => { - *send_ephemeral.write().unwrap() = true; - - f.title(format!("Failed to unlock {}", channel.name())) - .field("Exception", err.to_string(), false) - .field( - "Action", - format!( - "{} was unlocked by {} but failed", - channel.mention(), - author.mention() - ), - false, - ) - }, - None => f - .title(format!("Unlocked {}", channel.name())) - .description("Restored original permission overwrites.") - .field( - "Action", - format!("{} was unlocked by {}", channel.mention(), author.mention()), - false, - ), + None => f.title(format!("Unbanned {}", user.tag())).field( + "Action", + format!("{} was unbanned by {}", user.mention(), author.mention()), + false, + ), }, } .color(configuration.general.embed_color); - let user = if let Some(user) = moderated_user { - user.face() - } else { - current_user.face() - }; + let user = current_user.face(); - result.thumbnail(&user).footer(|f| { - f.text("ReVanced"); - f.icon_url(current_user.face()) - }); + result + .thumbnail(&user) + .footer(CreateEmbedFooter::new("ReVanced").icon_url(&user)) }; + let send_ephemeral = *send_ephemeral.lock().unwrap(); + let reply = ctx - .send(|reply| { - reply - .embed(|embed| { - create_embed(embed); - embed - }) - .ephemeral(*send_ephemeral.read().unwrap()) - }) + .send( + CreateReply::new() + .embed(create_embed()) + .ephemeral(send_ephemeral), + ) .await?; let response = reply.message().await?; - ChannelId(configuration.general.logging_channel) - .send_message(&ctx.serenity_context().http, |reply| { - reply.embed(|embed| { - create_embed(embed); - embed.field( - "Reference", - format!( - "[Jump to message](https://discord.com/channels/{}/{}/{})", - ctx.guild_id().unwrap().0, - response.channel_id, - response.id - ), - true, - ) - }) - }) + + ChannelId::from(configuration.general.logging_channel) + .send_message( + &ctx.serenity_context().http, + CreateMessage::new().embed(create_embed().field( + "Reference", + format!( + "[Jump to message](https://discord.com/channels/{}/{}/{})", + ctx.guild_id().unwrap(), + response.channel_id, + response.id + ), + true, + )), + ) .await?; Ok(()) } pub async fn ban_moderation(ctx: &Context<'_>, kind: &BanKind) -> Option { - let guild_id = ctx.guild_id().unwrap().0; + let guild_id = ctx.guild_id().unwrap(); let http = &ctx.serenity_context().http; match kind { BanKind::Ban(user, dmd, reason) => { - let reason = reason - .clone() - .or_else(|| Some("None specified".to_string())) - .unwrap(); + let reason = reason.as_deref().or(Some("None specified")); let ban_result = http - .ban_user( - guild_id, - user.id.0, - cmp::min(dmd.unwrap_or(0), 7), - reason.as_ref(), - ) + .ban_user(guild_id, user.id, cmp::min(dmd.unwrap_or(0), 7), reason) .await; if let Err(err) = ban_result { - error!("Failed to ban user {}: {}", user.id.0, err); + error!("Failed to ban user {}: {}", user.id, err); Some(err) } else { None } }, BanKind::Unban(user) => { - let unban_result = http.remove_ban(guild_id, user.id.0, None).await; + let unban_result = http.remove_ban(guild_id, user.id, None).await; if let Err(err) = unban_result { - error!("Failed to unban user {}: {}", user.id.0, err); + error!("Failed to unban user {}: {}", user.id, err); Some(err) } else { None @@ -391,7 +324,7 @@ pub async fn mute_moderation( let mute_role_id = config.role; let take = &config.take; - let is_currently_muted = member.roles.iter().any(|r| r.0 == mute_role_id); + let is_currently_muted = member.roles.iter().any(|r| r.get() == mute_role_id); member .add_role(&ctx.serenity_context().http, mute_role_id) @@ -401,7 +334,7 @@ pub async fn mute_moderation( let removed_roles = member .roles .iter() - .filter(|r| take.contains(&r.0)) + .filter(|r| take.contains(&r.get())) .copied() .collect::>(); // take them from the member. diff --git a/src/utils/poll.rs b/src/utils/poll.rs index 42eef25..8dfe356 100644 --- a/src/utils/poll.rs +++ b/src/utils/poll.rs @@ -1,5 +1,13 @@ use base64::Engine; -use poise::serenity_prelude::{ButtonStyle, ReactionType, Timestamp}; +use poise::serenity_prelude::{ + CreateActionRow, + CreateButton, + CreateEmbed, + CreateEmbedFooter, + CreateInteractionResponseMessage, + ReactionType, + Timestamp, +}; use reqwest::StatusCode; use tracing::log::{error, trace}; @@ -11,7 +19,7 @@ pub async fn handle_poll( interaction: &serenity::Interaction, poll_id: u64, min_join_date: Timestamp, -) -> Result<(), crate::serenity::SerenityError> { +) -> Result<(), serenity::prelude::SerenityError> { trace!("Handling poll: {}.", poll_id); let data = get_data_lock(ctx).await; @@ -52,40 +60,32 @@ pub async fn handle_poll( .unwrap(); component - .create_interaction_response(&ctx.http, |r| { - r.interaction_response_data(|m| { - if let Ok(token) = result.as_deref() { - let url = format!("https://revanced.app/poll#{token}"); - m.components(|c| { - c.create_action_row(|r| { - r.create_button(|b| { - b.label("Vote") - .emoji(ReactionType::Unicode("🗳️".to_string())) - .style(ButtonStyle::Link) - .url(&url) - }) - }) - }) - } else { - m - } - .ephemeral(true) - .embed(|e| { - match result { - Ok(_) => e - .title("Cast your vote") - .description("You can now vote on the poll."), - Err(msg) => e.title("Error").description(msg), - } - .color(data.configuration.general.embed_color) - .thumbnail(&icon_url) - .footer(|f| { - f.text("ReVanced"); - f.icon_url(&icon_url) - }) - }) - }) - }) + .create_response( + &ctx.http, + serenity::CreateInteractionResponse::Message(if let Ok(token) = result.as_deref() { + let url = format!("https://revanced.app/poll#{token}"); + + CreateInteractionResponseMessage::new().components(vec![CreateActionRow::Buttons( + vec![CreateButton::new_link(url) + .label("Vote") + .emoji(ReactionType::Unicode("🗳️".to_string()))], + )]) + } else { + CreateInteractionResponseMessage::new() + .ephemeral(true) + .embed( + match result { + Ok(_) => CreateEmbed::new() + .title("Cast your vote") + .description("You can now vote on the poll."), + Err(msg) => CreateEmbed::new().title("Error").description(msg), + } + .color(data.configuration.general.embed_color) + .thumbnail(&icon_url) + .footer(CreateEmbedFooter::new("ReVanced").icon_url(&icon_url)), + ) + }), + ) .await?; Ok(())