diff --git a/.cargo/config.toml b/.cargo/config.toml index 7af5622..d557d13 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,5 +1,5 @@ [registry] -default = "vcs-elnafo" +default = "crates-io" [registries.vcs-elnafo] index = "sparse+https://vcs.elnafo.ru/api/packages/L-Nafaryus/cargo/" diff --git a/Cargo.lock b/Cargo.lock index 5c085ca..67cbc6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -47,6 +47,19 @@ version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +[[package]] +name = "aquamarine" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a941c39708478e8eea39243b5983f1c42d2717b3620ee91f4a52115fd02ac43f" +dependencies = [ + "itertools 0.9.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "arrayvec" version = "0.7.4" @@ -161,6 +174,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bitflags" version = "1.3.2" @@ -284,6 +303,23 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "command_attr" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88da8d7e9fe6f30d8e3fcf72d0f84102b49de70fece952633e8439e89bdc7631" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "core-foundation" version = "0.9.4" @@ -384,14 +420,38 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + [[package]] name = "darling" version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.8", + "darling_macro 0.20.8", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 1.0.109", ] [[package]] @@ -408,13 +468,24 @@ dependencies = [ "syn 2.0.60", ] +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn 1.0.109", +] + [[package]] name = "darling_macro" version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ - "darling_core", + "darling_core 0.20.8", "quote", "syn 2.0.60", ] @@ -460,6 +531,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.60", +] + [[package]] name = "digest" version = "0.10.7" @@ -470,6 +554,15 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "dptree" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d81175dab5ec79c30e0576df2ed2c244e1721720c302000bb321b107e82e265c" +dependencies = [ + "futures", +] + [[package]] name = "either" version = "1.11.0" @@ -485,12 +578,35 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + [[package]] name = "equivalent" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "erasable" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f11890ce181d47a64e5d1eb4b6caba0e7bae911a356723740d058a5d0340b7d" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "errno" version = "0.3.8" @@ -532,6 +648,21 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -549,6 +680,7 @@ checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", + "futures-executor", "futures-io", "futures-sink", "futures-task", @@ -759,6 +891,12 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "hyper" version = "0.14.28" @@ -809,6 +947,19 @@ dependencies = [ "tokio-io-timeout", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "iana-time-zone" version = "0.1.60" @@ -874,6 +1025,26 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.12.1" @@ -904,6 +1075,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "levenshtein" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" + [[package]] name = "libc" version = "0.2.153" @@ -928,9 +1105,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "matchers" @@ -1005,6 +1182,29 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "never" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96aba5aa877601bb3f6dd6a63a969e1f82e60646e81e71b14496995e9853c91" + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -1055,6 +1255,50 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "openssl" +version = "0.10.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +dependencies = [ + "bitflags 2.5.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "opentelemetry" version = "0.21.0" @@ -1130,6 +1374,7 @@ dependencies = [ "rand", "serde", "serde_json", + "teloxide", "tokio", "toml", "tracing", @@ -1144,6 +1389,17 @@ dependencies = [ "shuttle-serenity", ] +[[package]] +name = "oscuro-telegram" +version = "0.1.0" +dependencies = [ + "log", + "pretty_env_logger", + "serenity", + "teloxide", + "tokio", +] + [[package]] name = "overload" version = "0.1.1" @@ -1211,6 +1467,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + [[package]] name = "poise" version = "0.6.1" @@ -1234,7 +1496,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fa2c123c961e78315cd3deac7663177f12be4460f5440dbf62a7ed37b1effea" dependencies = [ - "darling", + "darling 0.20.8", "proc-macro2", "quote", "syn 2.0.60", @@ -1252,6 +1514,16 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "pretty_env_logger" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c" +dependencies = [ + "env_logger", + "log", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -1302,7 +1574,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" dependencies = [ "anyhow", - "itertools", + "itertools 0.12.1", "proc-macro2", "quote", "syn 2.0.60", @@ -1367,6 +1639,15 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rc-box" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0690759eabf094030c2cdabc25ade1395bac02210d920d655053c1d49583fd8" +dependencies = [ + "erasable", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -1426,7 +1707,7 @@ version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "base64", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -1436,11 +1717,13 @@ dependencies = [ "http-body", "hyper", "hyper-rustls", + "hyper-tls", "ipnet", "js-sys", "log", "mime", "mime_guess", + "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -1452,6 +1735,7 @@ dependencies = [ "sync_wrapper", "system-configuration", "tokio", + "tokio-native-tls", "tokio-rustls 0.24.1", "tokio-util", "tower-service", @@ -1485,6 +1769,15 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "0.38.32" @@ -1530,7 +1823,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64", + "base64 0.21.7", ] [[package]] @@ -1581,6 +1874,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -1607,6 +1909,29 @@ dependencies = [ "zeroize", ] +[[package]] +name = "security-framework" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +dependencies = [ + "bitflags 2.5.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "1.0.22" @@ -1625,6 +1950,15 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde_cow" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e84ce5596a72f0c4c60759a10ff8c22d5eaf227b0dc2789c8746193309058b" +dependencies = [ + "serde", +] + [[package]] name = "serde_derive" version = "1.0.198" @@ -1669,28 +2003,44 @@ dependencies = [ ] [[package]] -name = "serenity" -version = "0.12.1" +name = "serde_with_macros" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64da29158bb55d70677cacd4f4f8eab1acef005fb830d9c3bea411b090e96a9" +checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +dependencies = [ + "darling 0.13.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "serenity" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "880a04106592d0a8f5bdacb1d935889bfbccb4a14f7074984d9cd857235d34ac" dependencies = [ "arrayvec", "async-trait", - "base64", + "base64 0.22.1", "bitflags 2.5.0", "bytes", "chrono", + "command_attr", "dashmap", "flate2", "futures", "fxhash", + "levenshtein", "mime_guess", "parking_lot", "percent-encoding", "reqwest", "secrecy", "serde", + "serde_cow", "serde_json", + "static_assertions", "time", "tokio", "tokio-tungstenite", @@ -1698,6 +2048,7 @@ dependencies = [ "typemap_rev", "typesize", "url", + "uwl", ] [[package]] @@ -1894,6 +2245,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strfmt" version = "0.2.4" @@ -2008,6 +2365,87 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" +[[package]] +name = "take_mut" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" + +[[package]] +name = "takecell" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20f34339676cdcab560c9a82300c4c2581f68b9369aedf0fae86f2ff9565ff3e" + +[[package]] +name = "teloxide" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c63345cf32a8850ebddcdd769dc2d5193d5e231262d5dada264b79da01a664da" +dependencies = [ + "aquamarine", + "bytes", + "derive_more", + "dptree", + "futures", + "log", + "mime", + "pin-project", + "serde", + "serde_json", + "serde_with_macros", + "teloxide-core", + "teloxide-macros", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "url", +] + +[[package]] +name = "teloxide-core" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "303db260110c238e3af77bb9dff18bf7a5b5196f783059b0852aab75f91d5a16" +dependencies = [ + "bitflags 1.3.2", + "bytes", + "chrono", + "derive_more", + "either", + "futures", + "log", + "mime", + "never", + "once_cell", + "pin-project", + "rc-box", + "reqwest", + "serde", + "serde_json", + "serde_with_macros", + "take_mut", + "takecell", + "thiserror", + "tokio", + "tokio-util", + "url", + "uuid", +] + +[[package]] +name = "teloxide-macros" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f1d653b093dba5e44cada57a516f572167df37b8a619443e59c8c517bb6d804" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "tempfile" version = "3.10.1" @@ -2020,6 +2458,15 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "thiserror" version = "1.0.58" @@ -2098,9 +2545,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", @@ -2127,15 +2574,25 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", "syn 2.0.60", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.24.1" @@ -2241,7 +2698,7 @@ dependencies = [ "async-stream", "async-trait", "axum", - "base64", + "base64 0.21.7", "bytes", "h2", "http 0.2.12", @@ -2534,12 +2991,24 @@ dependencies = [ "serde", ] +[[package]] +name = "uwl" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4bf03e0ca70d626ecc4ba6b0763b934b6f2976e8c744088bb3c1d646fbb1ad0" + [[package]] name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.4" diff --git a/Cargo.toml b/Cargo.toml index b981dbe..5d9bdce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,4 +15,4 @@ tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } [workspace] resolver = "2" -members = ["crates/oscuro-core", "crates/oscuro-shuttle"] +members = ["crates/oscuro-core", "crates/oscuro-shuttle", "crates/oscuro-telegram"] diff --git a/crates/oscuro-core/Cargo.toml b/crates/oscuro-core/Cargo.toml index 9f527cc..21e54ed 100644 --- a/crates/oscuro-core/Cargo.toml +++ b/crates/oscuro-core/Cargo.toml @@ -12,6 +12,7 @@ poise = "0.6.1" rand = "0.8.5" serde = { version = "1.0.198", features = ["derive"] } serde_json = "1.0.116" +teloxide = { version = "0.12.2", features = ["macros"] } tokio = { version = "1.26.0", features = ["macros", "rt-multi-thread"] } toml = "0.8.12" tracing = "0.1.37" diff --git a/crates/oscuro-core/src/lib.rs b/crates/oscuro-core/src/lib.rs index 2f11dc3..ac7a003 100644 --- a/crates/oscuro-core/src/lib.rs +++ b/crates/oscuro-core/src/lib.rs @@ -5,6 +5,9 @@ pub mod errors; use errors::BoxedError; use poise::serenity_prelude::{self as serenity, prelude::TypeMapKey, Client}; +use teloxide::prelude::*; +use teloxide::types::Recipient; + #[derive(Debug, Clone)] pub struct AppState { pub config: config::Config, @@ -57,6 +60,16 @@ async fn event_handler( serenity::FullEvent::Ready { data_about_bot, .. } => { println!("Logged in as {}", data_about_bot.user.name); } + serenity::FullEvent::Message { new_message } => { + println!("{:?}", new_message.clone()); + let bot = Bot::from_env(); + bot.send_message( + Recipient::Id(ChatId(-4221527632)), + new_message.author.name.clone(), + ) + .await + .expect("err"); + } _ => {} } Ok(()) diff --git a/crates/oscuro-telegram/Cargo.toml b/crates/oscuro-telegram/Cargo.toml new file mode 100644 index 0000000..1fab116 --- /dev/null +++ b/crates/oscuro-telegram/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "oscuro-telegram" +version = "0.1.0" +edition = "2021" +publish = ["vcs-elnafo"] + +[dependencies] +log = "0.4.22" +pretty_env_logger = "0.5.0" +serenity = "0.12.2" +teloxide = { version = "0.12.2", features = ["macros"] } +tokio = { version = "1.38.0", features = ["rt-multi-thread", "macros"] } diff --git a/crates/oscuro-telegram/src/main.rs b/crates/oscuro-telegram/src/main.rs new file mode 100644 index 0000000..f4979ff --- /dev/null +++ b/crates/oscuro-telegram/src/main.rs @@ -0,0 +1,31 @@ +use serenity::builder::ExecuteWebhook; +use serenity::http::Http; +use serenity::model::webhook::Webhook; +use teloxide::prelude::*; +use teloxide::types::Recipient; + +#[tokio::main] +async fn main() { + pretty_env_logger::init(); + log::info!("Starting throw dice bot..."); + + let bot = Bot::from_env(); + + /*let http = Http::new(""); + let webhook = Webhook::from_url(&http, "https://discord.com/api/webhooks/1259860143579987999/whI0ozB5uc17Wdzkb2-HSrVGi8h_MyR2_4eyCsGuGpQN4KcjMhq7rfQH1JIdbD1HNaW_") + .await + .expect("Replace the webhook with your own"); + + let builder = ExecuteWebhook::new().content("hello there").username("Webhook test"); + webhook.execute(&http, false, builder).await.expect("Could not execute webhook."); + */ + teloxide::repl(bot, |bot: Bot, msg: Message| async move { + bot.send_dice(msg.chat.id).await?; + Ok(()) + }) + .await; + + /*bot.send_message(Recipient::Id(ChatId(-4221527632)), "Heya!") + .await + .expect("err");*/ +} diff --git a/flake.nix b/flake.nix index 792f952..886c09d 100644 --- a/flake.nix +++ b/flake.nix @@ -1,168 +1,174 @@ { - description = "Oscuro - a fancy discord bot"; + description = "Oscuro - a fancy discord bot"; - nixConfig = { - extra-substituters = [ "https://bonfire.cachix.org" ]; - extra-trusted-public-keys = [ "bonfire.cachix.org-1:mzAGBy/Crdf8NhKail5ciK7ZrGRbPJJobW6TwFb7WYM=" ]; + nixConfig = { + extra-substituters = ["https://bonfire.cachix.org"]; + extra-trusted-public-keys = ["bonfire.cachix.org-1:mzAGBy/Crdf8NhKail5ciK7ZrGRbPJJobW6TwFb7WYM="]; + }; + + inputs = { + bonfire = { + url = "github:L-Nafaryus/bonfire"; }; + nixpkgs.follows = "bonfire/nixpkgs"; + }; - inputs = { - bonfire = { - url = "github:L-Nafaryus/bonfire"; - }; - nixpkgs.follows = "bonfire/nixpkgs"; - }; + outputs = { + self, + nixpkgs, + bonfire, + ... + }: let + forAllSystems = nixpkgs.lib.genAttrs ["x86_64-linux"]; + nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;}); + in { + packages = forAllSystems (system: let + pkgs = nixpkgsFor.${system}; + crane-lib = bonfire.inputs.crane.lib.${system}; - outputs = { self, nixpkgs, bonfire, ... }: - let - forAllSystems = nixpkgs.lib.genAttrs [ "x86_64-linux" ]; - nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); - in - { - packages = forAllSystems (system: - let - pkgs = nixpkgsFor.${system}; - crane-lib = bonfire.inputs.crane.lib.${system}; + src = pkgs.lib.cleanSourceWith { + src = ./.; + filter = path: type: (crane-lib.filterCargoSources path type); + }; - src = pkgs.lib.cleanSourceWith { - src = ./.; - filter = path: type: (crane-lib.filterCargoSources path type); - }; + common = { + inherit src; + pname = "oscuro"; + version = "0.1.0"; + strictDeps = true; + }; - common = { - inherit src; - pname = "oscuro"; - version = "0.1.0"; - strictDeps = true; - }; + cargoArtifacts = crane-lib.buildDepsOnly common; + in { + oscuro = crane-lib.buildPackage (common // {inherit cargoArtifacts;}); - cargoArtifacts = crane-lib.buildDepsOnly common; + default = self.packages.${system}.oscuro; + }); + + devShells = forAllSystems (system: let + pkgs = nixpkgsFor.${system}; + bonfire-pkgs = bonfire.packages.${system}; + fenix-pkgs = bonfire.inputs.fenix.packages.${system}; + in { + default = pkgs.mkShell { + buildInputs = [ + fenix-pkgs.complete.toolchain + bonfire-pkgs.cargo-shuttle + pkgs.cargo-release + pkgs.pkg-config + pkgs.openssl + ]; + }; + }); + + nixosModules = { + oscuro = { + config, + lib, + pkgs, + ... + }: + with lib; let + cfg = config.services.oscuro; + opt = options.services.oscuro; + pkg = self.packages.${pkgs.system}.oscuro; + configFile = pkgs.writeText "config.toml" '' + discord_token = "#discord_token#" + ''; in { - oscuro = crane-lib.buildPackage (common // { inherit cargoArtifacts; }); + options.services.oscuro = { + enable = mkEnableOption "Enables the Oscuro bot"; - default = self.packages.${system}.oscuro; - }); + package = mkPackageOption pkgs "oscuro" {}; - devShells = forAllSystems (system: - let - pkgs = nixpkgsFor.${system}; - bonfire-pkgs = bonfire.packages.${system}; - fenix-pkgs = bonfire.inputs.fenix.packages.${system}; - in { - default = pkgs.mkShell { - buildInputs = [ - fenix-pkgs.complete.toolchain - bonfire-pkgs.cargo-shuttle - pkgs.cargo-release - ]; - }; - }); - - nixosModules = { - oscuro = { config, lib, pkgs, ... }: - with lib; - let - cfg = config.services.oscuro; - opt = options.services.oscuro; - pkg = self.packages.${pkgs.system}.oscuro; - configFile = pkgs.writeText "config.toml" '' - discord_token = "#discord_token#" - ''; - in { - options.services.oscuro = { - enable = mkEnableOption "Enables the Oscuro bot"; - - package = mkPackageOption pkgs "oscuro" {}; - - dataDir = mkOption { - type = types.path; - default = "/var/lib/oscuro"; - description = lib.mdDoc "Directory to store Oscuro files"; - }; - - discordToken = mkOption { - type = types.nullOr types.str; - default = null; - example = "Bot TOKENTOKENTOKEN"; - }; - - discordTokenFile = mkOption { - type = types.nullOr types.str; - default = null; - example = "/var/lib/secrets/oscuro/discord_token"; - }; - }; - - config = mkIf cfg.enable { - assertions = [ - { - assertion = cfg.discordToken != null || cfg.discordTokenFile != null; - message = "Discord token must be set. Use `services.oscuro.discordToken` or `services.oscuro.discordTokenFile`."; - } - ]; - - users.users.oscuro = { - description = "Oscuro bot service user"; - home = cfg.dataDir; - createHome = true; - isSystemUser = true; - group = "oscuro"; - }; - users.groups.oscuro = {}; - - systemd.services.oscuro = { - description = "Oscuro"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - - serviceConfig = { - Restart = "always"; - ExecStart = "${pkg}/bin/oscuro"; - User = "oscuro"; - WorkingDirectory = cfg.dataDir; - }; - - preStart = let - runConfig = "${cfg.dataDir}/config.toml"; - replaceSecret = "${pkgs.replace-secret}/bin/replace-secret"; - in '' - cp -f '${configFile}' '${runConfig}' - chmod u+w '${runConfig}' - - ${lib.optionalString (cfg.discordTokenFile != null) '' - ${replaceSecret} '#discord_token#' '${cfg.discordTokenFile}' '${runConfig}' - ''} - ${lib.optionalString (cfg.discordToken != null) '' - sed -i 's/#discord_token#/${cfg.discordToken}/g' '${runConfig}' - ''} - - ''; - }; - }; + dataDir = mkOption { + type = types.path; + default = "/var/lib/oscuro"; + description = lib.mdDoc "Directory to store Oscuro files"; }; - default = self.nixosModules.oscuro; - }; + discordToken = mkOption { + type = types.nullOr types.str; + default = null; + example = "Bot TOKENTOKENTOKEN"; + }; - nixosConfigurations.oscuro = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ - self.nixosModules.oscuro - ({ pkgs, ... }: { - boot.isContainer = true; + discordTokenFile = mkOption { + type = types.nullOr types.str; + default = null; + example = "/var/lib/secrets/oscuro/discord_token"; + }; + }; - networking.hostName = "oscuro"; - networking.useDHCP = false; - - services.oscuro = { - enable = true; - discordToken = ""; # insert token - }; - - system.stateVersion = "24.05"; - }) + config = mkIf cfg.enable { + assertions = [ + { + assertion = cfg.discordToken != null || cfg.discordTokenFile != null; + message = "Discord token must be set. Use `services.oscuro.discordToken` or `services.oscuro.discordTokenFile`."; + } ]; + + users.users.oscuro = { + description = "Oscuro bot service user"; + home = cfg.dataDir; + createHome = true; + isSystemUser = true; + group = "oscuro"; + }; + users.groups.oscuro = {}; + + systemd.services.oscuro = { + description = "Oscuro"; + wantedBy = ["multi-user.target"]; + after = ["network.target"]; + + serviceConfig = { + Restart = "always"; + ExecStart = "${pkg}/bin/oscuro"; + User = "oscuro"; + WorkingDirectory = cfg.dataDir; + }; + + preStart = let + runConfig = "${cfg.dataDir}/config.toml"; + replaceSecret = "${pkgs.replace-secret}/bin/replace-secret"; + in '' + cp -f '${configFile}' '${runConfig}' + chmod u+w '${runConfig}' + + ${lib.optionalString (cfg.discordTokenFile != null) '' + ${replaceSecret} '#discord_token#' '${cfg.discordTokenFile}' '${runConfig}' + ''} + ${lib.optionalString (cfg.discordToken != null) '' + sed -i 's/#discord_token#/${cfg.discordToken}/g' '${runConfig}' + ''} + + ''; + }; + }; }; + + default = self.nixosModules.oscuro; }; + nixosConfigurations.oscuro = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + self.nixosModules.oscuro + ({pkgs, ...}: { + boot.isContainer = true; + + networking.hostName = "oscuro"; + networking.useDHCP = false; + + services.oscuro = { + enable = true; + discordToken = ""; # insert token + }; + + system.stateVersion = "24.05"; + }) + ]; + }; + }; }