From 693c6d59168ef2522ab74d522afff489d4d29ac1 Mon Sep 17 00:00:00 2001 From: Nikita Pekin Date: Wed, 22 Nov 2017 15:29:44 -0500 Subject: [PATCH] wip: update to latest serenity --- Cargo.lock | 1325 ++++++++++++++++++++++++------------- Cargo.toml | 79 +-- build.rs | 31 - src/command/counter.in.rs | 13 - src/command/counter.rs | 365 ---------- src/command/mod.rs | 16 +- src/command/ping.rs | 17 +- src/command/roll.rs | 45 +- src/command/stats.rs | 64 +- src/command/xkcd.in.rs | 9 - src/command/xkcd.rs | 118 ++-- src/config.in.rs | 11 - src/config.rs | 18 +- src/counter.rs | 6 +- src/error.rs | 12 + src/main.rs | 209 +++--- src/util.rs | 107 +-- 17 files changed, 1249 insertions(+), 1196 deletions(-) delete mode 100644 build.rs delete mode 100644 src/command/counter.in.rs delete mode 100644 src/command/counter.rs delete mode 100644 src/command/xkcd.in.rs delete mode 100644 src/config.in.rs diff --git a/Cargo.lock b/Cargo.lock index b4558f8..2e3596e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,187 +1,350 @@ -[root] -name = "smexybot" -version = "0.1.0" +[[package]] +name = "advapi32-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "chrono 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)", - "clippy 0.0.108 (registry+https://github.com/rust-lang/crates.io-index)", - "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "markov 0.0.32 (registry+https://github.com/rust-lang/crates.io-index)", - "psutil 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_codegen 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serenity 0.1.3 (git+https://github.com/zeyla/serenity.rs)", - "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wolfram_alpha 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "xkcd 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "aho-corasick" -version = "0.5.3" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "antidote" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "base64" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "base64" -version = "0.2.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "bitflags" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "bitflags" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bitflags" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "byteorder" -version = "0.5.3" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bytes" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cargo_metadata" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cfg-if" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "chrono" -version = "0.2.25" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "clippy" -version = "0.0.108" +version = "0.0.174" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "clippy_lints 0.0.108 (registry+https://github.com/rust-lang/crates.io-index)", + "cargo_metadata 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy_lints 0.0.174 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "clippy_lints" -version = "0.0.108" +version = "0.0.174" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "if_chain 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "pulldown-cmark 0.0.15 (registry+https://github.com/rust-lang/crates.io-index)", "quine-mc_cluskey 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "cookie" -version = "0.2.5" +name = "core-foundation" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "openssl 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "core-foundation-sys" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crypt32-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "dtoa" -version = "0.2.2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "either" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "env_logger" -version = "0.3.5" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "flate2" -version = "0.2.14" +name = "evzht9h3nznqzwl" +version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "miniz-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", + "sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "uuid 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "gcc" -version = "0.3.41" +name = "flate2" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "miniz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] -name = "gdi32-sys" +name = "foreign-types" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-zircon" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "hpack" +name = "fuchsia-zircon-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "futures" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures-cpupool" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "getopts" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "httparse" -version = "1.2.1" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "hyper" -version = "0.9.14" +version = "0.10.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-verify 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "solicit 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hyper" +version = "0.11.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-cpupool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "relay 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hyper-native-tls" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hyper-tls" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.11.7 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tls 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "idna" -version = "0.1.0" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "itoa" +name = "if_chain" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "iovec" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itertools" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "kernel32-sys" @@ -204,270 +367,328 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lazy_static" -version = "0.2.2" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "libc" -version = "0.2.18" +name = "lazycell" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "libressl-pnacl-sys" -version = "2.1.6" +name = "libc" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pnacl-build-helper 1.4.10 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "libsodium-sys" -version = "0.0.12" +version = "0.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "markov" -version = "0.0.32" +version = "0.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "matches" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memchr" -version = "0.1.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "mime" -version = "0.2.2" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mime" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "mime_guess" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "mime 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", + "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "miniz-sys" -version = "0.1.7" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "gcc 0.3.41 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "multipart" -version = "0.8.1" +name = "mio" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hyper 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mime_guess 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "net2" -version = "0.2.26" +name = "miow" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "nom" -version = "1.2.4" +name = "multipart" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mime_guess 1.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", + "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "native-tls" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "openssl 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)", + "schannel 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "net2" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "num" -version = "0.1.36" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-integer" -version = "0.1.32" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-iter" -version = "0.1.32" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-traits" -version = "0.1.36" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "num_cpus" -version = "1.2.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "openssl" -version = "0.7.14" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gcc 0.3.41 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys-extras 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "openssl-sys" -version = "0.7.17" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "libressl-pnacl-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "openssl-sys-extras" -version = "0.7.14" +name = "opus" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "gcc 0.3.41 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "opus-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "openssl-verify" -version = "0.1.0" +name = "opus-sys" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "openssl 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "opus" -version = "0.1.1" +name = "owning_ref" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "opus-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "opus-sys" -version = "0.2.1" +name = "parking_lot" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot_core" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "phf" -version = "0.7.20" +version = "0.7.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "phf_shared 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "phf_codegen" -version = "0.7.20" +version = "0.7.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "phf_generator 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "phf_generator" -version = "0.7.20" +version = "0.7.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "phf_shared 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "phf_shared" -version = "0.7.20" +version = "0.7.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "pkg-config" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "pnacl-build-helper" -version = "1.4.10" +name = "psutil" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "psutil" -version = "1.0.0" +name = "pulldown-cmark" +version = "0.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "getopts 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -477,80 +698,132 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "quote" -version = "0.3.10" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rand" -version = "0.3.15" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "redox_syscall" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "regex" -version = "0.1.80" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-syntax" -version = "0.3.9" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "regex-syntax" -version = "0.4.0" +name = "relay" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] -name = "rustc-serialize" -version = "0.3.22" +name = "safemem" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "rustc_version" -version = "0.1.7" +name = "schannel" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", + "advapi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crypt32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "secur32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "semver" -version = "0.1.20" +name = "scoped-tls" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "secur32-sys" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "security-framework" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "security-framework-sys" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "semver" -version = "0.2.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "serde" -version = "0.8.21" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_codegen" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "quote 0.3.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", "serde_codegen_internals 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex_syntax 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -558,26 +831,45 @@ name = "serde_codegen_internals" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "syn 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_derive" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde_codegen 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_derive" -version = "0.8.21" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde_codegen 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive_internals 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_derive_internals" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", + "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" -version = "0.8.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", + "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -585,165 +877,251 @@ name = "serde_xml" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serenity" -version = "0.1.3" -source = "git+https://github.com/zeyla/serenity.rs#4d5bb5c2c1082057d59d830a250ceeb985e5b83f" -dependencies = [ - "base64 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "flate2 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "multipart 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "opus 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)", - "sodiumoxide 0.0.12 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "base64 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "evzht9h3nznqzwl 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper-native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "multipart 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "opus 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "sodiumoxide 0.0.14 (registry+https://github.com/rust-lang/crates.io-index)", + "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)", - "yaml-rust 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "vec_shift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "sodiumoxide" -version = "0.0.12" +name = "sha1" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "siphasher" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slab" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slab" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "smallvec" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "smallvec" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "smexybot" +version = "0.1.0" dependencies = [ - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "libsodium-sys 0.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy 0.0.174 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.11.7 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "markov 0.0.33 (registry+https://github.com/rust-lang/crates.io-index)", + "psutil 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serenity 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "uuid 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "wolfram_alpha 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "xkcd 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "solicit" -version = "0.4.4" +name = "sodiumoxide" +version = "0.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "libsodium-sys 0.0.14 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "stable_deref_trait" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "syn" -version = "0.10.5" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "quote 0.3.10 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "syntex" -version = "0.52.0" +name = "syn" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "syntex_errors 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex_syntax 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "syntex_errors" -version = "0.52.0" +name = "synom" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex_pos 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", - "term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "syntex_pos" -version = "0.52.0" +name = "take" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "tempdir" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "syntex_syntax" -version = "0.52.0" +name = "thread_local" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex_errors 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex_pos 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", - "term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "tempdir" -version = "0.3.5" +name = "threadpool" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "term" -version = "0.4.4" +name = "time" +version = "0.1.38" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "thread-id" -version = "2.0.0" +name = "tokio-core" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", + "scoped-tls 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "thread_local" -version = "0.2.7" +name = "tokio-io" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "time" -version = "0.1.35" +name = "tokio-proto" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "toml" -version = "0.1.30" +name = "tokio-service" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "traitobject" -version = "0.0.1" +name = "tokio-tls" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "toml" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "traitobject" -version = "0.0.3" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -756,90 +1134,111 @@ name = "typemap" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "unsafe-any 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicase" -version = "1.4.0" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicase" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicode-bidi" -version = "0.2.4" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicode-normalization" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "unicode-xid" -version = "0.0.3" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unreachable" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "unsafe-any" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "traitobject 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "url" -version = "1.2.4" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "user32-sys" +name = "url_serde" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "utf8-ranges" -version = "0.1.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "uuid" -version = "0.3.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "websocket" -version = "0.17.1" +name = "vcpkg" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "vec_shift" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "version_check" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "void" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "winapi" @@ -853,17 +1252,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "wolfram_alpha" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "clippy 0.0.108 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_codegen 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy 0.0.174 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.11.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", "serde_xml 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -877,127 +1277,168 @@ dependencies = [ [[package]] name = "xkcd" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "clippy 0.0.108 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_codegen 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.11.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "url_serde 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "yaml-rust" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - [metadata] -"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" -"checksum base64 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2015e3793554aa5b6007e3a72959e84c1070039e74f13dde08fa64afe1ddd892" +"checksum advapi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e06588080cb19d0acb6739808aafa5f26bfb2ca015b2b6370028b44cf7cb8a9a" +"checksum aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699" +"checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" +"checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" +"checksum base64 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5032d51da2741729bfdaeb2664d9b8c6d9fd1e2b90715c660b6def36628499c2" "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" -"checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" -"checksum cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de1e760d7b6535af4241fca8bd8adf68e2e7edacc6b29f5d399050c5e48cf88c" -"checksum chrono 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)" = "9213f7cd7c27e95c2b57c49f0e69b1ea65b27138da84a170133fd21b07659c00" -"checksum clippy 0.0.108 (registry+https://github.com/rust-lang/crates.io-index)" = "55c6ddeba4788dd1457a30da01b208280708b2fc3108d1d1bd61acfc28549752" -"checksum clippy_lints 0.0.108 (registry+https://github.com/rust-lang/crates.io-index)" = "2055cb44752429bf6cdcde335fd7348f815f5e48738b058724207128c287ad24" -"checksum cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0e3d6405328b6edb412158b3b7710e2634e23f3614b9bb1c412df7952489a626" -"checksum dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0dd841b58510c9618291ffa448da2e4e0f699d984d436122372f446dae62263d" -"checksum env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f" -"checksum flate2 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "3eeb481e957304178d2e782f2da1257f1434dfecbae883bafb61ada2a9fea3bb" -"checksum gcc 0.3.41 (registry+https://github.com/rust-lang/crates.io-index)" = "3689e1982a563af74960ae3a4758aa632bb8fd984cfc3cc3b60ee6109477ab6e" -"checksum gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518" -"checksum hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d2da7d3a34cf6406d9d700111b8eafafe9a251de41ae71d8052748259343b58" -"checksum httparse 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a6e7a63e511f9edffbab707141fbb8707d1a3098615fb2adbd5769cdfcc9b17d" -"checksum hyper 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)" = "bcb3fc65554155980167fb821d05c7c66177f92464976c0b676a19d9e03387a7" -"checksum idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1053236e00ce4f668aeca4a769a09b3bf5a682d802abd6f3cb39374f6b162c11" -"checksum itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae3088ea4baeceb0284ee9eea42f591226e6beaecf65373e41b38d95a1b8e7a1" +"checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" +"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf" +"checksum byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff81738b726f5d099632ceaffe7fb65b90212e8dce59d518729e7e8634032d3d" +"checksum bytes 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d828f97b58cc5de3e40c421d0cf2132d6b2da4ee0e11b8632fa838f0f9333ad6" +"checksum cargo_metadata 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "be1057b8462184f634c3a208ee35b0f935cfd94b694b26deadccd98732088d7b" +"checksum cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a9b13a57efd6b30ecd6598ebdb302cca617930b5470647570468a65d12ef9719" +"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" +"checksum chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c20ebe0b2b08b0aeddba49c609fe7957ba2e33449882cb186a180bc60682fa9" +"checksum clippy 0.0.174 (registry+https://github.com/rust-lang/crates.io-index)" = "1b03ded6eba74b16dbeb598be58e874bc72f6cf12f7ccc577b328091e1d4392a" +"checksum clippy_lints 0.0.174 (registry+https://github.com/rust-lang/crates.io-index)" = "9b8e508648d6d41040e0061f45fc5562b3af5c8a7d67853f15841fb531c8e984" +"checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" +"checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" +"checksum crypt32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e34988f7e069e0b2f3bfc064295161e489b2d4e04a2e4248fb94360cdf00b4ec" +"checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" +"checksum either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "740178ddf48b1a9e878e6d6509a1442a2d42fd2928aae8e7a6f8a36fb01981b3" +"checksum env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b" +"checksum evzht9h3nznqzwl 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "74a8c39674021da88007af7b82f9ff8be7da254706dd279ad10e374906b4b934" +"checksum flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)" = "e6234dd4468ae5d1e2dbb06fe2b058696fdc50a339c68a393aefbf00bc81e423" +"checksum foreign-types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3e4056b9bd47f8ac5ba12be771f77a0dae796d1bbaaf5fd0b9c2d38b69b8a29d" +"checksum fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f6c0581a4e363262e52b87f59ee2afe3415361c6ec35e665924eb08afe8ff159" +"checksum fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "43f3795b4bae048dc6123a6b972cadde2e676f9ded08aef6bb77f5f157684a82" +"checksum futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "118b49cac82e04121117cbd3121ede3147e885627d82c4546b87c702debb90c1" +"checksum futures-cpupool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "e86f49cc0d92fe1b97a5980ec32d56208272cbb00f15044ea9e2799dde766fdf" +"checksum getopts 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)" = "65922871abd2f101a2eb0eaebadc66668e54a87ad9c3dd82520b5f86ede5eff9" +"checksum httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "af2f2dd97457e8fb1ae7c5a420db346af389926e36f43768b96f101546b04a07" +"checksum hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)" = "368cb56b2740ebf4230520e2b90ebb0461e69034d85d1945febd9b3971426db2" +"checksum hyper 0.11.7 (registry+https://github.com/rust-lang/crates.io-index)" = "4959ca95f55df4265bff2ad63066147255e6fa733682cf6d1cb5eaff6e53324b" +"checksum hyper-native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "72332e4a35d3059583623b50e98e491b78f8b96c5521fcb3f428167955aa56e8" +"checksum hyper-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c81fa95203e2a6087242c38691a0210f23e9f3f8f944350bd676522132e2985" +"checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d" +"checksum if_chain 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "61bb90bdd39e3af69b0172dfc6130f6cd6332bf040fbb9bdd4401d37adbd48b8" +"checksum iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b6e8b9c2247fcf6c6a1151f1156932be5606c9fd6f55a2d7f9fc1cb29386b2f7" +"checksum itertools 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d3f2be4da1690a039e9ae5fd575f706a63ad5a2120f161b1d653c9da3930dd21" +"checksum itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "cf186d1a8aa5f5bee5fd662bc9c1b949e0259e1bcc379d1f006847b0080c7417" -"checksum lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6abe0ee2e758cd6bc8a2cd56726359007748fbf4128da998b65d0b70f881e19b" -"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" -"checksum libressl-pnacl-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "cbc058951ab6a3ef35ca16462d7642c4867e6403520811f28537a4e2f2db3e71" -"checksum libsodium-sys 0.0.12 (registry+https://github.com/rust-lang/crates.io-index)" = "44e9986c330611ccd26ea74e502c70e5ebab2874c4c23f2f5f3c5a6ed3fbfbc6" -"checksum log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ab83497bf8bf4ed2a74259c1c802351fcd67a65baa86394b6ba73c36f4838054" -"checksum markov 0.0.32 (registry+https://github.com/rust-lang/crates.io-index)" = "43d05d395f72ede7326891ecbbe21061b0998df787c8332add2c063d7ad676d1" -"checksum matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "efd7622e3022e1a6eaa602c4cea8912254e5582c9c692e9167714182244801b1" -"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" -"checksum mime 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b5c93a4bd787ddc6e7833c519b73a50883deb5863d76d9b71eb8216fb7f94e66" -"checksum mime_guess 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76da6df85047af8c0edfa53f48eb1073012ce1cc95c8fedc0a374f659a89dd65" -"checksum miniz-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d1f4d337a01c32e1f2122510fed46393d53ca35a7f429cb0450abaedfa3ed54" -"checksum multipart 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b16d6498fe5b0c2f6d973fd9753da099948834f96584d628e44a75f0d2955b03" -"checksum net2 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)" = "5edf9cb6be97212423aed9413dd4729d62b370b5e1c571750e882cebbbc1e3e2" -"checksum nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce" -"checksum num 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "bde7c03b09e7c6a301ee81f6ddf66d7a28ec305699e3d3b056d2fc56470e3120" -"checksum num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "fb24d9bfb3f222010df27995441ded1e954f8f69cd35021f6bef02ca9552fb92" -"checksum num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "287a1c9969a847055e1122ec0ea7a5c5d6f72aad97934e131c83d5c08ab4e45c" -"checksum num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "a16a42856a256b39c6d3484f097f6713e14feacd9bfb02290917904fae46c81c" -"checksum num_cpus 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "55aabf4e2d6271a2e4e4c0f2ea1f5b07cc589cc1a9e9213013b54a76678ca4f3" -"checksum openssl 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)" = "c4117b6244aac42ed0150a6019b4d953d28247c5dd6ae6f46ae469b5f2318733" -"checksum openssl-sys 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)" = "89c47ee94c352eea9ddaf8e364be7f978a3bb6d66d73176572484238dd5a5c3f" -"checksum openssl-sys-extras 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)" = "11c5e1dba7d3d03d80f045bf0d60111dc69213b67651e7c889527a3badabb9fa" -"checksum openssl-verify 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ed86cce894f6b0ed4572e21eb34026f1dc8869cb9ee3869029131bc8c3feb2d" -"checksum opus 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c6dea222842481be2d9340928e4d7bbd6274ee4f9f5ef4c080de780a3b0c1c72" +"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" +"checksum lazycell 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3b585b7a6811fb03aa10e74b278a0f00f8dd9b45dc681f148bb29fa5cb61859b" +"checksum libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "5ba3df4dcb460b9dfbd070d41c94c19209620c191b0340b929ce748a2bcd42d2" +"checksum libsodium-sys 0.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "cbbc6e46017815abf8698de0ed4847fad45fd8cad2909ac38ac6de79673c1ad1" +"checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b" +"checksum markov 0.0.33 (registry+https://github.com/rust-lang/crates.io-index)" = "4a4e770475987379cbdcddf986612fa2837f9a47ee2142a6229ba21b3564f704" +"checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" +"checksum memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a" +"checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" +"checksum mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e2e00e17be181010a91dbfefb01660b17311059dc8c7f48b9017677721e732bd" +"checksum mime_guess 1.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bbee1a836f344ac39d4a59bfe7be2bd3150353ff71678afb740216f8270b333e" +"checksum miniz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "609ce024854aeb19a0ef7567d348aaa5a746b32fb72e336df7fcc16869d7e2b4" +"checksum mio 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0e8411968194c7b139e9105bc4ae7db0bae232af087147e72f0616ebf5fdb9cb" +"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +"checksum multipart 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f534489e7212a0e8fcc28c783e4686b79231c638a431c3fa46fc6cd8c3f04d20" +"checksum native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04b781c9134a954c84f0594b9ab3f5606abc516030388e8511887ef4c204a1e5" +"checksum net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)" = "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09" +"checksum num 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "a311b77ebdc5dd4cf6449d81e4135d9f0e3b153839ac90e648a8ef538f923525" +"checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba" +"checksum num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01" +"checksum num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "99843c856d68d8b4313b03a17e33c4bb42ae8f6610ea81b28abe076ac721b9b0" +"checksum num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d" +"checksum openssl 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)" = "2225c305d8f57001a0d34263e046794aa251695f20773102fbbfeb1e7b189955" +"checksum openssl-sys 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)" = "92867746af30eea7a89feade385f7f5366776f1c52ec6f0de81360373fa88363" +"checksum opus 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c1ea29ab439d0852a1d991c9fa8fa8e3f31aa82f938c42ed442831d08ead0db" "checksum opus-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fad8b294f482f7972fa466b1c64d5a564e4ee6975599d80483ee4fa83f25b6ec" -"checksum phf 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "0c6afb2057bb5f846a7b75703f90bc1cef4970c35209f712925db7768e999202" -"checksum phf_codegen 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "6b63f121bf9a128f2172a65d8313a8e0e79d63874eeb4b4b7d82e6dda6b62f7c" -"checksum phf_generator 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "50ffbd7970f75afa083c5dd7b6830c97b72b81579c7a92d8134ef2ee6c0c7eb0" -"checksum phf_shared 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "286385a0e50d4147bce15b2c19f0cf84c395b0e061aaf840898a7bf664c2cfb7" -"checksum pkg-config 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8cee804ecc7eaf201a4a207241472cc870e825206f6c031e3ee2a72fa425f2fa" -"checksum pnacl-build-helper 1.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "61c9231d31aea845007443d62fcbb58bb6949ab9c18081ee1e09920e0cf1118b" -"checksum psutil 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b03f668e4a841cb9a6375362f9c6590460807ca3bdf00c62a71723173d92c84" +"checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" +"checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" +"checksum parking_lot_core 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "4f610cb9664da38e417ea3225f23051f589851999535290e077939838ab7a595" +"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +"checksum phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "cb325642290f28ee14d8c6201159949a872f220c62af6e110a56ea914fbe42fc" +"checksum phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d62594c0bb54c464f633175d502038177e90309daf2e0158be42ed5f023ce88f" +"checksum phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6b07ffcc532ccc85e3afc45865469bf5d9e4ef5bfcf9622e3cfe80c2d275ec03" +"checksum phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "07e24b0ca9643bdecd0632f2b3da6b1b89bbb0030e0b992afc1113b23a7bc2f2" +"checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903" +"checksum psutil 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e62bac983d223312c3ecc74110503bd0abfbce8075a2f55bd8f8a8b60210fa0b" +"checksum pulldown-cmark 0.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "378e941dbd392c101f2cb88097fa4d7167bc421d4b88de3ff7dbee503bc3233b" "checksum quine-mc_cluskey 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "07589615d719a60c8dd8a4622e7946465dfef20d1a428f969e3443e7386d5f45" -"checksum quote 0.3.10 (registry+https://github.com/rust-lang/crates.io-index)" = "6732e32663c9c271bfc7c1823486b471f18c47a2dbf87c066897b7b51afc83be" -"checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d" -"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" -"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" -"checksum regex-syntax 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9191b1f57603095f105d317e375d19b1c9c5c3185ea9633a99a6dcbed04457" -"checksum rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "237546c689f20bb44980270c73c3b9edd0891c1be49cc1274406134a66d3957b" -"checksum rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c5f5376ea5e30ce23c03eb77cbe4962b988deead10910c372b226388b594c084" -"checksum semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac" -"checksum semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2d5b7638a1f03815d94e88cb3b3c08e87f0db4d683ef499d1836aaf70a45623f" -"checksum serde 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)" = "7b7c6bf11cf766473ea1d53eb4e3bc4e80f31f50082fc24077cf06f600279a66" -"checksum serde_codegen 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)" = "64e0d87d19ec28bf431ffa9bad1f1e4ea3b381cd616c6cc56dca9eedbc7f6ab8" +"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" +"checksum rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6475140dfd8655aeb72e1fd4b7a1cc1c202be65d71669476e392fe62532b9edd" +"checksum redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "8dde11f18c108289bef24469638a04dce49da56084f2d50618b226e47eb04509" +"checksum regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b" +"checksum regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db" +"checksum relay 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f301bafeb60867c85170031bdb2fcf24c8041f33aee09e7b116a58d4e9f781c5" +"checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" +"checksum schannel 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7554288337c1110e34d7a2433518d889374c1de1a45f856b7bcddb03702131fc" +"checksum scoped-tls 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f417c22df063e9450888a7561788e9bd46d3bb3c1466435b4eccb903807f147d" +"checksum secur32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3f412dfa83308d893101dd59c10d6fda8283465976c28c287c5c855bf8d216bc" +"checksum security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "dfa44ee9c54ce5eecc9de7d5acbad112ee58755239381f687e564004ba4a2332" +"checksum security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "5421621e836278a0b139268f36eee0dc7e389b784dc3f79d8f11aabadf41bead" +"checksum semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +"checksum serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" +"checksum serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6eda663e865517ee783b0891a3f6eb3a253e0b0dabb46418969ee9635beadd9e" +"checksum serde_codegen 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "a4c5d8a33087d8984f9535daa62a6498a08f6476050b00ab9339dd847e4c25cc" "checksum serde_codegen_internals 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "afad7924a009f859f380e4a2e3a509a845c2ac66435fcead74a4d983b21ae806" -"checksum serde_derive 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6e7ad1e74679b92730ca39c361ea125e2846df337c5d94d084eb2f7837c1843d" -"checksum serde_json 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3f7d3c184d35801fb8b32b46a7d58d57dbcc150b0eb2b46a1eb79645e8ecfd5b" +"checksum serde_derive 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "ce44e5f4264b39e9d29c875357b7cc3ebdfb967bb9e22bfb5e44ffa400af5306" +"checksum serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)" = "652bc323d694dc925829725ec6c890156d8e70ae5202919869cb00fe2eff3788" +"checksum serde_derive_internals 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "32f1926285523b2db55df263d2aa4eb69ddcfa7a7eade6430323637866b513ab" +"checksum serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e4586746d1974a030c48919731ecffd0ed28d0c40749d0d18d43b3a7d6c9b20e" "checksum serde_xml 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2740253750814daddf54c5b5311886c034bc0efaccd9ae617a7cf46bd5323506" -"checksum serenity 0.1.3 (git+https://github.com/zeyla/serenity.rs)" = "" -"checksum sodiumoxide 0.0.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8d9da099120def269669aa349e0c3e97de4ab2c5cb9a54a765041651dd0055eb" -"checksum solicit 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "172382bac9424588d7840732b250faeeef88942e37b6e35317dce98cafdd75b2" -"checksum syn 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1a437f8b4353179418870f014113876cd4cd4f642e42dbc5ed4f328d5f808246" -"checksum syntex 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3b1b66e8c1e25a6c4007a38a225411b776a06e8c3030d6fc4d200a038bf02065" -"checksum syntex_errors 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9e52bffe6202cfb67587784cf23e0ec5bf26d331eef4922a16d5c42e12aa1e9b" -"checksum syntex_pos 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)" = "955ef4b16af4c468e4680d1497f873ff288f557d338180649e18f915af5e15ac" -"checksum syntex_syntax 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)" = "76a302e717e348aa372ff577791c3832395650073b8d8432f8b3cb170b34afde" +"checksum serenity 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1075b368ec96441d3e19b1ed868b819f3d3257daac26ac98739d566fd5f781b0" +"checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" +"checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537" +"checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" +"checksum slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdeff4cd9ecff59ec7e3744cbca73dfe5ac35c2aedb2cfba8a1c715a18912e9d" +"checksum smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4c8cbcd6df1e117c2210e13ab5109635ad68a929fcbb8964dc965b76cb5ee013" +"checksum smallvec 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ee4f357e8cd37bf8822e1b964e96fd39e2cb5a0424f8aaa284ccaccc2162411c" +"checksum sodiumoxide 0.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "bc02c0bc77ffed8e8eaef004399b825cf4fd8aa02d0af6e473225affd583ff4d" +"checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b" +"checksum syn 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)" = "58fd09df59565db3399efbba34ba8a2fec1307511ebd245d0061ff9d42691673" +"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" +"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" +"checksum take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b157868d8ac1f56b64604539990685fa7611d8fa9e5476cf0c02cf34d32917c5" "checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6" -"checksum term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3deff8a2b3b6607d6d7cc32ac25c0b33709453ca9cceac006caac51e963cf94a" -"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" -"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" -"checksum time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "3c7ec6d62a20df54e07ab3b78b9a3932972f4b7981de295563686849eb3989af" -"checksum toml 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)" = "0590d72182e50e879c4da3b11c6488dae18fccb1ae0c7a3eda18e16795844796" -"checksum traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "07eaeb7689bb7fca7ce15628319635758eda769fed481ecfe6686ddef2600616" -"checksum traitobject 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9dc23794ff47c95882da6f9d15de9a6be14987760a28cc0aafb40b7675ef09d8" +"checksum thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1697c4b57aeeb7a536b647165a2825faddffb1d3bad386d507709bd51a90bb14" +"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865" +"checksum time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d788d3aa77bc0ef3e9621256885555368b47bd495c13dd2e7413c89f845520" +"checksum tokio-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "c843a027f7c1df5f81e7734a0df3f67bf329411781ebf36393ce67beef6071e3" +"checksum tokio-io 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "514aae203178929dbf03318ad7c683126672d4d96eccb77b29603d33c9e25743" +"checksum tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fbb47ae81353c63c487030659494b295f6cb6576242f907f203473b191b0389" +"checksum tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" +"checksum tokio-tls 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d88e411cac1c87e405e4090be004493c5d8072a370661033b1a64ea205ec2e13" +"checksum toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a7540f4ffc193e0d3c94121edb19b055670d369f77d5804db11ae053a45b6e7e" +"checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" "checksum typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6" -"checksum unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "13a5906ca2b98c799f4b1ab4557b76367ebd6ae5ef14930ec841c74aed5f3764" -"checksum unicode-bidi 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b61814f3e7fd0e0f15370f767c7c943e08bc2e3214233ae8f88522b334ceb778" -"checksum unicode-normalization 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5e94e9f6961090fcc75180629c4ef33e5310d6ed2c0dd173f4ca63c9043b669e" -"checksum unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "36dff09cafb4ec7c8cf0023eb0b686cb6ce65499116a12201c9e11840ca01beb" -"checksum unsafe-any 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b351086021ebc264aea3ab4f94d61d889d98e5e9ec2d985d993f50133537fd3a" -"checksum url 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f024e241a55f5c88401595adc1d4af0c9649e91da82d0e190fe55950231ae575" -"checksum user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ef4711d107b21b410a3a974b1204d9accc8b10dad75d8324b5d755de1617d47" -"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" -"checksum uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1a9ff57156caf7e22f37baf3c9d8f6ce8194842c23419dafcb0716024514d162" -"checksum websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a1a6ea5ed0367f32eb3d94dcc58859ef4294b5f75ba983dbf56ac314af45d" +"checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" +"checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" +"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +"checksum unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f" +"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" +"checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +"checksum unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f" +"checksum url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa35e768d4daf1d85733418a49fb42e10d7f633e394fccab4ab7aba897053fe2" +"checksum url_serde 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "74e7d099f1ee52f823d4bdd60c93c3602043c728f5db3b97bdb548467f7bddea" +"checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" +"checksum uuid 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcc7e3b898aa6f6c08e5295b6c89258d1331e9ac578cc992fb818759951bdc22" +"checksum vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b" +"checksum vec_shift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dc05c2b00a487511056141401ac10b15c0fb7422154dda53d1c610c228c3e08e" +"checksum version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6b772017e347561807c1aa192438c5fd74242a670a6cffacc40f2defd1dc069d" +"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum wolfram_alpha 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1627a5d00bfff3f102146ff132fad0c982bbdadb62d63eb91c68f72766d190a2" +"checksum wolfram_alpha 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88ce888605ec1d23aa38669493b8d8f1536af16d78da1b17a6c49a37b89e56b3" "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -"checksum xkcd 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1ee28bf9376ad4fed489acbf31007440f6410ca21ede35166dd7c6dce784afe2" -"checksum yaml-rust 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e66366e18dc58b46801afbf2ca7661a9f59cc8c5962c29892b6039b4f86fa992" +"checksum xkcd 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eda5e2a1db24b498cfa8b08a9052814ccdff9fd40337fed11d914f5baf2b891c" diff --git a/Cargo.toml b/Cargo.toml index e01d859..9db30db 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,75 +2,56 @@ name = "smexybot" version = "0.1.0" authors = ["Nikita Pekin "] -build = "build.rs" - -[build-dependencies.serde_codegen] -optional = true -version = "0.8.21" [dependencies] -chrono = { features = ["serde"], version = "0.2.25" } +chrono = { features = ["serde"], version = "0.4.0" } clippy = { optional = true, version = "0.0" } -env_logger = "0.3.5" -hyper = "0.9.14" -lazy_static = "0.2.2" -log = "0.3.6" -markov = { optional = true, version = "0.0.32" } -psutil = { optional = true, version = "1.0.0" } -rand = "0.3.15" -regex = "0.1.80" -serde = "0.8.21" -serde_derive = { optional = true, version = "0.8.21" } -serde_json = "0.8.4" -time = { optional = true, version = "0.1.35" } +env_logger = "0.4.3" +futures = "0.1.17" +hyper = "0.11.7" +hyper-tls = "0.1.2" +lazy_static = "0.2.11" +log = "0.3.8" +markov = { optional = true, version = "0.0.33" } +psutil = "1.1.0" +rand = "0.3.18" +regex = "0.2.2" +serde = "1.0.21" +serde_derive = "1.0.21" +serde_json = "1.0.6" +time = "0.1.38" +tokio-core = "0.1.10" typemap = "0.3.3" -url = "1.2.4" -uuid = { features = ["v4"], optional = true, version = "0.3.1" } +url = "1.6.0" +uuid = { version = "0.5.1", features = ["v4"] } +xkcd = "0.3.0" [dependencies.serenity] -features = ["cache", "framework", "methods", "voice"] -git = "https://github.com/zeyla/serenity.rs" +features = ["cache", "framework", "voice"] +version = "0.4.3" [dependencies.wolfram_alpha] default-features = false -features = ["hyper"] -optional = true -version = "0.3.0" - -[dependencies.xkcd] -default-features = false -features = ["hyper"] optional = true -version = "0.2.1" +version = "0.4.0" [features] all = [ - "counter", - "fuyu", - "help", - "ping", - "roll", - "stats", - "tag", - "wolfram", - "xkcd", +# "fuyu", +# "tag", +# "wolfram", ] -counter = ["store"] -default = ["with-syntex"] fuyu = ["markov"] fuyu-include = ["fuyu"] -help = [] -nightly = ["serde_derive", "wolfram_alpha/nightly", "xkcd/nightly"] +nightly = [] +#nightly = ["serde_derive", "wolfram_alpha/nightly"] nightly-testing = [ "clippy", "nightly", "wolfram_alpha/nightly-testing", - "xkcd/nightly-testing", ] -ping = ["time"] -roll = [] -stats = ["psutil"] -store = ["uuid"] +profile = [] +store = [] tag = ["store"] wolfram = ["wolfram_alpha"] -with-syntex = ["serde_codegen", "wolfram_alpha/with-syntex", "xkcd/with-syntex"] +#with-syntex = ["serde_codegen", "wolfram_alpha/with-syntex"] diff --git a/build.rs b/build.rs deleted file mode 100644 index 54dd1f4..0000000 --- a/build.rs +++ /dev/null @@ -1,31 +0,0 @@ -#[cfg(feature = "with-syntex")] -mod inner { - extern crate serde_codegen; - - use std::env; - use std::path::Path; - - pub fn main() { - let out_dir = env::var_os("OUT_DIR").unwrap(); - - for &(src, dst) in &[ - ("src/config.in.rs", "config.rs"), - ("src/command/tag.in.rs", "tag.rs"), - ("src/command/xkcd.in.rs", "xkcd.rs"), - ] { - let src = Path::new(src); - let dst = Path::new(&out_dir).join(dst); - - serde_codegen::expand(&src, &dst).unwrap(); - } - } -} - -#[cfg(feature = "nightly")] -mod inner { - pub fn main() {} -} - -fn main() { - inner::main(); -} diff --git a/src/command/counter.in.rs b/src/command/counter.in.rs deleted file mode 100644 index 3f1c1f9..0000000 --- a/src/command/counter.in.rs +++ /dev/null @@ -1,13 +0,0 @@ -#[derive(Clone, Debug, Deserialize, Serialize)] -struct Counter { - name: String, - count: i64, - owner_id: u64, - // Whether or not the counter is publically-editable. - public_edit: bool, - queries: u32, - location: Option, - created_at: DateTime, - blacklisted_users: HashSet, - whitelisted_users: HashSet, -} diff --git a/src/command/counter.rs b/src/command/counter.rs deleted file mode 100644 index cb49786..0000000 --- a/src/command/counter.rs +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright (c) 2016-2017 Nikita Pekin and the smexybot contributors -// See the README.md file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -//! Provides functionality for the `counter` command. - -use chrono::{DateTime, UTC}; -use serenity::client::rest; -use serenity::model::{GuildId, Message, UserId}; -use serenity::utils::builder::CreateEmbed; -use std::collections::{HashMap, HashSet}; -use std::marker::PhantomData; -use std::sync::Mutex; -use store::{JsonFileStore, Store}; -use util::{check_msg, lock_mutex, merge, timestamp_to_string}; - -type Key = String; -type Value = HashMap; -type CounterStore = JsonFileStore; - -lazy_static! { - static ref COUNTERS: Mutex> = Mutex::new(Counters { - store: JsonFileStore::new("counters.json".to_owned()), - _data: PhantomData, - }); -} - -#[cfg(feature = "nightly")] -include!("counter.in.rs"); - -#[cfg(feature = "with-syntex")] -include!(concat!(env!("OUT_DIR"), "/counter.rs")); - -impl Counter { - fn new(name: String, owner_id: u64) -> Self { - Counter { - name: name, - count: 0, - owner_id: owner_id, - public_edit: true, - queries: 0, - location: None, - created_at: UTC::now(), - blacklisted_users: HashSet::new(), - whitelisted_users: HashSet::new(), - } - } - - fn as_embed(&self, embed: CreateEmbed) -> CreateEmbed { - embed.title(&self.name) - .field(|f| f.name("Owner").value(&format!("<@!{}>", self.owner_id))) - .field(|f| f.name("Queries").value(&self.queries.to_string())) - .author(|a| { - let owner_id = UserId(self.owner_id); - let (name, avatar_url) = match owner_id.find() { - Some(user) => (user.name.clone(), user.avatar_url()), - None => { - match rest::get_user(owner_id.0) { - Ok(user) => (user.name.clone(), user.avatar_url()), - Err(_) => return a, - } - }, - }; - let mut a = a.name(&name); - if let Some(avatar_url) = avatar_url { - a = a.icon_url(&avatar_url); - } - a - }) - .timestamp(timestamp_to_string(&self.created_at)) - .footer(|f| { - f.text(if self.is_generic() { - "Generic" - } else { - "Server-specific" - }) - }) - } - - fn is_generic(&self) -> bool { - self.location.is_none() - } - - fn increment(&mut self) { - self.count += 1 - } - - fn decrement(&mut self) { - self.count -= 1 - } -} - -#[derive(Debug)] -struct Counters - where S: Store, -{ - store: S, - _data: PhantomData<(K, V)>, -} - -impl Counters { - fn get_possible_counters(&self, guild: Option) -> HashMap { - let generic = self.store - .get(&"generic".to_owned()) - .cloned() - .unwrap_or_else(HashMap::new); - - match guild { - None => generic, - Some(guild) => { - merge(generic, - self.store - .get(&guild.to_string()) - .cloned() - .unwrap_or_else(HashMap::new)) - }, - } - } - - fn create_counter(&mut self, guild: Option, name: String, counter: Counter) - -> Result<(), String> { - let location = get_database_location(guild); - let mut database = self.store - .get(&location) - .cloned() - .unwrap_or_else(HashMap::new); - if database.contains_key(&name) { - return Err("Counter already exists.".to_owned()); - } - - database.insert(name, counter); - self.store.insert(location, database); - - Ok(()) - } - - fn get_counter(&self, guild: Option, name: String) -> Result { - self.get_possible_counters(guild) - .get(&name) - .cloned() - .ok_or_else(|| "Counter not found".to_owned()) - } - - fn put_counter(&mut self, guild: Option, name: String, counter: Counter) { - let location = get_database_location(guild); - let mut database = self.store - .remove(&location) - .unwrap_or_else(HashMap::new); - database.insert(name, counter); - self.store.insert(location, database); - } - - fn delete_counter(&mut self, guild: Option, name: String) { - let location = get_database_location(guild); - let mut database = self.store - .remove(&location) - .unwrap_or_else(HashMap::new); - database.remove(&name); - self.store.insert(location, database); - } -} - -command!(counter(context, message, args, first: String) { - let f = match first.as_ref() { - "create" => create, - "info" => info, - "list" => list, - "increment" => increment, - "decrement" => decrement, - "delete" => delete, - name => { - return { - let guild_id = message.guild_id(); - - let lookup = name.to_lowercase(); - let mut counters = lock_mutex(&*COUNTERS)?; - match counters.get_counter(guild_id, lookup.clone()) { - Ok(counter) => { - let mut counter = counter.clone(); - counter.queries += 1; - counters.put_counter(guild_id, lookup, counter.clone()); - check_msg(context.say(&counter.count.to_string())); - - Ok(()) - }, - Err(err) => Err(err), - } - }; - }, - }; - - // This is necessary because the `command!` macro returns `Ok(())`. Without - // this match and fall-through, rustc would complain about unreachable code. - match f(context, message, args.clone()) { - Ok(()) => {}, - v => return v, - } -}); - -command!(create(context, message, args, name: String) { - let name = name.trim().to_lowercase().to_owned(); - verify_counter_name(&name)?; - - let location = get_database_location(message.guild_id()); - let counter = { - let mut counter = Counter::new(name.clone(), message.author.id.0); - counter.location = Some(location.clone()); - counter - }; - lock_mutex(&*COUNTERS)?.create_counter(message.guild_id(), name.clone(), counter)?; - - check_msg(context.say(&format!("Counter \"{}\" successfully created.", name))); -}); - -command!(info(context, message, args) { - let mut args = args.into_iter(); - - let name = match args.next() { - Some(name) => name, - None => return Err("Please specify a name for the counter to get info on.".to_owned()), - }; - - let name = name.trim().to_lowercase().to_owned(); - let guild_id = message.guild_id(); - let counter = lock_mutex(&*COUNTERS)?.get_counter(guild_id, name)?; - - check_msg(context.send_message(message.channel_id, |m| m.embed(|e| counter.as_embed(e)))); -}); - -command!(list(context, message, _args) { - let guild_id = message.guild_id(); - let mut counters = { - let mut counters = lock_mutex(&*COUNTERS)?.get_possible_counters(guild_id); - let mut counters = counters.drain() - .map(|(k, _)| k) - .collect::>(); - counters.sort(); - counters - }; - - let response = if counters.is_empty() { - "No counters available.".to_owned() - } else { - format!("Available counters: {}", counters.join(", ")) - }; - check_msg(context.say(&response)); -}); - -command!(increment(context, message, args, name: String) { - let name = name.trim().to_lowercase().to_owned(); - - let guild_id = message.guild_id(); - let mut counters = lock_mutex(&*COUNTERS)?; - let mut counter = match counters.get_counter(guild_id, name.clone()) { - Ok(counter) => counter, - Err(err) => return Err(err), - }; - - if !edit_check(message, &counter) { - return Err("You do not have permission to do that.".to_owned()); - } - - if args.iter().next().is_some() { - return Err("Unnecessary extra arguments provided".to_owned()); - } - - counter.increment(); - counters.put_counter(guild_id, name.clone(), counter); - - check_msg(context.say(&format!("Counter \"{}\" successfully updated.", name))); -}); - -command!(decrement(context, message, args, name: String) { - let name = name.trim().to_lowercase().to_owned(); - - let guild_id = message.guild_id(); - let mut counters = lock_mutex(&*COUNTERS)?; - let mut counter = match counters.get_counter(guild_id, name.clone()) { - Ok(counter) => counter, - Err(err) => return Err(err), - }; - - if !edit_check(message, &counter) { - return Err("You do not have permission to do that.".to_owned()); - } - - if args.iter().next().is_some() { - return Err("Unnecessary extra arguments provided".to_owned()); - } - - counter.decrement(); - counters.put_counter(guild_id, name.clone(), counter); - - check_msg(context.say(&format!("Counter \"{}\" successfully updated.", name))); -}); - -command!(delete(context, message, args, name: String) { - let name = name.trim().to_lowercase().to_owned(); - - let guild_id = message.guild_id(); - let mut counters = lock_mutex(&*COUNTERS)?; - let counter = match counters.get_counter(guild_id, name.clone()) { - Ok(counter) => counter, - Err(err) => return Err(err), - }; - - if !owner_check(message, &counter) { - return Err("You do not have permission to do that.".to_owned()); - } - - counters.delete_counter(guild_id, name.clone()); - - check_msg(context.say(&format!("Counter \"{}\" successfully deleted.", name))); -}); - -// Denies certain counter names from being used as keys. -fn verify_counter_name(name: &str) -> Result<(), String> { - if name.contains("@everyone") || name.contains("@here") { - return Err("Counter contains blocked words".to_owned()); - } - - if name.len() > 100 { - return Err("Counter name limit is 100 characters".to_owned()); - } - - Ok(()) -} - -fn owner_check(message: &Message, counter: &Counter) -> bool { - message.author.id == counter.owner_id -} - -fn edit_check(message: &Message, counter: &Counter) -> bool { - let author = message.author.id.0; - - // If the counter is not publically editable, and the message author is not - // the owner, then they are not allowed to edit it. - if !counter.public_edit { - return owner_check(message, counter); - } - - if !counter.whitelisted_users.is_empty() && !counter.whitelisted_users.contains(&author) { - // If the whitelist is enabled and the user is not in the whitelist, - // they are not allowed to edit the counter. - return false; - } - - if counter.blacklisted_users.contains(&author) { - // If the blacklist is enabled and the user is in the blacklist, - // there are not allowed to edit the counter. - return false; - } - - true -} - -fn get_database_location(guild: Option) -> String { - guild.map(|g| g.to_string()) - .unwrap_or_else(|| "generic".to_owned()) -} diff --git a/src/command/mod.rs b/src/command/mod.rs index 9d2d702..3904aaf 100644 --- a/src/command/mod.rs +++ b/src/command/mod.rs @@ -7,20 +7,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#[cfg(feature = "counter")] -pub mod counter; -#[cfg(feature = "wolfram")] -#[cfg(feature = "fuyu")] -pub mod fuyu; -#[cfg(feature = "ping")] +//pub mod fuyu; pub mod ping; -#[cfg(feature = "roll")] pub mod roll; -#[cfg(feature = "stats")] pub mod stats; -#[cfg(feature = "tag")] -pub mod tag; -#[cfg(feature = "wolfram")] -pub mod wolfram_alpha; -#[cfg(feature = "xkcd")] +//pub mod tag; +//pub mod wolfram_alpha; pub mod xkcd; diff --git a/src/command/ping.rs b/src/command/ping.rs index ae65a70..1be46e9 100644 --- a/src/command/ping.rs +++ b/src/command/ping.rs @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Nikita Pekin and the smexybot contributors +// Copyright (c) 2016-2017 Nikita Pekin and the smexybot contributors // See the README.md file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 arg, - None => { - check_msg(context.say(ERROR_MESSAGE)); + let arg = match args.single::() { + Ok(arg) => arg, + Err(why) => { + debug!("Failed to parse command arg: {}", why); + check_msg(msg.channel_id.say(ERROR_MESSAGE)); return Ok(()); }, }; - let mut captures = DICE_ROLL_REGEX.captures_iter(arg); + let mut captures = DICE_ROLL_REGEX.captures_iter(&arg); let next_capture = captures.next(); let (number_of_dice, die_sides) = match next_capture { Some(capture) => { - let number_of_dice = match capture.at(1) { + let number_of_dice = match capture.get(1) { Some(number_of_dice) => { - match number_of_dice.parse::() { + match number_of_dice.as_str().parse::() { Ok(number_of_dice) => number_of_dice, _ => { - check_msg(context.say(ERROR_MESSAGE)); + check_msg(msg.channel_id.say(ERROR_MESSAGE)); return Ok(()); }, } }, _ => { - check_msg(context.say(ERROR_MESSAGE)); + check_msg(msg.channel_id.say(ERROR_MESSAGE)); return Ok(()); }, }; - let die_sides = match capture.at(2) { + let die_sides = match capture.get(2) { Some(die_sides) => { - match die_sides.parse::() { + match die_sides.as_str().parse::() { Ok(0) => { - check_msg(context.say("Number of die sides cannot be 0.")); + check_msg(msg.channel_id.say("Number of die sides cannot be 0.")); return Ok(()); }, Ok(4294967295) => { - check_msg(context.say("Number of die sides is too large")); + check_msg(msg.channel_id.say("Number of die sides is too large")); return Ok(()); }, Ok(die_sides) => die_sides, _ => { - check_msg(context.say(ERROR_MESSAGE)); + check_msg(msg.channel_id.say(ERROR_MESSAGE)); return Ok(()); }, } }, _ => { - check_msg(context.say(ERROR_MESSAGE)); + check_msg(msg.channel_id.say(ERROR_MESSAGE)); return Ok(()); }, }; @@ -81,13 +80,13 @@ command!(roll(context, _message, args) { (number_of_dice, die_sides) }, _ => { - check_msg(context.say(ERROR_MESSAGE)); + check_msg(msg.channel_id.say(ERROR_MESSAGE)); return Ok(()); }, }; if number_of_dice == 0 { - check_msg(context.say("Number of dice cannot be 0")); + check_msg(msg.channel_id.say("Number of dice cannot be 0")); return Ok(()); } @@ -109,5 +108,5 @@ command!(roll(context, _message, args) { _ => format!("{} = {}", roll_string, sum), }; - check_msg(context.say(response.as_ref())); + check_msg(msg.channel_id.say(response)); }); diff --git a/src/command/stats.rs b/src/command/stats.rs index 922b1b7..9806fbc 100644 --- a/src/command/stats.rs +++ b/src/command/stats.rs @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Nikita Pekin and the smexybot contributors +// Copyright (c) 2016-2017 Nikita Pekin and the smexybot contributors // See the README.md file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 cache, - Err(_) => return Err("Failed to lock cache".to_owned()), + Err(why) => { + debug!("Failed to lock cache: {}", why); + return Err(CommandError("An internal error occurred".to_owned())); + }, }; let guilds = cache.guilds .values() - .collect::>(); + .collect::>>>(); let guilds_count = guilds.len(); - let channels = guilds.iter() - .flat_map(|g| g.channels.values()) - .collect::>(); - let channels_count = channels.len(); - let mut user_ids = guilds.iter() - .flat_map(|g| g.members.keys()) - .collect::>(); + let mut channels_count = 0; + let mut user_ids: Vec = Vec::new(); + for guild in guilds { + let guild = guild.read().unwrap(); + + channels_count += guild.channels.len(); + + let mut users = guild.members.keys().cloned().collect::>(); + user_ids.append(&mut users.clone()); + } user_ids.sort(); user_ids.dedup(); let users_count = user_ids.len(); - let uptime = current_time - *UPTIME; + let bot_uptime = current_time.signed_duration_since(*UPTIME); + let server_uptime = psutil::system::uptime(); let processes = match psutil::process::all() { Ok(processes) => processes, - Err(_) => return Err("Failed to read process list".to_owned()), + Err(why) => { + debug!("Failed to read process list: {}", why); + return Err(CommandError("Failed to read process list".to_owned())); + }, }; let process = match processes.iter().find(|p| p.pid == psutil::getpid()) { Some(process) => process, - None => return Err("Failed to retrieve information on process".to_owned()), + None => return Err(CommandError("Failed to retrieve information on process".to_owned())), }; let threads = process.num_threads; let memory = match process.memory() { Ok(memory) => memory, - Err(_) => return Err("Failed to retrieve process memory usage".to_owned()), + Err(why) => { + debug!("Failed to retrieve process memory usage: {}", why); + return Err(CommandError("Failed to retrieve process memory usage".to_owned())); + }, }; let total_mem; @@ -64,12 +79,17 @@ command!(stats(context, message, _args) { shared_mem = memory.share as f64 * BYTES_TO_MEGABYTES; } - check_msg(context.send_message(message.channel_id, |m| { + check_msg(msg.channel_id.send_message(|m| { m.embed(|e| { e.title(&format!("{} stats", CONFIG.bot_name)) .field(|f| f.name("Members").value(&users_count.to_string())) .field(|f| f.name("Channels").value(&channels_count.to_string())) - .field(|f| f.name("Uptime").value(&duration_to_string(&uptime))) + .field(|f| f.name("Uptime").value( + &format!("Bot: {}\nServer: {}", + duration_to_string(&bot_uptime, true), + duration_to_string(&Duration::seconds(server_uptime as i64), true), + ) + )) .field(|f| f.name("Servers").value(&guilds_count.to_string())) .field(|f| f.name("Thread Count").value(&threads.to_string())) .field(|f| { diff --git a/src/command/xkcd.in.rs b/src/command/xkcd.in.rs deleted file mode 100644 index d8a53f0..0000000 --- a/src/command/xkcd.in.rs +++ /dev/null @@ -1,9 +0,0 @@ -#[derive(Debug, Deserialize)] -struct CseResponse { - pub items: Vec, -} - -#[derive(Debug, Deserialize)] -struct CseItem { - pub link: String, -} diff --git a/src/command/xkcd.rs b/src/command/xkcd.rs index 8cd4568..0124227 100644 --- a/src/command/xkcd.rs +++ b/src/command/xkcd.rs @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Nikita Pekin and the smexybot contributors +// Copyright (c) 2016-2017 Nikita Pekin and the smexybot contributors // See the README.md file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 () .unwrap(); - static ref PLUGIN: XkcdPlugin = { - let cse_api_key = env::var("GOOGLE_XKCD_CUSTOM_SEARCH_API_KEY") + static ref CSE_API_KEY: String = env::var("GOOGLE_XKCD_CUSTOM_SEARCH_API_KEY") .expect("GOOGLE_XKCD_CUSTOM_SEARCH_API_KEY env var not set."); - let cse_engine_id = env::var("GOOGLE_XKCD_CUSTOM_SEARCH_ENGINE_ID") + static ref CSE_ENGINE_ID: String = env::var("GOOGLE_XKCD_CUSTOM_SEARCH_ENGINE_ID") .expect("GOOGLE_XKCD_CUSTOM_SEARCH_ENGINE_ID env var not set."); - XkcdPlugin::new(cse_api_key, cse_engine_id) - }; static ref XKCD_URL_REGEX: Regex = Regex::new(r"^https://xkcd.com/(\d*)").unwrap(); } -#[cfg(feature = "nightly")] -include!("xkcd.in.rs"); +#[derive(Debug, Deserialize)] +struct CseResponse { + pub items: Vec, +} -#[cfg(feature = "with-syntex")] -include!(concat!(env!("OUT_DIR"), "/xkcd.rs")); +#[derive(Debug, Deserialize)] +struct CseItem { + pub link: String, +} -struct XkcdPlugin { - hyper_client: Client, +struct XkcdPlugin { + core: Core, + hyper_client: Client, google_custom_search_api_key: String, google_custom_search_engine_id: String, } -impl XkcdPlugin { +impl XkcdPlugin> { /// Returns a new instance of `XkcdPlugin`. fn new(google_custom_search_api_key: String, google_custom_search_engine_id: String) -> Self { + let core = Core::new().unwrap(); + let client = Client::configure() + .connector(HttpsConnector::new(4, &core.handle()).unwrap()) + .build(&core.handle()); + XkcdPlugin { - hyper_client: Client::new(), + core: core, + hyper_client: client, google_custom_search_api_key: google_custom_search_api_key, google_custom_search_engine_id: google_custom_search_engine_id, } } - fn random(&self) -> String { + fn random(&mut self) -> String { debug!("Searching for random comic"); - xkcd::random::random(&self.hyper_client) + self.core.run(xkcd::random::random(&self.hyper_client)) .ok() .map(|comic| comic.img.into_string()) .unwrap_or("Failed to retrieve random comic".to_owned()) } - fn search(&self, args: &[String]) -> String { + fn search(&mut self, args: &[String]) -> String { debug!("Searching for comic"); let query: String = match args.len() { 0 => return "Missing comic search query".to_owned(), @@ -73,6 +83,7 @@ impl XkcdPlugin { trace!("Query: {}", query); match query_cse(&self.hyper_client, + &mut self.core, &query, &self.google_custom_search_api_key, &self.google_custom_search_engine_id) { @@ -80,19 +91,19 @@ impl XkcdPlugin { let mut comic_urls = res.items .iter() .filter_map(|item| XKCD_URL_REGEX.captures_iter(&item.link).next()) - .filter_map(|capture| capture.at(1)); + .filter_map(|capture| capture.get(1)); match comic_urls.next() { Some(comic_id_str) => { - comic_id_str.parse::() + comic_id_str.as_str().parse::() .ok() .map(|id| { - xkcd::comics::get(&self.hyper_client, id) + self.core.run(xkcd::comics::get(&self.hyper_client, id)) .ok() .map(|comic| comic.img.into_string()) .unwrap_or_else(|| format!("Failed to retrieve comic: {}", id)) }) .unwrap_or_else(|| { - format!("Failed to retrieve comic: {}", comic_id_str) + format!("Failed to retrieve comic: {}", comic_id_str.as_str()) }) }, None => "No results in query".to_owned(), @@ -102,25 +113,27 @@ impl XkcdPlugin { } } - fn latest_comic(&self) -> String { + fn latest_comic(&mut self) -> String { debug!("Retrieving latest comic"); - match xkcd::comics::latest(&self.hyper_client) { + match self.core.run(xkcd::comics::latest(&self.hyper_client)) { Ok(comic) => comic.img.into_string(), Err(_) => "Failed to retrieve latest comic".to_owned(), } } } -command!(xkcd(context, _message, args) { - let (command, args) = split_list(args); +command!(xkcd(_ctx, msg, args) { + let command = args.single::(); + + let mut plugin = XkcdPlugin::new(CSE_API_KEY.clone(), CSE_ENGINE_ID.clone()); - let response = match command.as_ref().map(String::as_ref) { - Some("search") => PLUGIN.search(&args), - Some("random") => PLUGIN.random(), + let response = match command.ok().as_ref().map(String::as_ref) { + Some("search") => plugin.search(&args), + Some("random") => plugin.random(), Some(comic_id) => { match comic_id.parse() { Ok(comic_id) => { - match xkcd::comics::get(&PLUGIN.hyper_client, comic_id) { + match plugin.core.run(xkcd::comics::get(&plugin.hyper_client, comic_id)) { Ok(comic) => comic.img.into_string(), Err(_) => format!("Failed to retrieve comic: {}", comic_id), } @@ -131,14 +144,16 @@ command!(xkcd(context, _message, args) { }, } }, - _ => PLUGIN.latest_comic(), + _ => plugin.latest_comic(), }; - check_msg(context.say(response.as_ref())); + check_msg(msg.channel_id.say(response)); }); -fn query_cse(client: &Client, query: &str, search_api_key: &str, search_engine_id: &str) - -> Result { +fn query_cse(client: &Client, core: &mut Core, query: &str, search_api_key: &str, search_engine_id: &str) + -> Result + where C: Connect, +{ let mut url = GOOGLE_CSE_URL.clone(); url.query_pairs_mut() .clear() @@ -146,9 +161,18 @@ fn query_cse(client: &Client, query: &str, search_api_key: &str, search_engine_i .append_pair("cx", search_engine_id) .append_pair("q", query); - let mut response = try!(client.get(url).send().map_err(Error::from)); - let mut result = String::new(); - try!(response.read_to_string(&mut result).map_err(Error::from)); - - serde_json::from_str(&result).map_err(Error::from) + let uri = Uri::from_str(url.as_ref()).map_err(From::from); + let work = future::result(uri) + .and_then(|uri| client.get(uri)) + .map_err(From::from) + .and_then(|res| res.body().concat2()) + .map_err(From::from) + .and_then(|body| { + str::from_utf8(&body) + .map_err(From::from) + .map(|string| string.to_string()) + }) + .and_then(|string| serde_json::from_str(&string).map_err(From::from)); + + core.run(work) } diff --git a/src/config.in.rs b/src/config.in.rs deleted file mode 100644 index 6712796..0000000 --- a/src/config.in.rs +++ /dev/null @@ -1,11 +0,0 @@ -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct Config { - /// Name by which the bot is referred to internally (e.g. in debug output). - pub bot_name: String, - /// The command prefix for the bot. - pub command_prefix: String, - /// The URL for the source of the project. - pub source_url: String, - /// The authors to use in author checks for permissions. - pub owners: HashSet, -} diff --git a/src/config.rs b/src/config.rs index 8ff0a92..4a81883 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Nikita Pekin and the smexybot contributors +// Copyright (c) 2016-2017 Nikita Pekin and the smexybot contributors // See the README.md file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 , +} impl Config { pub fn new(name: Option<&str>) -> Self { diff --git a/src/counter.rs b/src/counter.rs index 2b3d00a..1cd9df5 100644 --- a/src/counter.rs +++ b/src/counter.rs @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Nikita Pekin and the smexybot contributors +// Copyright (c) 2016-2017 Nikita Pekin and the smexybot contributors // See the README.md file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 e.fmt(f), Serde(ref e) => e.fmt(f), UrlParse(ref e) => e.fmt(f), + Utf8(ref e) => e.fmt(f), } } } @@ -52,6 +56,7 @@ impl StdError for Error { Io(ref e) => e.description(), Serde(ref e) => e.description(), UrlParse(ref e) => e.description(), + Utf8(ref e) => e.description(), } } @@ -63,6 +68,7 @@ impl StdError for Error { Io(ref e) => e.cause(), Serde(ref e) => e.cause(), UrlParse(ref e) => e.cause(), + Utf8(ref e) => e.cause(), } } } @@ -90,3 +96,9 @@ impl From for Error { Error::UrlParse(error) } } + +impl From for Error { + fn from(error: Utf8Error) -> Error { + Error::Utf8(error) + } +} diff --git a/src/main.rs b/src/main.rs index da7d625..66fd486 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,8 @@ #![cfg_attr(feature = "clippy", feature(plugin))] #![cfg_attr(feature = "clippy", plugin(clippy))] +// Build with the system allocator when profiling, for testing purposes. +#![cfg_attr(feature = "profile", feature(alloc_system, global_allocator, allocator_api))] // This is because serenity's `command!` macro results in an // `uncreachable_patterns` error when used in the // `command!(cmd(_, _, _, arg: T))` form. @@ -21,7 +23,8 @@ unused_extern_crates, unused_import_braces)] #![deny(missing_docs, non_camel_case_types, unsafe_code)] -#![cfg_attr(not(feature = "nightly"), deny(warnings))] +// Allow unsafe code when profiling. +#![cfg_attr(feature = "profile", allow(unsafe_code))] #![cfg_attr(feature="clippy", warn( cast_possible_truncation, cast_possible_wrap, @@ -37,181 +40,171 @@ //! in [Rust](https://www.rust-lang.org/). It is built upon the //! [serenity.rs](https://github.com/zeyla/serenity.rs) Discord API. +#[cfg(feature = "profile")] +extern crate alloc_system; extern crate chrono; extern crate env_logger; +extern crate futures; extern crate hyper; -#[cfg(any(feature = "roll", feature = "wolfram", feature = "xkcd"))] +extern crate hyper_tls; #[macro_use] extern crate lazy_static; #[macro_use] extern crate log; +extern crate psutil; extern crate rand; -extern crate serde; -#[cfg(feature = "nightly")] +extern crate regex; +//extern crate serde; #[macro_use] extern crate serde_derive; extern crate serde_json; #[macro_use] extern crate serenity; +extern crate time; +extern crate tokio_core; +extern crate typemap; extern crate url; -extern crate uuid; +//extern crate uuid; +extern crate xkcd; mod command; mod config; mod counter; mod error; -#[cfg(feature = "store")] -mod store; +//mod store; mod util; -use chrono::{DateTime, UTC}; +#[cfg(feature = "profile")] +use alloc_system::System; +use chrono::{DateTime, Utc}; use config::Config; use counter::CommandCounter; use serenity::Client; -use serenity::client::LoginType; -use serenity::ext::framework::Framework; -use serenity::model::UserId; +use serenity::client::{Context, EventHandler}; +use serenity::framework::standard::{help_commands, StandardFramework}; +use serenity::model::{Ready, UserId}; use std::collections::HashMap; use std::env; use util::{check_msg, timestamp_to_string}; -const RATE_LIMIT_MESSAGE: &'static str = "Try this again in %time% seconds."; +#[cfg(feature = "profile")] +#[global_allocator] +static A: System = System; + +// TODO: uncomment this. +//const RATE_LIMIT_MESSAGE: &'static str = "Try this again in %time% seconds."; lazy_static! { static ref CONFIG: Config = Config::new(Some("config.json")); - static ref UPTIME: DateTime = UTC::now(); + static ref UPTIME: DateTime = Utc::now(); } -fn main() { - // Initialize the `env_logger` to provide logging output. - env_logger::init().expect("Failed to initialize env_logger"); - - // Initialize the `UPTIME` variable. - debug!("Initialized at: {}", timestamp_to_string(&*UPTIME)); +struct Handler; - // Create a client for a user. - let (_, mut client) = login(); - - { - let mut data = client.data.lock().expect("Failed to lock client data"); - data.insert::(HashMap::default()); - } - - client.on_ready(|_context, ready| { +impl EventHandler for Handler { + // Set a handler to be called on the `on_ready` event. + // This is called when a shard is booted, and a READY payload is sent by + // Discord. + fn on_ready(&self, _: Context, ready: Ready) { let shard_info = if let Some(s) = ready.shard { Some(format!("shard {}/{} ", s[0] + 1, s[1])) } else { None }; - println!( + + info!( "Started {}as {}#{}, serving {} guilds", shard_info.unwrap_or_else(|| "".to_owned()), ready.user.name, ready.user.discriminator, ready.guilds.len(), ); - }); + } +} - client.with_framework(build_framework); +fn main() { + // Initialize the `env_logger` to provide logging output. + env_logger::init().expect("Failed to initialize env_logger"); - if let Err(err) = client.start_autosharded() { - error!("Client error: {:?}", err); + // Initialize the `UPTIME` variable. + debug!("Initialized at: {}", timestamp_to_string(&*UPTIME)); + + debug!("Retrieving token from environment"); + let token = env::var("DISCORD_BOT_TOKEN") + .expect("Failed to find DISCORD_BOT_TOKEN environment variable"); + + // Create a client for a user. + let mut client = Client::new(&token, Handler); + + { + let mut data = client.data.lock(); + data.insert::(HashMap::default()); } -} -// Configures the `Framework` used by serenity, and registers the handlers for -// any enabled commands. -fn build_framework(framework: Framework) -> Framework { - let mut framework = framework.configure(|c| { - c.rate_limit_message(RATE_LIMIT_MESSAGE) - .prefix(&CONFIG.command_prefix) - .owners(CONFIG.owners.iter().map(|id| UserId(*id)).collect()) - }) - .before(|context, message, command_name| { - info!( + client.with_framework( + StandardFramework::new() + .configure(|c| c + .allow_whitespace(false) + .on_mention(true) + // TODO: replace this. + //.rate_limit_message(RATE_LIMIT_MESSAGE) + .prefix(&CONFIG.command_prefix) + .owners(CONFIG.owners.iter().map(|id| UserId(*id)).collect())) + + .before(|ctx, msg, command_name| { + trace!( "Got command '{}' from user '{}'", command_name, - message.author.name, + msg.author.name, ); - // Increment the number of times this command has been run. If the - // command's name does not exist in the counter, add a default value of - // 0. - let mut data = context.data.lock().expect("Failed to lock context data"); + // Increment the number of times this command has been run. + // If the command's name does not exist in the counter, add a + // default value of 0. + let mut data = ctx.data.lock(); let counter = data.get_mut::().unwrap(); - let entry = counter.entry(command_name.clone()).or_insert(0); + let entry = counter.entry(command_name.to_owned()).or_insert(0); *entry += 1; + // if `before` returns false, command processing doesn't happen. true }) - .after(|context, _message, command_name, error| { + .after(|_ctx, msg, command_name, error| { if let Err(err) = error { - check_msg(context.say(&err)); + check_msg(msg.channel_id.say(&err.0)); } else { - debug!("Processed command '{}'", command_name); + trace!("Processed command '{}'", command_name); } - }); + }) - #[cfg(feature = "counter")] - { - framework = framework.command("counter", |c| c.exec(command::counter::counter)); - } - #[cfg(feature = "fuyu")] - { - framework = framework.command("fuyu", |c| c.exec(command::fuyu::fuyu)); - } - #[cfg(feature = "help")] - { - use serenity::ext::framework::help_commands; - framework = framework.command("help", |c| c.exec_help(help_commands::plain)); - } - #[cfg(feature = "ping")] - { - framework = framework.command("ping", |c| { + .command("help", |c| c.exec_help(help_commands::plain)) + + .command("ping", |c| { c.desc("Responds with 'Pong', as well as a latency estimate.") .exec(command::ping::ping) .owners_only(true) - }); - } - #[cfg(feature = "roll")] - { - framework = framework.command("roll", |c| c.exec(command::roll::roll)); - } - #[cfg(feature = "stats")] - { - framework = framework.command("stats", |c| c.exec(command::stats::stats)); - } - #[cfg(feature = "tag")] - { - framework = framework.command("tag", |c| c.exec(command::tag::tag)); - } - #[cfg(feature = "wolfram")] - { - framework = framework.command("wolfram", |c| c.exec(command::wolfram_alpha::wolfram)); - } - #[cfg(feature = "xkcd")] - { - framework = framework.command("xkcd", |c| c.exec(command::xkcd::xkcd)); - } + }) - framework -} + .command("roll", |c| c.exec(command::roll::roll)) -// Creates a `Client`. -fn login() -> (LoginType, Client) { - debug!("Attempting to login"); + .command("stats", |c| c.exec(command::stats::stats)) - if let Ok(bot_token) = env::var("DISCORD_BOT_TOKEN") { - debug!("Performing bot token login"); - return (LoginType::Bot, Client::login_bot(&bot_token)); - } - debug!("Skipping bot token login"); + .command("xkcd", |c| c.exec(command::xkcd::xkcd)) + ); - if let Ok(user_token) = env::var("DISCORD_USER_TOKEN") { - debug!("Performing user token login"); - return (LoginType::User, Client::login_user(&user_token)); + // Start the client with an auto-selected number of shards, and start + // listening to events. + // + // Shards will automatically attempt to reconnect, and will perform + // exponential backoff until they reconnect. + if let Err(err) = client.start_autosharded() { + error!("Client error: {:?}", err); } - debug!("Skipping user token login"); - - panic!("No suitable authentication method found"); } + +/* +framework = framework.command("counter", |c| c.exec(command::counter::counter)); +framework = framework.command("fuyu", |c| c.exec(command::fuyu::fuyu)); +framework = framework.command("tag", |c| c.exec(command::tag::tag)); +framework = framework.command("wolfram", |c| c.exec(command::wolfram_alpha::wolfram)); +*/ diff --git a/src/util.rs b/src/util.rs index 8c701f6..e0f57c1 100644 --- a/src/util.rs +++ b/src/util.rs @@ -7,26 +7,18 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use chrono::{DateTime, Duration, UTC}; -use rand::{self, Rng}; +use chrono::{DateTime, Duration, Utc}; +// TODO: uncomment this. +//use rand::{self, Rng}; use serenity::Result as SerenityResult; use serenity::model::Message; -use serenity::utils::Colour; -use std::collections::HashMap; -use std::error::Error; -use std::fmt::Debug; -use std::hash::Hash; -use std::sync::{Mutex, MutexGuard}; - -/// Takes a `Vec` and splits it into a head and a tail. -#[inline] -pub fn split_list(list: Vec) -> (Option, Vec) { - let mut iter = list.into_iter(); - let head = iter.next(); - let tail = iter.collect(); - - (head, tail) -} +// TODO: uncomment these. +//use serenity::utils::Colour; +//use std::collections::HashMap; +//use std::error::Error; +//use std::fmt::Debug; +//use std::hash::Hash; +//use std::sync::{Mutex, MutexGuard}; /// Checks that a message successfully sent; if not, then logs why. #[inline] @@ -36,6 +28,8 @@ pub fn check_msg(result: SerenityResult) { } } +// TODO: uncomment these. +/* /// Generates a random RGB colour. #[inline] pub fn random_colour() -> Colour { @@ -57,42 +51,44 @@ pub fn merge(first: HashMap, second: HashMap) -> Ha } merged } +*/ -/// Returns the specified `DateTime` as a Discord-compatible ISO 8601 +/// Returns the specified `DateTime` as a Discord-compatible ISO 8601 /// `String`. #[inline] -pub fn timestamp_to_string(timestamp: &DateTime) -> String { +pub fn timestamp_to_string(timestamp: &DateTime) -> String { format!("{}", timestamp.format("%Y-%m-%dT%H:%M:%SZ")) } -/// Returns the specified `Duration` as a `String` in the format "Wd Xh Ym Zs" +/// Returns the specified `Duration` as a `String`. +/// +/// Formats the string as "D days H hours M minutes S seconds" if `brief` was +/// set to `false`, and formats it as "Dd Hh Mm Ss" otherwise. +/// +/// Days are not added to the resulting string unless applicable. #[inline] -pub fn duration_to_string(duration: &Duration) -> String { - let days = duration.num_days(); - let hours = if days > 0 { - duration.num_hours() % 24 - } else { - duration.num_hours() - }; - let minutes = if hours > 0 { - duration.num_minutes() % 60 - } else { - duration.num_minutes() - }; - let seconds = if minutes > 0 { - duration.num_seconds() % 60 +pub fn duration_to_string(duration: &Duration, brief: bool) -> String { + let (hours, remainder) = divmod(duration.num_seconds(), 3600); + let (minutes, seconds) = divmod(remainder, 60); + let (days, hours) = divmod(hours, 24); + + if brief { + if days > 0 { + format!("{}d {}h {}m {}s", days, hours, minutes, seconds) + } else { + format!("{}h {}m {}s", hours, minutes, seconds) + } } else { - duration.num_seconds() - }; - format!( - "{}d {}h {}m {}s", - days, - hours, - minutes, - seconds, - ) + if days > 0 { + format!("{} days {} hours {} minutes {} seconds", days, hours, minutes, seconds) + } else { + format!("{} hours {} minutes {} seconds", hours, minutes, seconds) + } + } } +// TODO: uncomment these. +/* /// Converts an error which implements the `Debug` trait into a `String`. #[inline] pub fn stringify(error: E) -> String @@ -107,3 +103,26 @@ pub fn stringify(error: E) -> String pub fn lock_mutex(mutex: &Mutex) -> Result, String> { mutex.lock().map_err(|_| "Error: an internal error occurred, please report this.".to_owned()) } +*/ + +/// Take two numbers as arguments and return a pair of numbers consisting of +/// their quotient and remainder when using long division. +fn divmod(a: i64, b: i64) -> (i64, i64) { + (a / b, a % b) +} + +#[cfg(test)] +mod tests { + use chrono::Duration; + use super::duration_to_string; + + #[test] + fn test_duration_to_string() { + assert_eq!(duration_to_string(&Duration::seconds(0), true), "0h 0m 0s"); + assert_eq!(duration_to_string(&Duration::seconds(1), true), "0h 0m 1s"); + assert_eq!(duration_to_string(&Duration::seconds(60), true), "0h 1m 0s"); + assert_eq!(duration_to_string(&Duration::seconds(60 * 60), false), "1 hours 0 minutes 0 seconds"); + assert_eq!(duration_to_string(&Duration::seconds(60 * 60 * 24), false), "1 days 0 hours 0 minutes 0 seconds"); + assert_eq!(duration_to_string(&Duration::seconds(60 * 60 * 24 * 365), false), "365 days 0 hours 0 minutes 0 seconds"); + } +}