From d91b48da889800f7f928882cf272b2af4f300a77 Mon Sep 17 00:00:00 2001 From: Yash Karandikar Date: Mon, 26 Jun 2023 21:17:22 -0500 Subject: [PATCH] Update serenity and remedy discord's username change --- Cargo.lock | 350 ++++++++++++++++++--------------------------- Cargo.toml | 8 +- README.md | 2 - build.rs | 8 +- src/discord_irc.rs | 42 +++--- src/irc_discord.rs | 39 +++-- src/main.rs | 8 +- 7 files changed, 190 insertions(+), 267 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 136d946..056d250 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,35 +19,28 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.58" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" [[package]] -name = "async-trait" -version = "0.1.52" +name = "arrayvec" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" dependencies = [ - "proc-macro2", - "quote", - "syn", + "serde", ] [[package]] -name = "async-tungstenite" -version = "0.17.2" +name = "async-trait" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b71b31561643aa8e7df3effe284fa83ab1a840e52294c5f4bd7bfd8b2becbb" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ - "futures-io", - "futures-util", - "log", - "native-tls", - "pin-project-lite", - "tokio", - "tokio-native-tls", - "tungstenite", + "proc-macro2", + "quote", + "syn 2.0.22", ] [[package]] @@ -62,6 +55,12 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "base64" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" + [[package]] name = "bit-set" version = "0.5.2" @@ -115,9 +114,6 @@ name = "cc" version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" -dependencies = [ - "jobserver", -] [[package]] name = "cfg-if" @@ -197,9 +193,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.3" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", @@ -305,26 +301,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-iterator" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a0ac4aeb3a18f92eaf09c6bb9b3ac30ff61ca95514fc58cbead1c9a6bf5401" -dependencies = [ - "enum-iterator-derive", -] - -[[package]] -name = "enum-iterator-derive" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b13f1e69590421890f90448c3cd5f554746a31adc6dc0dac406ec6901db8dc25" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "fancy-regex" version = "0.10.0" @@ -443,6 +419,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.4" @@ -473,31 +458,6 @@ dependencies = [ "wasi 0.10.0+wasi-snapshot-preview1", ] -[[package]] -name = "getset" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "git2" -version = "0.13.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29229cc1b24c0e6062f6e742aa3e256492a5323365e5ed3413599f8a5eff7d6" -dependencies = [ - "bitflags", - "libc", - "libgit2-sys", - "log", - "url", -] - [[package]] name = "h2" version = "0.3.9" @@ -694,15 +654,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" -[[package]] -name = "jobserver" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" -dependencies = [ - "libc", -] - [[package]] name = "js-sys" version = "0.3.55" @@ -724,30 +675,6 @@ version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" -[[package]] -name = "libgit2-sys" -version = "0.12.26+1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e1c899248e606fbfe68dcb31d8b0176ebab833b103824af31bddf4b7457494" -dependencies = [ - "cc", - "libc", - "libz-sys", - "pkg-config", -] - -[[package]] -name = "libz-sys" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "lock_api" version = "0.4.7" @@ -760,12 +687,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.14" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] name = "matches" @@ -864,20 +788,11 @@ dependencies = [ "libc", ] -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - [[package]] name = "once_cell" -version = "1.9.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "openssl" @@ -912,15 +827,6 @@ dependencies = [ "vcpkg", ] -[[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 = "parking_lot" version = "0.11.2" @@ -992,14 +898,14 @@ checksum = "b95af56fee93df76d721d356ac1ca41fccf168bc448eb14049234df764ba3e76" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.98", ] [[package]] name = "pin-project-lite" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -1019,35 +925,11 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" dependencies = [ "unicode-ident", ] @@ -1066,9 +948,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.20" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -1154,7 +1036,7 @@ version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c4e0a76dc12a116108933f6301b95e83634e0c47b0afbed6abbaa0601e99258" dependencies = [ - "base64", + "base64 0.13.0", "bytes", "encoding_rs", "futures-core", @@ -1187,9 +1069,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "ryu" @@ -1213,6 +1095,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "serde", + "zeroize", +] + [[package]] name = "security-framework" version = "2.4.2" @@ -1245,16 +1137,6 @@ 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_derive" version = "1.0.140" @@ -1263,7 +1145,7 @@ checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.98", ] [[package]] @@ -1291,39 +1173,38 @@ dependencies = [ [[package]] name = "serenity" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1a6cef5e72d4e5787c96413ec0a45f9317c59f0099e2ff2038b73cb352fefd" +version = "0.11.5" +source = "git+https://github.com/serenity-rs/serenity?rev=56867af#56867af31c5144029cf31dc1d563c99a47b38aac" dependencies = [ + "arrayvec", "async-trait", - "async-tungstenite", - "base64", + "base64 0.21.2", "bitflags", "bytes", - "cfg-if", "dashmap", "flate2", "futures", - "mime", + "fxhash", "mime_guess", "parking_lot 0.12.1", "percent-encoding", "reqwest", + "secrecy", "serde", - "serde-value", "serde_json", - "time 0.3.11", + "time 0.3.22", "tokio", + "tokio-tungstenite", "tracing", "typemap_rev", "url", ] [[package]] -name = "sha-1" -version = "0.10.0" +name = "sha1" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", @@ -1372,6 +1253,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "tempfile" version = "3.2.0" @@ -1403,7 +1295,7 @@ checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.98", ] [[package]] @@ -1419,14 +1311,29 @@ dependencies = [ [[package]] name = "time" -version = "0.3.11" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" +checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd" dependencies = [ "itoa 1.0.1", - "libc", - "num_threads", "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "time-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +dependencies = [ + "time-core", ] [[package]] @@ -1473,7 +1380,7 @@ checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.98", ] [[package]] @@ -1497,6 +1404,20 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-tungstenite" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" +dependencies = [ + "futures-util", + "log", + "native-tls", + "tokio", + "tokio-native-tls", + "tungstenite", +] + [[package]] name = "tokio-util" version = "0.6.9" @@ -1528,9 +1449,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.29" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "log", @@ -1541,22 +1462,22 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.18" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.22", ] [[package]] name = "tracing-core" -version = "0.1.21" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ - "lazy_static", + "once_cell", ] [[package]] @@ -1567,11 +1488,11 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "tungstenite" -version = "0.17.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" +checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" dependencies = [ - "base64", + "base64 0.13.0", "byteorder", "bytes", "http", @@ -1579,7 +1500,7 @@ dependencies = [ "log", "native-tls", "rand", - "sha-1", + "sha1", "thiserror", "url", "utf-8", @@ -1587,9 +1508,9 @@ 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" @@ -1666,18 +1587,13 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vergen" -version = "7.3.1" +version = "8.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f10de320f0fe3f21913dabbfcbced6867bbe47a6b1a5db830e37df3a50279bd0" +checksum = "8b3c89c2c7e50f33e4d35527e5bf9c11d6d132226dbbd1753f0fbe9f19ef88c6" dependencies = [ "anyhow", - "cfg-if", - "enum-iterator", - "getset", - "git2", "rustversion", - "thiserror", - "time 0.3.11", + "time 0.3.22", ] [[package]] @@ -1729,7 +1645,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn", + "syn 1.0.98", "wasm-bindgen-shared", ] @@ -1763,7 +1679,7 @@ checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1857,3 +1773,9 @@ checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" dependencies = [ "winapi", ] + +[[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 4be9940..d5b0bb3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,11 +21,13 @@ version = "1.20.0" features = ["full"] [dependencies.serenity] -version = "0.11.4" +# version = "0.11.4" +git = "https://github.com/serenity-rs/serenity" +rev = "56867af" default-features = false features = ["builder", "cache", "client", "gateway", "model", "utils", "native_tls_backend"] [build-dependencies.vergen] -version = "7.3.1" +version = "8.2.1" default-features = false -features = ["git"] +features = ["git", "gitcl"] diff --git a/README.md b/README.md index 93c2066..661cbfd 100644 --- a/README.md +++ b/README.md @@ -12,5 +12,3 @@ TODO: - [x] handle multiple pings - [x] multiple channels - [x] IRC and Discord formatting - -For extra fun set the DIRCORD_POLARIAN_MODE environmental variable to any value ;) diff --git a/build.rs b/build.rs index b72de18..8e93d58 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,7 @@ -use vergen::{vergen, Config}; +use std::error::Error; +use vergen::EmitBuilder; -fn main() { - vergen(Config::default()).unwrap(); +fn main() -> Result<(), Box> { + EmitBuilder::builder().git_branch().git_sha(true).emit()?; + Ok(()) } diff --git a/src/discord_irc.rs b/src/discord_irc.rs index 7557135..b0c7641 100644 --- a/src/discord_irc.rs +++ b/src/discord_irc.rs @@ -13,7 +13,7 @@ use serenity::{ channel::{Channel, Message, MessageReference, MessageType}, guild::Member, id::GuildId, - prelude::{ChannelId, Ready, Role, RoleId}, + prelude::{ChannelId, GuildMemberUpdateEvent, Ready, Role, RoleId}, user::User, }, prelude::*, @@ -64,16 +64,8 @@ impl<'a> StrChunks<'a> { } async fn create_prefix(msg: &Message, is_reply: bool, http: impl CacheHttp) -> (String, usize) { - let mut nick = match msg.member(http).await { - Ok(Member { - nick: Some(nick), .. - }) => Cow::Owned(nick), - _ => Cow::Borrowed(&msg.author.name), - }; - - if option_env!("DIRCORD_POLARIAN_MODE").is_some() { - nick = Cow::Owned("polarbear".to_string()); - } + // it's okay to unwrap here since we know we're in a guild + let nick = msg.member(http).await.unwrap().display_name().to_owned(); let mut chars = nick.char_indices(); let first_char = chars.next().unwrap().1; @@ -124,7 +116,8 @@ impl EventHandler for Handler { let (prefix, content_limit) = create_prefix(&msg, false, &ctx).await; - let (channel, channel_id) = match mapping.iter().find(|(_, &v)| v == msg.channel_id.0) { + let (channel, channel_id) = match mapping.iter().find(|(_, &v)| v == msg.channel_id.0.get()) + { Some((k, v)) => (k.as_str(), ChannelId::from(*v)), None => return, }; @@ -216,16 +209,24 @@ impl EventHandler for Handler { members.push(new_member); } - async fn guild_member_update(&self, ctx: Context, _: Option, new: Member) { + async fn guild_member_update( + &self, + ctx: Context, + _: Option, + new: Option, + _: GuildMemberUpdateEvent, + ) { let ctx_data = ctx.data.read().await; let mut members = ctx_data.get::().unwrap().lock().await; - let x = members - .iter() - .position(|m| m.user.id == new.user.id) - .unwrap(); - members.remove(x); - members.push(new); + if let Some(new) = new { + let x = members + .iter() + .position(|m| m.user.id == new.user.id) + .unwrap(); + members.remove(x); + members.push(new); + } } async fn guild_member_removal( @@ -258,7 +259,7 @@ async fn discord_to_irc_processing( let id = caps[1].parse::().unwrap(); let display_name = self.members.iter().find_map(|member| { - (id == member.user.id.0).then(|| member.display_name().into_owned()) + (id == member.user.id.0.get()).then(|| member.display_name().to_owned()) }); if let Some(display_name) = display_name { @@ -300,7 +301,6 @@ async fn discord_to_irc_processing( .await { Ok(Channel::Guild(gc)) => Cow::Owned(format!("#{}", gc.name)), - Ok(Channel::Category(cat)) => Cow::Owned(format!("#{}", cat.name)), _ => Cow::Borrowed("#deleted-channel"), }; diff --git a/src/irc_discord.rs b/src/irc_discord.rs index a6849dd..2d33339 100644 --- a/src/irc_discord.rs +++ b/src/irc_discord.rs @@ -1,12 +1,13 @@ use irc::{client::Client as IrcClient, proto::Command}; -use std::{collections::HashMap, sync::Arc, time::Instant}; +use std::{collections::HashMap, num::NonZeroU64, sync::Arc, time::Instant}; use tokio::sync::{mpsc::unbounded_channel, Mutex}; use tokio_stream::wrappers::UnboundedReceiverStream; use serenity::{ + builder::{EditChannel, ExecuteWebhook}, cache::Cache, futures::StreamExt, http::Http, @@ -16,7 +17,7 @@ use serenity::{ prelude::{GuildChannel, Member, UserId}, webhook::Webhook, }, - prelude::*, + prelude::Mentionable, utils::{content_safe, ContentSafeOptions}, }; @@ -89,17 +90,15 @@ pub async fn irc_loop( let topic = &args[2]; let channel = ChannelId::from(*unwrap_or_continue!(mapping.get(channel))); - channel.edit(&http, |c| c.topic(topic)).await?; + let builder = EditChannel::new().topic(topic); + channel.edit(&http, builder).await?; } continue; }; - let mut nickname = unwrap_or_continue!(orig_message.source_nickname()); + let nickname = unwrap_or_continue!(orig_message.source_nickname()); - if option_env!("DIRCORD_POLARIAN_MODE").is_some() { - nickname = "polarbear"; - } match orig_message.command { Command::PRIVMSG(ref channel, ref message) | Command::NOTICE(ref channel, ref message) => { @@ -150,7 +149,7 @@ pub async fn irc_loop( if let Some(webhook) = webhooks.get(channel) { let avatar = &*avatar_cache.entry(nickname.to_owned()).or_insert_with(|| { members_lock.iter().find_map(|member| { - (*member.display_name() == nickname) + (member.display_name() == nickname) .then(|| member.user.avatar_url()) .flatten() }) @@ -231,7 +230,8 @@ pub async fn irc_loop( Command::TOPIC(ref channel, ref topic) => { let topic = unwrap_or_continue!(topic.as_ref()); let channel_id = ChannelId::from(*unwrap_or_continue!(mapping.get(channel))); - channel_id.edit(&http, |c| c.topic(topic)).await?; + let builder = EditChannel::new().topic(topic); + channel_id.edit(&http, builder).await?; } Command::KICK(ref channel, ref user, ref reason) => { let channel_id = ChannelId::from(*unwrap_or_continue!(mapping.get(channel))); @@ -270,11 +270,12 @@ fn irc_to_discord_processing( .entry(slice.to_owned()) .or_insert_with(|| { self.members.iter().find_map(|member| { - (slice == member.display_name().as_str() - || slice == member.user.name.as_str()) - .then_some(member.user.id.0) + (slice == member.display_name() || slice == member.user.name.as_str()) + .then_some(member.user.id.0.get()) }) }) + .map(NonZeroU64::new) + .flatten() .map(UserId); if let Some(id) = id { @@ -401,15 +402,13 @@ async fn msg_task(mut recv: UnboundedReceiverStream) -> anyhow::R if content.is_empty() { continue; } - webhook - .execute(&http, true, |w| { - if let Some(ref url) = avatar_url { - w.avatar_url(url); - } + let mut builder = ExecuteWebhook::new(); + if let Some(ref url) = avatar_url { + builder = builder.avatar_url(url); + } + builder = builder.username(nickname).content(content); - w.username(nickname).content(content) - }) - .await?; + webhook.execute(&http, true, builder).await?; } QueuedMessage::Raw { channel_id, diff --git a/src/main.rs b/src/main.rs index 2123b89..d137848 100644 --- a/src/main.rs +++ b/src/main.rs @@ -114,14 +114,14 @@ async fn main() -> anyhow::Result<()> { let irc_client = IrcClient::from_config(config).await?; - let http = discord_client.cache_and_http.http.clone(); - let cache = discord_client.cache_and_http.cache.clone(); + let http = discord_client.http.clone(); + let cache = discord_client.cache.clone(); let members = Arc::new(Mutex::new({ let channel_id = ChannelId::from(*conf.channels.iter().next().unwrap().1); channel_id - .to_channel(discord_client.cache_and_http.clone()) + .to_channel(discord_client.http.clone()) .await? .guild() .unwrap() // we can panic here because if it's not a guild channel then the bot shouldn't even work @@ -196,6 +196,6 @@ async fn parse_webhook_url(http: Arc, url: String) -> anyhow::Result>(); let id = split[0].parse::()?; let token = split[1].to_string(); - let webhook = http.get_webhook_with_token(id, &token).await?; + let webhook = http.get_webhook_with_token(id.into(), &token).await?; Ok(webhook) }