diff --git a/Cargo.lock b/Cargo.lock index 43c00e0e..fb2f5eed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,29 +17,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - [[package]] name = "aho-corasick" version = "1.1.3" @@ -50,10 +27,19 @@ dependencies = [ ] [[package]] -name = "allocator-api2" -version = "0.2.18" +name = "android-tzdata" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] [[package]] name = "anyhow" @@ -74,81 +60,12 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "async-trait" -version = "0.1.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.68", -] - -[[package]] -name = "atoi" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e" -dependencies = [ - "num-traits", -] - [[package]] name = "autocfg" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" -[[package]] -name = "axum" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" -dependencies = [ - "async-trait", - "axum-core", - "bitflags 1.3.2", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - [[package]] name = "backtrace" version = "0.3.73" @@ -170,15 +87,6 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -227,21 +135,12 @@ version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", "num-traits", -] - -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", - "tokio-util", + "wasm-bindgen", + "windows-targets 0.52.6", ] [[package]] @@ -266,21 +165,6 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - [[package]] name = "darling" version = "0.13.4" @@ -399,12 +283,6 @@ dependencies = [ "syn 2.0.68", ] -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - [[package]] name = "dptree" version = "0.3.0" @@ -422,7 +300,7 @@ checksum = "0892a17df262a24294c382f0d5997571006e7a4348b4327557c4ff1cd4a8bccc" dependencies = [ "darling 0.20.9", "either", - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn 2.0.68", @@ -482,30 +360,12 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - [[package]] name = "fastrand" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" -[[package]] -name = "flume" -version = "0.10.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" -dependencies = [ - "futures-core", - "futures-sink", - "pin-project", - "spin", -] - [[package]] name = "fnv" version = "1.0.7" @@ -578,17 +438,6 @@ dependencies = [ "futures-util", ] -[[package]] -name = "futures-intrusive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604f7a68fbf8103337523b1fadc8ade7361ee3f112f7c680ad179651616aed5" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot 0.11.2", -] - [[package]] name = "futures-io" version = "0.3.30" @@ -665,52 +514,18 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.6", + "indexmap", "slab", "tokio", "tokio-util", "tracing", ] -[[package]] -name = "half" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash 0.8.11", - "allocator-api2", -] - -[[package]] -name = "hashlink" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" -dependencies = [ - "hashbrown 0.14.5", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] [[package]] name = "heck" @@ -724,12 +539,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - [[package]] name = "http" version = "0.2.12" @@ -752,12 +561,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "http-range-header" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" - [[package]] name = "httparse" version = "1.9.4" @@ -800,20 +603,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - [[package]] name = "hyper-tls" version = "0.5.0" @@ -827,6 +616,29 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -843,16 +655,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - [[package]] name = "indexmap" version = "2.2.6" @@ -860,16 +662,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.5", -] - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", + "hashbrown", ] [[package]] @@ -919,45 +712,18 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" -[[package]] -name = "libsqlite3-sys" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - [[package]] name = "linux-raw-sys" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - [[package]] name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - [[package]] name = "memchr" version = "2.7.4" @@ -1000,12 +766,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.7.4" @@ -1049,16 +809,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c96aba5aa877601bb3f6dd6a63a969e1f82e60646e81e71b14496995e9853c91" -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -1137,60 +887,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core 0.9.10", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.5.2", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - [[package]] name = "percent-encoding" version = "2.3.1" @@ -1341,44 +1037,6 @@ dependencies = [ "erasable", ] -[[package]] -name = "redis" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "152f3863635cbb76b73bc247845781098302c6c9ad2060e1a9a7de56840346b6" -dependencies = [ - "async-trait", - "bytes", - "combine", - "futures-util", - "itoa", - "percent-encoding", - "pin-project-lite", - "ryu", - "sha1", - "tokio", - "tokio-util", - "url", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" -dependencies = [ - "bitflags 2.6.0", -] - [[package]] name = "regex" version = "1.10.5" @@ -1423,7 +1081,6 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls", "hyper-tls", "ipnet", "js-sys", @@ -1434,7 +1091,6 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", "rustls-pemfile", "serde", "serde_json", @@ -1443,7 +1099,6 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", - "tokio-rustls", "tokio-util", "tower-service", "url", @@ -1451,34 +1106,20 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots", "winreg", ] -[[package]] -name = "ring" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" -dependencies = [ - "cc", - "cfg-if", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.52.0", -] - [[package]] name = "royalnet" version = "0.1.0" dependencies = [ "anyhow", + "chrono", "diesel", "log", "micronfig", "pretty_env_logger", + "rand", "teloxide", "tokio", ] @@ -1511,18 +1152,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki", - "sct", -] - [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -1532,22 +1161,6 @@ dependencies = [ "base64", ] -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" - [[package]] name = "ryu" version = "1.0.18" @@ -1569,16 +1182,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "security-framework" version = "2.11.0" @@ -1617,16 +1220,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde_cbor" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" -dependencies = [ - "half", - "serde", -] - [[package]] name = "serde_derive" version = "1.0.203" @@ -1649,16 +1242,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_path_to_error" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" -dependencies = [ - "itoa", - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -1683,21 +1266,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "sha1" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" -dependencies = [ - "sha1_smol", -] - -[[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -1716,12 +1284,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - [[package]] name = "socket2" version = "0.5.7" @@ -1732,117 +1294,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "sqlformat" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" -dependencies = [ - "nom", - "unicode_categories", -] - -[[package]] -name = "sqlx" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8de3b03a925878ed54a954f621e64bf55a3c1bd29652d0d1a17830405350188" -dependencies = [ - "sqlx-core", - "sqlx-macros", -] - -[[package]] -name = "sqlx-core" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029" -dependencies = [ - "ahash 0.7.8", - "atoi", - "bitflags 1.3.2", - "byteorder", - "bytes", - "crossbeam-queue", - "dotenvy", - "either", - "event-listener", - "flume", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "hashlink", - "hex", - "indexmap 1.9.3", - "itoa", - "libc", - "libsqlite3-sys", - "log", - "memchr", - "once_cell", - "paste", - "percent-encoding", - "smallvec", - "sqlformat", - "sqlx-rt", - "stringprep", - "thiserror", - "tokio-stream", - "url", -] - -[[package]] -name = "sqlx-macros" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9966e64ae989e7e575b19d7265cb79d7fc3cbbdf179835cb0d716f294c2049c9" -dependencies = [ - "dotenvy", - "either", - "heck 0.4.1", - "once_cell", - "proc-macro2", - "quote", - "sqlx-core", - "sqlx-rt", - "syn 1.0.109", - "url", -] - -[[package]] -name = "sqlx-rt" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024" -dependencies = [ - "native-tls", - "once_cell", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - [[package]] name = "strsim" version = "0.10.0" @@ -1923,8 +1374,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c63345cf32a8850ebddcdd769dc2d5193d5e231262d5dada264b79da01a664da" dependencies = [ "aquamarine", - "axum", - "bincode", "bytes", "derive_more", "dptree", @@ -1932,21 +1381,14 @@ dependencies = [ "log", "mime", "pin-project", - "rand", - "redis", "serde", - "serde_cbor", "serde_json", "serde_with_macros", - "sqlx", "teloxide-core", - "teloxide-macros", "thiserror", "tokio", "tokio-stream", "tokio-util", - "tower", - "tower-http", "url", ] @@ -1979,19 +1421,6 @@ dependencies = [ "tokio-util", "url", "uuid", - "vecrem", -] - -[[package]] -name = "teloxide-macros" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1d653b093dba5e44cada57a516f572167df37b8a619443e59c8c517bb6d804" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", ] [[package]] @@ -2061,7 +1490,6 @@ dependencies = [ "libc", "mio", "num_cpus", - "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", "socket2", @@ -2090,16 +1518,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls", - "tokio", -] - [[package]] name = "tokio-stream" version = "0.1.15" @@ -2124,47 +1542,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" -dependencies = [ - "bitflags 1.3.2", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "pin-project-lite", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - [[package]] name = "tower-service" version = "0.3.2" @@ -2177,7 +1554,6 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "log", "pin-project-lite", "tracing-core", ] @@ -2227,30 +1603,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-properties" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" - -[[package]] -name = "unicode-segmentation" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" - -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - [[package]] name = "url" version = "2.5.2" @@ -2278,12 +1630,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "vecrem" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4808a28789238714a29163e4cb8031f0f050dd670f7a0cc74b6d80f3ce343fa" - [[package]] name = "version_check" version = "0.9.4" @@ -2394,28 +1740,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.8" @@ -2426,10 +1750,13 @@ dependencies = [ ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] name = "windows-sys" @@ -2579,23 +1906,3 @@ dependencies = [ "cfg-if", "windows-sys 0.48.0", ] - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.68", -] diff --git a/Cargo.toml b/Cargo.toml index eec69975..1791226e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,9 +5,11 @@ edition = "2021" [dependencies] anyhow = "1.0.86" +chrono = "0.4.38" diesel = { version = "2.2.1", features = ["postgres"] } log = "0.4.22" micronfig = "0.3.0" pretty_env_logger = "0.5.0" -teloxide = { version = "0.12.2", features = ["full"] } -tokio = { version = "1.38.0", features = ["full"] } +rand = { version = "0.8.5", features = ["small_rng"] } +teloxide = { version = "0.12.2", features = ["ctrlc_handler", "native-tls"], default-features = false } +tokio = { version = "1.38.0", features = ["macros", "rt-multi-thread"] } diff --git a/src/main.rs b/src/main.rs index 81ccecd3..cb2d80fb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,4 @@ -use anyhow::{Context, Result}; -use teloxide::dispatching::HandlerExt; +use anyhow::{Result}; pub(crate) mod database; mod telegram; diff --git a/src/telegram/commands/fortune.rs b/src/telegram/commands/fortune.rs new file mode 100644 index 00000000..86c8fad0 --- /dev/null +++ b/src/telegram/commands/fortune.rs @@ -0,0 +1,204 @@ +use std::hash::{Hash, Hasher}; +use anyhow::{Context}; +use chrono::Datelike; +use rand::SeedableRng; +use rand::seq::SliceRandom; +use teloxide::Bot; +use teloxide::payloads::SendMessageSetters; +use teloxide::prelude::{Message, Requester}; +use crate::telegram::commands::{CommandDialogue, CommandResult}; + +const FORTUNES: [&str; 140] = [ + "😄 Oggi sarà una fantastica giornata!", + "😌 Oggi sarà una giornata molto chill e rilassante.", + "💰 Oggi sui tuoi alberi cresceranno più Stelline!", + "🍎 Oggi un unicorno ti lascerà la sua Blessed Apple!", + "📈 Oggi il tuo team in ranked sarà più amichevole e competente del solito!", + "🏝 Oggi potrai raggiungere l'Isola Miraggio!", + "🐱 Oggi vedrai più gatti del solito su Internet!", + "🐶 Oggi vedrai più cani del solito su Internet!", + "🐦 Oggi vedrai più uccelli del solito su Internet!", + "🐌 Oggi incontrerai una chiocciola sperduta!", + "🎁 Oggi i dispenser di regali in centro funzioneranno senza problemi!", + "🥕 Oggi il tuo raccolto avrà qualità Iridium Star!", + "🔴 Oggi troverai più oggetti di rarità rossa del solito!", + "✨ Oggi farai molti più multicast!", + "♦️ Oggi troverai una Leggendaria Dorata!", + "⭐️ Oggi la stella della RYG ti sembrerà un pochino più dritta!", + "⭐️ Oggi la stella della RYG ti sembrerà anche più storta del solito!", + "💎 Oggi i tuoi avversari non riusciranno a deflettere i tuoi Emerald Splash!", + "⬅️ Oggi le tue supercazzole prematureranno un po' più a sinistra!", + "➡️ Oggi le tue supercazzole prematureranno un po' più a destra!", + "🌅 Oggi sarà il giorno dopo ieri e il giorno prima di domani!", + "🤖 Oggi il Royal Bot ti dirà qualcosa di molto utile!", + "🏠 Oggi qualcuno si autoinviterà a casa tua!", + "📵 Oggi passerai una bella giornata tranquilla senza che nessuno ti chiami!", + "🕸 Oggi cadrai trappola di una ragnatela! O ti arriverà in faccia.", + "🔮 Oggi chiederai a @royalgamesbot di dirti la tua /fortune!", + "👽 Oggi incontrerai gli UFI!!!1!!uno!", + "🦾 Oggi uno scienziato pazzo ti proporrà di sostituire il tuo braccio con un braccio-razzo meccanico!", + "🕵️ Oggi una spia in incognito ti chiederà se hai mai visto the Emoji Movie!", + "🍕 Oggi mangerai una margherita doppio pomodoro!", + "🍰 Oggi mangerai una torta al gusto di torta!", + "🥇 Oggi vincerai qualcosa!", + "🏴‍☠️ Oggi salperai i sette mari con la tua ciurma pirata!", + "🕒 Oggi sarà ieri, e domani sarà oggi!", + "🔙 Oggi tornerai indietro nel tempo!", + "🚨 Oggi suonerà l'allarme della Velvet Room!", + "🏳️‍🌈 Oggi scoprirai l'esistenza di almeno un gender che non conoscevi!", + "🥴 Oggi ti dimenticherai come ci si siede!", + "👀 Oggi scoprirai di avere degli occhi!", + "🏹 Oggi ti verrà voglia di installare Arch Linux, ma cambierai idea molto in fretta!", + "🩲 Oggi annuncerai alla cv di essere in mutande!", + "👟 Oggi tua madre ti regalerà delle scarpe da corsa!", + "✨ Oggi troverai un Pokémon shiny!", + "👏 Oggi sarai felice, lo saprai e batterai le mani!", + "🦴 Oggi scoprirai di avere uno scheletro wholesome all'interno di te!", + "💳 Oggi riuscirai a fornire i tre numerini della tua carta di credito a John Wick!", + "🤔 Oggi smetterai finalmente di essere sus, in quanto sarai confermato dal villaggio!", + "🔮 Oggi pondererai intensamente la tua sfera!", + "🗳️ Oggi ci saranno le elezioni per un nuovo partito sul tuo pianeta!", + "🥓 Oggi avrai bacon illimitato e niente videogiochi!", + "🎮 Oggi avrai videogiochi, videogiochi illimitati e niente videogiochi!", + "🔫 Oggi troverai una pistola pearlescent!", + "🤖 Oggi ti chiederanno di pilotare un robot gigante!", + "💣 Oggi dovrai continuare a parlare, o esploderai!", + "🤌 Oggi ti sentirai particolarmente italiano, e gesticolerai più del solito!", + "🪵 Oggi ti servirà legname!", + "☄️ Oggi avvisterai una cometa, rischiando di inciampare!", + "🥅 Oggi farai goal!", + "🧿 Oggi sarai protetto dagli spiriti maligni che attraversano le pareti!", + "💰 Oggi è una buona giornata per il capitalismo!", + "⚒️ Oggi è una buona giornata per il comunismo!", + "🐰 Oggi inizia la stagione di caccia dei Big Chungus!", + "🐸 Oggi incontrerai una rana-cavaliere!", + "⚔️ Oggi un cyborg-samurai ti cederà la sua katana RGB!", + "🥪 Oggi mangerai un sandvich!", + "👻 Oggi farai amicizia con Re Boo!", + "🫀 Oggi un necromante ti ruberà il cuore, e lo farà battere a ritmo!", + "🦊 Oggi volerai su un Arwing in compagnia di un rinomato mercenario!", + "🦋 Oggi una tua particolare azione avrà conseguenze, ma potrai tornare indietro nel tempo e correggerla!", + "🐳 Oggi una balena trasporterà un container per te!", + "🔥 Oggi sarà una giornata di fuoco!", + "🥕 Oggi sostituirai il naso a un pupazzo di neve!", + "🍔 Oggi mangerai il tuo cibo preferito: il sushi!", + "🍭 Oggi un lecca-lecca ti sbloccherà poteri inimmaginabili!", + "🧩 Oggi andrai a caccia di Jiggy!", + "🚜 Oggi piraterai un trattore!", + "🧭 Oggi ti perderai nei Lost Woods!", + "⚙️ Oggi aumenterai la produzione di Iron Gear!", + "🔫 Oggi attiverai il tuo Devil Trigger!", + "🍺 Oggi servirai un drink con più Karmotrine!", + "🚽 Oggi sperimenterai la leggendaria Terra Toilet!", + "🚰 Oggi sarai più idratato del solito!", + "🔑 Oggi troverai la chiave di tutte le porte!", + "📎 Oggi incontrerai Clippy!", + "🌪 Oggi un tornado girerà in senso orario!", + "🍄 Oggi diventerai Super grazie ad un fungo!", + "👑 Oggi preparerai la colazione per Re Artù!", + "🍌 Oggi metterai una banana in microonde!", + "❤️‍🔥 Oggi scapperai dal Tartaro!", + "♻️ Oggi, riciclando della Silt, troverai un dinosauro!", + "🏧 Oggi piazzerai un jammer su un bancomat, estraendone i contenuti!", + "🚼 Oggi ti chiederai il significato di questa emoji!", + "🤡 Oggi dovrai interrogare il clown di un circo!", + "👣 Oggi riceverai un marchio che ti proteggerà dai vampiri!", + "🎊 Oggi dalle Sfere Festa non uscirà nessuna Bob-omba!", + "🧲 Oggi piazzerai un magnete per attirare colpi di bazooka!", + "㊗️ Oggi qualcuno ti farà le sue congratulazioni!", + "⚛️ Oggi sfrutterai appieno l'energia dell'atomo!", + "🈁 Oggi ti troverai qui!", + "💮 Oggi i tuoi esami andranno alla perfezione!", + "☕️ Oggi berrai un espresso d-d-doppio!?", + "🐝 Oggi farai quello che fanno le api sulle foglie!", + "🎰 Oggi vincerai il Jackpot di Francoforte 1!", + "🧱 Oggi rifiuterai un en passant!", + "🪓 Oggi perderai la tua ascia, ma la riuscirai facilmente a ritrovare, in quanto starà urlando il tuo nome!", + "🕳 Oggi cadrai in una Trappola!", + "⛏ Oggi scaverai degli smeraldi!", + "🩹 Oggi rigenererai tutta la tua vita con un singolo cerotto!", + "📈 Oggi i tuoi affari andranno alla grande!", + "📉 Oggi avrai la possibilità di comprare qualche cosa a prezzo scontato!", + "🅱️ Oggi la seconda lettera dell'alfabeto ti porterà più fortuna del solito!", + "🧚 Oggi ti chiederai coraggiosamente dove vola la fatina!", + "⚔️ Oggi ridurrai dei Corpus a fettine!", + "🕯 Oggi troverai coraggio nella luce della tua torcia!", + "🎺 Oggi uno scheletro suonerà una trombetta!", + "🌋 Oggi getterai un anello in un vulcano!", + "🧶 Oggi comprerai della lana da fare l'uncinetto!", + "🐰 Oggi un coniglio ti farà girare la sua ruota!", + "🧛 Oggi scoprirai finalmente come fa il vampiro ancora a sopravvivere!", + "👽 Oggi sarai scelto come comandante di una squadra per la difesa planetaria!", + "🐝 Oggi b!", + "🎸 Oggi le suonerai a qualcuno!", + "🧬 Oggi la tua specie si evolverà in un altra con delle bocche sulle mani!", + "🅰️ Oggi premerai un pulsante a metà!", + "📻 Oggi sarà il tuo turno di usare la Boombox!", + "🐡 Oggi riaccenderai un faro sottomarino!", + "🎄 Oggi addobberai un albero!", + "🪲 Oggi il tuo insetto metallico sconfiggerà i suoi nemici a suon di musica!", + "🀄️ Oggi vincerai a Mahjong!", + "🃏 Oggi vincerai a solitario!", + "🛗 Oggi l'ascensore ti porterà sulla superficie di Auriga!", + "🦷 Oggi quattro denti dorati verranno messi sulla bilancia a tuo favore!", + "✨ Oggi riceverai una /fortune mai vista prima!", + "🐷 Oggi riceverai una chiamata da un maialino!", + "🎆 Oggi vedrai dei fuochi artificiali!", + "🗽 Oggi avrai più libertà del solito!", + "🎳 Oggi tuo cugino ti inviterà a giocare a bowling!", + "⛎ Oggi romperai la quarta parete!", + "🛕 Oggi raggiungerai la cima di un Pantheon!", + "🍽 Oggi la tua fabbrica produrrà più Iron Plate del normale!", +]; + +struct FortuneKey { + today: chrono::NaiveDate, + author_id: teloxide::types::UserId +} + +impl Hash for FortuneKey { + fn hash(&self, state: &mut H) { + let days: i32 = self.today.num_days_from_ce(); + let id: u64 = self.author_id.0; + + state.write_i32(days); + state.write_u64(id); + } +} + +pub(super) async fn handler(bot: Bot, _dialogue: CommandDialogue, message: Message) -> CommandResult { + let today = chrono::Local::now().date_naive(); + + let author = message.from() + .context("Failed to get the user who sent the original message")?; + let author_id = author.id; + + let key = FortuneKey {today, author_id}; + + let mut hasher = std::hash::DefaultHasher::new(); + key.hash(&mut hasher); + let hash = hasher.finish() + .to_le_bytes() + .into_iter() + .cycle() + .take(32) + .collect::>() + .try_into(); + if hash.is_err() { + anyhow::bail!("Failed to select random seed"); + } + let hash = hash.unwrap(); + + let mut rng = rand::rngs::SmallRng::from_seed(hash); + + let fortune = FORTUNES.choose(&mut rng) + .context("Failed to choose a fortune")?; + + let _reply = bot + .send_message(message.chat.id, fortune.to_string()) + .reply_to_message_id(message.id) + .await + .context("Failed to send message")?; + + Ok(()) +} \ No newline at end of file diff --git a/src/telegram/commands/mod.rs b/src/telegram/commands/mod.rs index 043d6a82..32f6ed68 100644 --- a/src/telegram/commands/mod.rs +++ b/src/telegram/commands/mod.rs @@ -1,12 +1,11 @@ use anyhow::Error; -use diesel::PgConnection; use teloxide::{Bot, dptree}; use teloxide::dispatching::{DefaultKey, Dispatcher, HandlerExt, UpdateFilterExt}; use teloxide::dispatching::dialogue::{InMemStorage, TraceStorage}; use teloxide::types::{Message, Update}; -use teloxide::utils::command::BotCommands; mod start; +mod fortune; #[derive(Debug, Clone, Default)] enum State { @@ -14,10 +13,10 @@ enum State { Default, } -type Dialogue = teloxide::dispatching::dialogue::Dialogue>>; -type Result = anyhow::Result<()>; +type CommandDialogue = teloxide::dispatching::dialogue::Dialogue>>; +type CommandResult = anyhow::Result<()>; -async fn detect_command(bot: Bot, dialogue: Dialogue, message: Message) -> Result { +async fn detect_command(bot: Bot, dialogue: CommandDialogue, message: Message) -> CommandResult { let text = message.text(); if text.is_none() { // Ignore non-textual messages @@ -27,6 +26,7 @@ async fn detect_command(bot: Bot, dialogue: Dialogue, message: Message) -> Resul match text { "/start" => start::handler(bot, dialogue, message).await, + "/fortune" => fortune::handler(bot, dialogue, message).await, _ => anyhow::bail!("Unknown command"), } } diff --git a/src/telegram/commands/start.rs b/src/telegram/commands/start.rs index abe3647e..a4f67ecf 100644 --- a/src/telegram/commands/start.rs +++ b/src/telegram/commands/start.rs @@ -3,9 +3,9 @@ use teloxide::Bot; use teloxide::payloads::SendMessageSetters; use teloxide::requests::Requester; use teloxide::types::{Message}; -use super::{Dialogue, Result}; +use super::{CommandDialogue, CommandResult}; -pub(super) async fn handler(bot: Bot, _dialogue: Dialogue, message: Message) -> Result { +pub(super) async fn handler(bot: Bot, _dialogue: CommandDialogue, message: Message) -> CommandResult { let author = message.from() .context("Failed to get the user who sent the original message")?;