├── .gitignore ├── .rustfmt.toml ├── .travis.yml ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md └── src ├── commands ├── meta.rs └── mod.rs ├── config.rs ├── error.rs ├── logging.rs ├── main.rs └── uptimer.rs /.gitignore: -------------------------------------------------------------------------------- 1 | # Misc things 2 | *.json 3 | *.iml 4 | *.bk 5 | .*/ 6 | 7 | # Generated by Cargo 8 | # will have compiled files and executables 9 | /target/ 10 | 11 | config.toml -------------------------------------------------------------------------------- /.rustfmt.toml: -------------------------------------------------------------------------------- 1 | write_mode = "Overwrite" 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: rust 2 | rust: 3 | - stable 4 | - beta 5 | - nightly 6 | matrix: 7 | allow_failures: 8 | - rust: nightly 9 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | [root] 2 | name = "rust_bot" 3 | version = "0.1.0" 4 | dependencies = [ 5 | "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 6 | "error-chain 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 7 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 8 | "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", 9 | "serde 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", 10 | "serde_derive 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", 11 | "serenity 0.3.0 (git+https://github.com/zeyla/serenity.git)", 12 | "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", 13 | "toml 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 14 | "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 15 | ] 16 | 17 | [[package]] 18 | name = "advapi32-sys" 19 | version = "0.2.0" 20 | source = "registry+https://github.com/rust-lang/crates.io-index" 21 | dependencies = [ 22 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 23 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 24 | ] 25 | 26 | [[package]] 27 | name = "antidote" 28 | version = "1.0.0" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | 31 | [[package]] 32 | name = "backtrace" 33 | version = "0.3.2" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | dependencies = [ 36 | "backtrace-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 37 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 38 | "dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 39 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 40 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 41 | "rustc-demangle 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 42 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 43 | ] 44 | 45 | [[package]] 46 | name = "backtrace-sys" 47 | version = "0.1.11" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | dependencies = [ 50 | "gcc 0.3.51 (registry+https://github.com/rust-lang/crates.io-index)", 51 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 52 | ] 53 | 54 | [[package]] 55 | name = "base64" 56 | version = "0.5.2" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | dependencies = [ 59 | "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 60 | ] 61 | 62 | [[package]] 63 | name = "base64" 64 | version = "0.6.0" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | dependencies = [ 67 | "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 68 | "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 69 | ] 70 | 71 | [[package]] 72 | name = "bitflags" 73 | version = "0.9.1" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | 76 | [[package]] 77 | name = "byteorder" 78 | version = "1.1.0" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | 81 | [[package]] 82 | name = "bytes" 83 | version = "0.4.4" 84 | source = "registry+https://github.com/rust-lang/crates.io-index" 85 | dependencies = [ 86 | "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 87 | "iovec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 88 | ] 89 | 90 | [[package]] 91 | name = "cfg-if" 92 | version = "0.1.2" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | 95 | [[package]] 96 | name = "chrono" 97 | version = "0.4.0" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | dependencies = [ 100 | "num 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 101 | "serde 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", 102 | "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", 103 | ] 104 | 105 | [[package]] 106 | name = "core-foundation" 107 | version = "0.2.3" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | dependencies = [ 110 | "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 111 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 112 | ] 113 | 114 | [[package]] 115 | name = "core-foundation-sys" 116 | version = "0.2.3" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | dependencies = [ 119 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 120 | ] 121 | 122 | [[package]] 123 | name = "crypt32-sys" 124 | version = "0.2.0" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | dependencies = [ 127 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 128 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 129 | ] 130 | 131 | [[package]] 132 | name = "dbghelp-sys" 133 | version = "0.2.0" 134 | source = "registry+https://github.com/rust-lang/crates.io-index" 135 | dependencies = [ 136 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 137 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 138 | ] 139 | 140 | [[package]] 141 | name = "dtoa" 142 | version = "0.4.1" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | 145 | [[package]] 146 | name = "error-chain" 147 | version = "0.8.1" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | dependencies = [ 150 | "backtrace 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 151 | ] 152 | 153 | [[package]] 154 | name = "flate2" 155 | version = "0.2.19" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | dependencies = [ 158 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 159 | "miniz-sys 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 160 | ] 161 | 162 | [[package]] 163 | name = "foreign-types" 164 | version = "0.2.0" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | 167 | [[package]] 168 | name = "futures" 169 | version = "0.1.14" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | 172 | [[package]] 173 | name = "gcc" 174 | version = "0.3.51" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | 177 | [[package]] 178 | name = "httparse" 179 | version = "1.2.3" 180 | source = "registry+https://github.com/rust-lang/crates.io-index" 181 | 182 | [[package]] 183 | name = "hyper" 184 | version = "0.10.12" 185 | source = "registry+https://github.com/rust-lang/crates.io-index" 186 | dependencies = [ 187 | "base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 188 | "httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 189 | "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 190 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 191 | "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 192 | "num_cpus 1.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 193 | "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", 194 | "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 195 | "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 196 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 197 | "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 198 | ] 199 | 200 | [[package]] 201 | name = "hyper-native-tls" 202 | version = "0.2.4" 203 | source = "registry+https://github.com/rust-lang/crates.io-index" 204 | dependencies = [ 205 | "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 206 | "hyper 0.10.12 (registry+https://github.com/rust-lang/crates.io-index)", 207 | "native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 208 | ] 209 | 210 | [[package]] 211 | name = "idna" 212 | version = "0.1.4" 213 | source = "registry+https://github.com/rust-lang/crates.io-index" 214 | dependencies = [ 215 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 216 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 217 | "unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 218 | ] 219 | 220 | [[package]] 221 | name = "iovec" 222 | version = "0.1.0" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | dependencies = [ 225 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 226 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 227 | ] 228 | 229 | [[package]] 230 | name = "itoa" 231 | version = "0.3.1" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | 234 | [[package]] 235 | name = "kernel32-sys" 236 | version = "0.2.2" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | dependencies = [ 239 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 240 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 241 | ] 242 | 243 | [[package]] 244 | name = "language-tags" 245 | version = "0.2.2" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | 248 | [[package]] 249 | name = "lazy_static" 250 | version = "0.2.8" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | 253 | [[package]] 254 | name = "lazycell" 255 | version = "0.4.0" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | 258 | [[package]] 259 | name = "libc" 260 | version = "0.2.26" 261 | source = "registry+https://github.com/rust-lang/crates.io-index" 262 | 263 | [[package]] 264 | name = "log" 265 | version = "0.3.8" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | 268 | [[package]] 269 | name = "matches" 270 | version = "0.1.6" 271 | source = "registry+https://github.com/rust-lang/crates.io-index" 272 | 273 | [[package]] 274 | name = "mime" 275 | version = "0.2.6" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | dependencies = [ 278 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 279 | ] 280 | 281 | [[package]] 282 | name = "mime_guess" 283 | version = "1.8.1" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | dependencies = [ 286 | "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 287 | "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 288 | "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 289 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 290 | ] 291 | 292 | [[package]] 293 | name = "miniz-sys" 294 | version = "0.1.9" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | dependencies = [ 297 | "gcc 0.3.51 (registry+https://github.com/rust-lang/crates.io-index)", 298 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 299 | ] 300 | 301 | [[package]] 302 | name = "mio" 303 | version = "0.6.9" 304 | source = "registry+https://github.com/rust-lang/crates.io-index" 305 | dependencies = [ 306 | "iovec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 307 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 308 | "lazycell 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 309 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 310 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 311 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 312 | "net2 0.2.29 (registry+https://github.com/rust-lang/crates.io-index)", 313 | "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 314 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 315 | ] 316 | 317 | [[package]] 318 | name = "miow" 319 | version = "0.2.1" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | dependencies = [ 322 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 323 | "net2 0.2.29 (registry+https://github.com/rust-lang/crates.io-index)", 324 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 325 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 326 | ] 327 | 328 | [[package]] 329 | name = "multipart" 330 | version = "0.13.1" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | dependencies = [ 333 | "hyper 0.10.12 (registry+https://github.com/rust-lang/crates.io-index)", 334 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 335 | "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 336 | "mime_guess 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 337 | "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 338 | "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 339 | "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 340 | ] 341 | 342 | [[package]] 343 | name = "native-tls" 344 | version = "0.1.4" 345 | source = "registry+https://github.com/rust-lang/crates.io-index" 346 | dependencies = [ 347 | "openssl 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)", 348 | "schannel 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 349 | "security-framework 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 350 | "security-framework-sys 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 351 | "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 352 | ] 353 | 354 | [[package]] 355 | name = "net2" 356 | version = "0.2.29" 357 | source = "registry+https://github.com/rust-lang/crates.io-index" 358 | dependencies = [ 359 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 360 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 361 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 362 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 363 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 364 | ] 365 | 366 | [[package]] 367 | name = "num" 368 | version = "0.1.39" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | dependencies = [ 371 | "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", 372 | "num-iter 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", 373 | "num-traits 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 374 | ] 375 | 376 | [[package]] 377 | name = "num-integer" 378 | version = "0.1.34" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | dependencies = [ 381 | "num-traits 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 382 | ] 383 | 384 | [[package]] 385 | name = "num-iter" 386 | version = "0.1.33" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | dependencies = [ 389 | "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", 390 | "num-traits 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 391 | ] 392 | 393 | [[package]] 394 | name = "num-traits" 395 | version = "0.1.39" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | 398 | [[package]] 399 | name = "num_cpus" 400 | version = "1.6.2" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | dependencies = [ 403 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 404 | ] 405 | 406 | [[package]] 407 | name = "openssl" 408 | version = "0.9.14" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | dependencies = [ 411 | "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 412 | "foreign-types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 413 | "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 414 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 415 | "openssl-sys 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)", 416 | ] 417 | 418 | [[package]] 419 | name = "openssl-sys" 420 | version = "0.9.14" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | dependencies = [ 423 | "gcc 0.3.51 (registry+https://github.com/rust-lang/crates.io-index)", 424 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 425 | "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 426 | ] 427 | 428 | [[package]] 429 | name = "owning_ref" 430 | version = "0.3.3" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | dependencies = [ 433 | "stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 434 | ] 435 | 436 | [[package]] 437 | name = "parking_lot" 438 | version = "0.4.4" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | dependencies = [ 441 | "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 442 | "parking_lot_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 443 | "thread-id 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 444 | ] 445 | 446 | [[package]] 447 | name = "parking_lot_core" 448 | version = "0.2.2" 449 | source = "registry+https://github.com/rust-lang/crates.io-index" 450 | dependencies = [ 451 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 452 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 453 | "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 454 | "smallvec 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 455 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 456 | ] 457 | 458 | [[package]] 459 | name = "percent-encoding" 460 | version = "1.0.0" 461 | source = "registry+https://github.com/rust-lang/crates.io-index" 462 | 463 | [[package]] 464 | name = "phf" 465 | version = "0.7.21" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | dependencies = [ 468 | "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 469 | ] 470 | 471 | [[package]] 472 | name = "phf_codegen" 473 | version = "0.7.21" 474 | source = "registry+https://github.com/rust-lang/crates.io-index" 475 | dependencies = [ 476 | "phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 477 | "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 478 | ] 479 | 480 | [[package]] 481 | name = "phf_generator" 482 | version = "0.7.21" 483 | source = "registry+https://github.com/rust-lang/crates.io-index" 484 | dependencies = [ 485 | "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 486 | "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 487 | ] 488 | 489 | [[package]] 490 | name = "phf_shared" 491 | version = "0.7.21" 492 | source = "registry+https://github.com/rust-lang/crates.io-index" 493 | dependencies = [ 494 | "siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 495 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 496 | ] 497 | 498 | [[package]] 499 | name = "pkg-config" 500 | version = "0.3.9" 501 | source = "registry+https://github.com/rust-lang/crates.io-index" 502 | 503 | [[package]] 504 | name = "quote" 505 | version = "0.3.15" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | 508 | [[package]] 509 | name = "rand" 510 | version = "0.3.15" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | dependencies = [ 513 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 514 | ] 515 | 516 | [[package]] 517 | name = "redox_syscall" 518 | version = "0.1.26" 519 | source = "registry+https://github.com/rust-lang/crates.io-index" 520 | 521 | [[package]] 522 | name = "rustc-demangle" 523 | version = "0.1.4" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | 526 | [[package]] 527 | name = "safemem" 528 | version = "0.2.0" 529 | source = "registry+https://github.com/rust-lang/crates.io-index" 530 | 531 | [[package]] 532 | name = "schannel" 533 | version = "0.1.7" 534 | source = "registry+https://github.com/rust-lang/crates.io-index" 535 | dependencies = [ 536 | "advapi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 537 | "crypt32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 538 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 539 | "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 540 | "secur32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 541 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 542 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 543 | ] 544 | 545 | [[package]] 546 | name = "scoped-tls" 547 | version = "0.1.0" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | 550 | [[package]] 551 | name = "secur32-sys" 552 | version = "0.2.0" 553 | source = "registry+https://github.com/rust-lang/crates.io-index" 554 | dependencies = [ 555 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 556 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 557 | ] 558 | 559 | [[package]] 560 | name = "security-framework" 561 | version = "0.1.14" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | dependencies = [ 564 | "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 565 | "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 566 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 567 | "security-framework-sys 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 568 | ] 569 | 570 | [[package]] 571 | name = "security-framework-sys" 572 | version = "0.1.14" 573 | source = "registry+https://github.com/rust-lang/crates.io-index" 574 | dependencies = [ 575 | "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 576 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 577 | ] 578 | 579 | [[package]] 580 | name = "serde" 581 | version = "1.0.10" 582 | source = "registry+https://github.com/rust-lang/crates.io-index" 583 | 584 | [[package]] 585 | name = "serde_derive" 586 | version = "1.0.10" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | dependencies = [ 589 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 590 | "serde_derive_internals 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)", 591 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", 592 | ] 593 | 594 | [[package]] 595 | name = "serde_derive_internals" 596 | version = "0.15.1" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | dependencies = [ 599 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", 600 | "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", 601 | ] 602 | 603 | [[package]] 604 | name = "serde_json" 605 | version = "1.0.2" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | dependencies = [ 608 | "dtoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 609 | "itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 610 | "num-traits 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 611 | "serde 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", 612 | ] 613 | 614 | [[package]] 615 | name = "serenity" 616 | version = "0.3.0" 617 | source = "git+https://github.com/zeyla/serenity.git#88765d0a978001ff88a1ee12798a725b7f5a90e9" 618 | dependencies = [ 619 | "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 620 | "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 621 | "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 622 | "flate2 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", 623 | "futures 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 624 | "hyper 0.10.12 (registry+https://github.com/rust-lang/crates.io-index)", 625 | "hyper-native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 626 | "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 627 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 628 | "multipart 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", 629 | "native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 630 | "parking_lot 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 631 | "serde 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", 632 | "serde_derive 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", 633 | "serde_json 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 634 | "tokio-core 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 635 | "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 636 | "websocket 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", 637 | ] 638 | 639 | [[package]] 640 | name = "sha1" 641 | version = "0.2.0" 642 | source = "registry+https://github.com/rust-lang/crates.io-index" 643 | 644 | [[package]] 645 | name = "siphasher" 646 | version = "0.2.2" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | 649 | [[package]] 650 | name = "slab" 651 | version = "0.3.0" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | 654 | [[package]] 655 | name = "smallvec" 656 | version = "0.4.1" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | 659 | [[package]] 660 | name = "stable_deref_trait" 661 | version = "1.0.0" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | 664 | [[package]] 665 | name = "syn" 666 | version = "0.11.11" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | dependencies = [ 669 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 670 | "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", 671 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 672 | ] 673 | 674 | [[package]] 675 | name = "synom" 676 | version = "0.11.3" 677 | source = "registry+https://github.com/rust-lang/crates.io-index" 678 | dependencies = [ 679 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 680 | ] 681 | 682 | [[package]] 683 | name = "tempdir" 684 | version = "0.3.5" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | dependencies = [ 687 | "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 688 | ] 689 | 690 | [[package]] 691 | name = "thread-id" 692 | version = "3.2.0" 693 | source = "registry+https://github.com/rust-lang/crates.io-index" 694 | dependencies = [ 695 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 696 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 697 | "redox_syscall 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", 698 | ] 699 | 700 | [[package]] 701 | name = "time" 702 | version = "0.1.38" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | dependencies = [ 705 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 706 | "libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", 707 | "redox_syscall 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", 708 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 709 | ] 710 | 711 | [[package]] 712 | name = "tokio-core" 713 | version = "0.1.8" 714 | source = "registry+https://github.com/rust-lang/crates.io-index" 715 | dependencies = [ 716 | "bytes 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 717 | "futures 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 718 | "iovec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 719 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 720 | "mio 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", 721 | "scoped-tls 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 722 | "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 723 | "tokio-io 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 724 | ] 725 | 726 | [[package]] 727 | name = "tokio-io" 728 | version = "0.1.2" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | dependencies = [ 731 | "bytes 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 732 | "futures 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 733 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 734 | ] 735 | 736 | [[package]] 737 | name = "toml" 738 | version = "0.4.2" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | dependencies = [ 741 | "serde 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", 742 | ] 743 | 744 | [[package]] 745 | name = "traitobject" 746 | version = "0.1.0" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | 749 | [[package]] 750 | name = "typeable" 751 | version = "0.1.2" 752 | source = "registry+https://github.com/rust-lang/crates.io-index" 753 | 754 | [[package]] 755 | name = "typemap" 756 | version = "0.3.3" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | dependencies = [ 759 | "unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 760 | ] 761 | 762 | [[package]] 763 | name = "unicase" 764 | version = "1.4.2" 765 | source = "registry+https://github.com/rust-lang/crates.io-index" 766 | dependencies = [ 767 | "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 768 | ] 769 | 770 | [[package]] 771 | name = "unicode-bidi" 772 | version = "0.3.4" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | dependencies = [ 775 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 776 | ] 777 | 778 | [[package]] 779 | name = "unicode-normalization" 780 | version = "0.1.5" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | 783 | [[package]] 784 | name = "unicode-xid" 785 | version = "0.0.4" 786 | source = "registry+https://github.com/rust-lang/crates.io-index" 787 | 788 | [[package]] 789 | name = "unsafe-any" 790 | version = "0.4.2" 791 | source = "registry+https://github.com/rust-lang/crates.io-index" 792 | dependencies = [ 793 | "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 794 | ] 795 | 796 | [[package]] 797 | name = "url" 798 | version = "1.5.1" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | dependencies = [ 801 | "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 802 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 803 | "percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 804 | ] 805 | 806 | [[package]] 807 | name = "version_check" 808 | version = "0.1.3" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | 811 | [[package]] 812 | name = "websocket" 813 | version = "0.20.2" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | dependencies = [ 816 | "base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 817 | "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 818 | "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 819 | "hyper 0.10.12 (registry+https://github.com/rust-lang/crates.io-index)", 820 | "native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 821 | "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 822 | "sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 823 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 824 | "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 825 | ] 826 | 827 | [[package]] 828 | name = "winapi" 829 | version = "0.2.8" 830 | source = "registry+https://github.com/rust-lang/crates.io-index" 831 | 832 | [[package]] 833 | name = "winapi-build" 834 | version = "0.1.1" 835 | source = "registry+https://github.com/rust-lang/crates.io-index" 836 | 837 | [[package]] 838 | name = "ws2_32-sys" 839 | version = "0.2.1" 840 | source = "registry+https://github.com/rust-lang/crates.io-index" 841 | dependencies = [ 842 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 843 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 844 | ] 845 | 846 | [metadata] 847 | "checksum advapi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e06588080cb19d0acb6739808aafa5f26bfb2ca015b2b6370028b44cf7cb8a9a" 848 | "checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" 849 | "checksum backtrace 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "72f9b4182546f4b04ebc4ab7f84948953a118bd6021a1b6a6c909e3e94f6be76" 850 | "checksum backtrace-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "3a0d842ea781ce92be2bf78a9b38883948542749640b8378b3b2f03d1fd9f1ff" 851 | "checksum base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30e93c03064e7590d0466209155251b90c22e37fab1daf2771582598b5827557" 852 | "checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" 853 | "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" 854 | "checksum byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff81738b726f5d099632ceaffe7fb65b90212e8dce59d518729e7e8634032d3d" 855 | "checksum bytes 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8b24f16593f445422331a5eed46b72f7f171f910fead4f2ea8f17e727e9c5c14" 856 | "checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" 857 | "checksum chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c20ebe0b2b08b0aeddba49c609fe7957ba2e33449882cb186a180bc60682fa9" 858 | "checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" 859 | "checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" 860 | "checksum crypt32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e34988f7e069e0b2f3bfc064295161e489b2d4e04a2e4248fb94360cdf00b4ec" 861 | "checksum dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850" 862 | "checksum dtoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "80c8b71fd71146990a9742fc06dcbbde19161a267e0ad4e572c35162f4578c90" 863 | "checksum error-chain 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6930e04918388a9a2e41d518c25cf679ccafe26733fb4127dbf21993f2575d46" 864 | "checksum flate2 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)" = "36df0166e856739905cd3d7e0b210fe818592211a008862599845e012d8d304c" 865 | "checksum foreign-types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3e4056b9bd47f8ac5ba12be771f77a0dae796d1bbaaf5fd0b9c2d38b69b8a29d" 866 | "checksum futures 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4b63a4792d4f8f686defe3b39b92127fea6344de5d38202b2ee5a11bbbf29d6a" 867 | "checksum gcc 0.3.51 (registry+https://github.com/rust-lang/crates.io-index)" = "120d07f202dcc3f72859422563522b66fe6463a4c513df062874daad05f85f0a" 868 | "checksum httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "af2f2dd97457e8fb1ae7c5a420db346af389926e36f43768b96f101546b04a07" 869 | "checksum hyper 0.10.12 (registry+https://github.com/rust-lang/crates.io-index)" = "0f01e4a20f5dfa5278d7762b7bdb7cab96e24378b9eca3889fbd4b5e94dc7063" 870 | "checksum hyper-native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "72332e4a35d3059583623b50e98e491b78f8b96c5521fcb3f428167955aa56e8" 871 | "checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d" 872 | "checksum iovec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "29d062ee61fccdf25be172e70f34c9f6efc597e1fb8f6526e8437b2046ab26be" 873 | "checksum itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eb2f404fbc66fd9aac13e998248505e7ecb2ad8e44ab6388684c5fb11c6c251c" 874 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 875 | "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" 876 | "checksum lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3b37545ab726dd833ec6420aaba8231c5b320814b9029ad585555d2a03e94fbf" 877 | "checksum lazycell 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce12306c4739d86ee97c23139f3a34ddf0387bbf181bc7929d287025a8c3ef6b" 878 | "checksum libc 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)" = "30885bcb161cf67054244d10d4a7f4835ffd58773bc72e07d35fecf472295503" 879 | "checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b" 880 | "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" 881 | "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" 882 | "checksum mime_guess 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76da6df85047af8c0edfa53f48eb1073012ce1cc95c8fedc0a374f659a89dd65" 883 | "checksum miniz-sys 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "28eaee17666671fa872e567547e8428e83308ebe5808cdf6a0e28397dbe2c726" 884 | "checksum mio 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9e965267d4d58496fc4f740e9861118367f13570cadf66316ed2c3f2f14d87c7" 885 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 886 | "checksum multipart 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2669e1f4df4eb6401070d534018746b56210b0abcda2502462e16209ac53d2a3" 887 | "checksum native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04b781c9134a954c84f0594b9ab3f5606abc516030388e8511887ef4c204a1e5" 888 | "checksum net2 0.2.29 (registry+https://github.com/rust-lang/crates.io-index)" = "bc01404e7568680f1259aa5729539f221cb1e6d047a0d9053cab4be8a73b5d67" 889 | "checksum num 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "2c3a3dc9f30bf824141521b30c908a859ab190b76e20435fcd89f35eb6583887" 890 | "checksum num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "ef1a4bf6f9174aa5783a9b4cc892cacd11aebad6c69ad027a0b65c6ca5f8aa37" 891 | "checksum num-iter 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d1891bd7b936f12349b7d1403761c8a0b85a18b148e9da4429d5d102c1a41e" 892 | "checksum num-traits 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "1708c0628602a98b52fad936cf3edb9a107af06e52e49fdf0707e884456a6af6" 893 | "checksum num_cpus 1.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aec53c34f2d0247c5ca5d32cca1478762f301740468ee9ee6dcb7a0dd7a0c584" 894 | "checksum openssl 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)" = "11ba043cb65fc9af71a431b8a36ffe8686cd4751cdf70a473ec1d01066ac7e41" 895 | "checksum openssl-sys 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)" = "236c718c2e2c2b58a546d86ffea5194400bb15dbe01ca85325ffd357b03cf66c" 896 | "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" 897 | "checksum parking_lot 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "37f364e2ce5efa24c7d0b6646d5bb61145551a0112f107ffd7499f1a3e322fbd" 898 | "checksum parking_lot_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0ad2c4d148942b3560034785bf19df586ebba53351e8c78f84984147d5795eef" 899 | "checksum percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de154f638187706bde41d9b4738748933d64e6b37bdbffc0b47a97d16a6ae356" 900 | "checksum phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "cb325642290f28ee14d8c6201159949a872f220c62af6e110a56ea914fbe42fc" 901 | "checksum phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d62594c0bb54c464f633175d502038177e90309daf2e0158be42ed5f023ce88f" 902 | "checksum phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6b07ffcc532ccc85e3afc45865469bf5d9e4ef5bfcf9622e3cfe80c2d275ec03" 903 | "checksum phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "07e24b0ca9643bdecd0632f2b3da6b1b89bbb0030e0b992afc1113b23a7bc2f2" 904 | "checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903" 905 | "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" 906 | "checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d" 907 | "checksum redox_syscall 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "9df6a71a1e67be2104410736b2389fb8e383c1d7e9e792d629ff13c02867147a" 908 | "checksum rustc-demangle 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3058a43ada2c2d0b92b3ae38007a2d0fa5e9db971be260e0171408a4ff471c95" 909 | "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" 910 | "checksum schannel 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "14a5f8491ae5fc8c51aded1f5806282a0218b4d69b1b76913a0559507e559b90" 911 | "checksum scoped-tls 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f417c22df063e9450888a7561788e9bd46d3bb3c1466435b4eccb903807f147d" 912 | "checksum secur32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3f412dfa83308d893101dd59c10d6fda8283465976c28c287c5c855bf8d216bc" 913 | "checksum security-framework 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "42ddf098d78d0b64564b23ee6345d07573e7d10e52ad86875d89ddf5f8378a02" 914 | "checksum security-framework-sys 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "5bacdada57ea62022500c457c8571c17dfb5e6240b7c8eac5916ffa8c7138a55" 915 | "checksum serde 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "433d7d9f8530d5a939ad5e0e72a6243d2e42a24804f70bf592c679363dcacb2f" 916 | "checksum serde_derive 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "7b707cf0d4cab852084f573058def08879bb467fda89d99052485e7d00edd624" 917 | "checksum serde_derive_internals 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37aee4e0da52d801acfbc0cc219eb1eda7142112339726e427926a6f6ee65d3a" 918 | "checksum serde_json 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "48b04779552e92037212c3615370f6bd57a40ebba7f20e554ff9f55e41a69a7b" 919 | "checksum serenity 0.3.0 (git+https://github.com/zeyla/serenity.git)" = "" 920 | "checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" 921 | "checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537" 922 | "checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" 923 | "checksum smallvec 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "26aa2afb825226fa29f0315de04d5a4af5fd44adadf837296accc01a49929724" 924 | "checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b" 925 | "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" 926 | "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" 927 | "checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6" 928 | "checksum thread-id 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2af4d6289a69a35c4d3aea737add39685f2784122c28119a7713165a63d68c9d" 929 | "checksum time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d788d3aa77bc0ef3e9621256885555368b47bd495c13dd2e7413c89f845520" 930 | "checksum tokio-core 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6a20ba4738d283cac7495ca36e045c80c2a8df3e05dd0909b17a06646af5a7ed" 931 | "checksum tokio-io 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c2c3ce9739f7387a0fa65b5421e81feae92e04d603f008898f4257790ce8c2db" 932 | "checksum toml 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b0601da6c97135c8d330c7a13a013ca6cd4143221b01de2f8d4edc50a9e551c7" 933 | "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" 934 | "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" 935 | "checksum typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6" 936 | "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" 937 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 938 | "checksum unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f" 939 | "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" 940 | "checksum unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f" 941 | "checksum url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb819346883532a271eb626deb43c4a1bb4c4dd47c519bd78137c3e72a4fe27" 942 | "checksum version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6b772017e347561807c1aa192438c5fd74242a670a6cffacc40f2defd1dc069d" 943 | "checksum websocket 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eb277e7f4c23dc49176f74ae200e77651764efb2c25f56ad2d22623b63826369" 944 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 945 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 946 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 947 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rust_bot" 3 | version = "0.1.0" 4 | authors = [ 5 | "Ivan Dardi ", 6 | "acdenisSK ", 7 | ] 8 | 9 | [dependencies] 10 | serde = "1.0.8" 11 | serde_derive = "1.0.8" 12 | error-chain = "0.8.1" 13 | log = "0.3.6" 14 | toml = "0.4.1" 15 | time = "0.1.37" 16 | chrono = "0.4.0" 17 | typemap = "0.3.3" 18 | num-integer = "0.1.32" 19 | 20 | # This is temporary, will be changed to 0.2.1 as it releases. 21 | [dependencies.serenity] 22 | git = "https://github.com/zeyla/serenity.git" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU AFFERO GENERAL PUBLIC LICENSE 2 | Version 3, 19 November 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU Affero General Public License is a free, copyleft license for 11 | software and other kinds of works, specifically designed to ensure 12 | cooperation with the community in the case of network server software. 13 | 14 | The licenses for most software and other practical works are designed 15 | to take away your freedom to share and change the works. By contrast, 16 | our General Public Licenses are intended to guarantee your freedom to 17 | share and change all versions of a program--to make sure it remains free 18 | software for all its users. 19 | 20 | When we speak of free software, we are referring to freedom, not 21 | price. Our General Public Licenses are designed to make sure that you 22 | have the freedom to distribute copies of free software (and charge for 23 | them if you wish), that you receive source code or can get it if you 24 | want it, that you can change the software or use pieces of it in new 25 | free programs, and that you know you can do these things. 26 | 27 | Developers that use our General Public Licenses protect your rights 28 | with two steps: (1) assert copyright on the software, and (2) offer 29 | you this License which gives you legal permission to copy, distribute 30 | and/or modify the software. 31 | 32 | A secondary benefit of defending all users' freedom is that 33 | improvements made in alternate versions of the program, if they 34 | receive widespread use, become available for other developers to 35 | incorporate. Many developers of free software are heartened and 36 | encouraged by the resulting cooperation. However, in the case of 37 | software used on network servers, this result may fail to come about. 38 | The GNU General Public License permits making a modified version and 39 | letting the public access it on a server without ever releasing its 40 | source code to the public. 41 | 42 | The GNU Affero General Public License is designed specifically to 43 | ensure that, in such cases, the modified source code becomes available 44 | to the community. It requires the operator of a network server to 45 | provide the source code of the modified version running there to the 46 | users of that server. Therefore, public use of a modified version, on 47 | a publicly accessible server, gives the public access to the source 48 | code of the modified version. 49 | 50 | An older license, called the Affero General Public License and 51 | published by Affero, was designed to accomplish similar goals. This is 52 | a different license, not a version of the Affero GPL, but Affero has 53 | released a new version of the Affero GPL which permits relicensing under 54 | this license. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | TERMS AND CONDITIONS 60 | 61 | 0. Definitions. 62 | 63 | "This License" refers to version 3 of the GNU Affero General Public License. 64 | 65 | "Copyright" also means copyright-like laws that apply to other kinds of 66 | works, such as semiconductor masks. 67 | 68 | "The Program" refers to any copyrightable work licensed under this 69 | License. Each licensee is addressed as "you". "Licensees" and 70 | "recipients" may be individuals or organizations. 71 | 72 | To "modify" a work means to copy from or adapt all or part of the work 73 | in a fashion requiring copyright permission, other than the making of an 74 | exact copy. The resulting work is called a "modified version" of the 75 | earlier work or a work "based on" the earlier work. 76 | 77 | A "covered work" means either the unmodified Program or a work based 78 | on the Program. 79 | 80 | To "propagate" a work means to do anything with it that, without 81 | permission, would make you directly or secondarily liable for 82 | infringement under applicable copyright law, except executing it on a 83 | computer or modifying a private copy. Propagation includes copying, 84 | distribution (with or without modification), making available to the 85 | public, and in some countries other activities as well. 86 | 87 | To "convey" a work means any kind of propagation that enables other 88 | parties to make or receive copies. Mere interaction with a user through 89 | a computer network, with no transfer of a copy, is not conveying. 90 | 91 | An interactive user interface displays "Appropriate Legal Notices" 92 | to the extent that it includes a convenient and prominently visible 93 | feature that (1) displays an appropriate copyright notice, and (2) 94 | tells the user that there is no warranty for the work (except to the 95 | extent that warranties are provided), that licensees may convey the 96 | work under this License, and how to view a copy of this License. If 97 | the interface presents a list of user commands or options, such as a 98 | menu, a prominent item in the list meets this criterion. 99 | 100 | 1. Source Code. 101 | 102 | The "source code" for a work means the preferred form of the work 103 | for making modifications to it. "Object code" means any non-source 104 | form of a work. 105 | 106 | A "Standard Interface" means an interface that either is an official 107 | standard defined by a recognized standards body, or, in the case of 108 | interfaces specified for a particular programming language, one that 109 | is widely used among developers working in that language. 110 | 111 | The "System Libraries" of an executable work include anything, other 112 | than the work as a whole, that (a) is included in the normal form of 113 | packaging a Major Component, but which is not part of that Major 114 | Component, and (b) serves only to enable use of the work with that 115 | Major Component, or to implement a Standard Interface for which an 116 | implementation is available to the public in source code form. A 117 | "Major Component", in this context, means a major essential component 118 | (kernel, window system, and so on) of the specific operating system 119 | (if any) on which the executable work runs, or a compiler used to 120 | produce the work, or an object code interpreter used to run it. 121 | 122 | The "Corresponding Source" for a work in object code form means all 123 | the source code needed to generate, install, and (for an executable 124 | work) run the object code and to modify the work, including scripts to 125 | control those activities. However, it does not include the work's 126 | System Libraries, or general-purpose tools or generally available free 127 | programs which are used unmodified in performing those activities but 128 | which are not part of the work. For example, Corresponding Source 129 | includes interface definition files associated with source files for 130 | the work, and the source code for shared libraries and dynamically 131 | linked subprograms that the work is specifically designed to require, 132 | such as by intimate data communication or control flow between those 133 | subprograms and other parts of the work. 134 | 135 | The Corresponding Source need not include anything that users 136 | can regenerate automatically from other parts of the Corresponding 137 | Source. 138 | 139 | The Corresponding Source for a work in source code form is that 140 | same work. 141 | 142 | 2. Basic Permissions. 143 | 144 | All rights granted under this License are granted for the term of 145 | copyright on the Program, and are irrevocable provided the stated 146 | conditions are met. This License explicitly affirms your unlimited 147 | permission to run the unmodified Program. The output from running a 148 | covered work is covered by this License only if the output, given its 149 | content, constitutes a covered work. This License acknowledges your 150 | rights of fair use or other equivalent, as provided by copyright law. 151 | 152 | You may make, run and propagate covered works that you do not 153 | convey, without conditions so long as your license otherwise remains 154 | in force. You may convey covered works to others for the sole purpose 155 | of having them make modifications exclusively for you, or provide you 156 | with facilities for running those works, provided that you comply with 157 | the terms of this License in conveying all material for which you do 158 | not control copyright. Those thus making or running the covered works 159 | for you must do so exclusively on your behalf, under your direction 160 | and control, on terms that prohibit them from making any copies of 161 | your copyrighted material outside their relationship with you. 162 | 163 | Conveying under any other circumstances is permitted solely under 164 | the conditions stated below. Sublicensing is not allowed; section 10 165 | makes it unnecessary. 166 | 167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 | 169 | No covered work shall be deemed part of an effective technological 170 | measure under any applicable law fulfilling obligations under article 171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 | similar laws prohibiting or restricting circumvention of such 173 | measures. 174 | 175 | When you convey a covered work, you waive any legal power to forbid 176 | circumvention of technological measures to the extent such circumvention 177 | is effected by exercising rights under this License with respect to 178 | the covered work, and you disclaim any intention to limit operation or 179 | modification of the work as a means of enforcing, against the work's 180 | users, your or third parties' legal rights to forbid circumvention of 181 | technological measures. 182 | 183 | 4. Conveying Verbatim Copies. 184 | 185 | You may convey verbatim copies of the Program's source code as you 186 | receive it, in any medium, provided that you conspicuously and 187 | appropriately publish on each copy an appropriate copyright notice; 188 | keep intact all notices stating that this License and any 189 | non-permissive terms added in accord with section 7 apply to the code; 190 | keep intact all notices of the absence of any warranty; and give all 191 | recipients a copy of this License along with the Program. 192 | 193 | You may charge any price or no price for each copy that you convey, 194 | and you may offer support or warranty protection for a fee. 195 | 196 | 5. Conveying Modified Source Versions. 197 | 198 | You may convey a work based on the Program, or the modifications to 199 | produce it from the Program, in the form of source code under the 200 | terms of section 4, provided that you also meet all of these conditions: 201 | 202 | a) The work must carry prominent notices stating that you modified 203 | it, and giving a relevant date. 204 | 205 | b) The work must carry prominent notices stating that it is 206 | released under this License and any conditions added under section 207 | 7. This requirement modifies the requirement in section 4 to 208 | "keep intact all notices". 209 | 210 | c) You must license the entire work, as a whole, under this 211 | License to anyone who comes into possession of a copy. This 212 | License will therefore apply, along with any applicable section 7 213 | additional terms, to the whole of the work, and all its parts, 214 | regardless of how they are packaged. This License gives no 215 | permission to license the work in any other way, but it does not 216 | invalidate such permission if you have separately received it. 217 | 218 | d) If the work has interactive user interfaces, each must display 219 | Appropriate Legal Notices; however, if the Program has interactive 220 | interfaces that do not display Appropriate Legal Notices, your 221 | work need not make them do so. 222 | 223 | A compilation of a covered work with other separate and independent 224 | works, which are not by their nature extensions of the covered work, 225 | and which are not combined with it such as to form a larger program, 226 | in or on a volume of a storage or distribution medium, is called an 227 | "aggregate" if the compilation and its resulting copyright are not 228 | used to limit the access or legal rights of the compilation's users 229 | beyond what the individual works permit. Inclusion of a covered work 230 | in an aggregate does not cause this License to apply to the other 231 | parts of the aggregate. 232 | 233 | 6. Conveying Non-Source Forms. 234 | 235 | You may convey a covered work in object code form under the terms 236 | of sections 4 and 5, provided that you also convey the 237 | machine-readable Corresponding Source under the terms of this License, 238 | in one of these ways: 239 | 240 | a) Convey the object code in, or embodied in, a physical product 241 | (including a physical distribution medium), accompanied by the 242 | Corresponding Source fixed on a durable physical medium 243 | customarily used for software interchange. 244 | 245 | b) Convey the object code in, or embodied in, a physical product 246 | (including a physical distribution medium), accompanied by a 247 | written offer, valid for at least three years and valid for as 248 | long as you offer spare parts or customer support for that product 249 | model, to give anyone who possesses the object code either (1) a 250 | copy of the Corresponding Source for all the software in the 251 | product that is covered by this License, on a durable physical 252 | medium customarily used for software interchange, for a price no 253 | more than your reasonable cost of physically performing this 254 | conveying of source, or (2) access to copy the 255 | Corresponding Source from a network server at no charge. 256 | 257 | c) Convey individual copies of the object code with a copy of the 258 | written offer to provide the Corresponding Source. This 259 | alternative is allowed only occasionally and noncommercially, and 260 | only if you received the object code with such an offer, in accord 261 | with subsection 6b. 262 | 263 | d) Convey the object code by offering access from a designated 264 | place (gratis or for a charge), and offer equivalent access to the 265 | Corresponding Source in the same way through the same place at no 266 | further charge. You need not require recipients to copy the 267 | Corresponding Source along with the object code. If the place to 268 | copy the object code is a network server, the Corresponding Source 269 | may be on a different server (operated by you or a third party) 270 | that supports equivalent copying facilities, provided you maintain 271 | clear directions next to the object code saying where to find the 272 | Corresponding Source. Regardless of what server hosts the 273 | Corresponding Source, you remain obligated to ensure that it is 274 | available for as long as needed to satisfy these requirements. 275 | 276 | e) Convey the object code using peer-to-peer transmission, provided 277 | you inform other peers where the object code and Corresponding 278 | Source of the work are being offered to the general public at no 279 | charge under subsection 6d. 280 | 281 | A separable portion of the object code, whose source code is excluded 282 | from the Corresponding Source as a System Library, need not be 283 | included in conveying the object code work. 284 | 285 | A "User Product" is either (1) a "consumer product", which means any 286 | tangible personal property which is normally used for personal, family, 287 | or household purposes, or (2) anything designed or sold for incorporation 288 | into a dwelling. In determining whether a product is a consumer product, 289 | doubtful cases shall be resolved in favor of coverage. For a particular 290 | product received by a particular user, "normally used" refers to a 291 | typical or common use of that class of product, regardless of the status 292 | of the particular user or of the way in which the particular user 293 | actually uses, or expects or is expected to use, the product. A product 294 | is a consumer product regardless of whether the product has substantial 295 | commercial, industrial or non-consumer uses, unless such uses represent 296 | the only significant mode of use of the product. 297 | 298 | "Installation Information" for a User Product means any methods, 299 | procedures, authorization keys, or other information required to install 300 | and execute modified versions of a covered work in that User Product from 301 | a modified version of its Corresponding Source. The information must 302 | suffice to ensure that the continued functioning of the modified object 303 | code is in no case prevented or interfered with solely because 304 | modification has been made. 305 | 306 | If you convey an object code work under this section in, or with, or 307 | specifically for use in, a User Product, and the conveying occurs as 308 | part of a transaction in which the right of possession and use of the 309 | User Product is transferred to the recipient in perpetuity or for a 310 | fixed term (regardless of how the transaction is characterized), the 311 | Corresponding Source conveyed under this section must be accompanied 312 | by the Installation Information. But this requirement does not apply 313 | if neither you nor any third party retains the ability to install 314 | modified object code on the User Product (for example, the work has 315 | been installed in ROM). 316 | 317 | The requirement to provide Installation Information does not include a 318 | requirement to continue to provide support service, warranty, or updates 319 | for a work that has been modified or installed by the recipient, or for 320 | the User Product in which it has been modified or installed. Access to a 321 | network may be denied when the modification itself materially and 322 | adversely affects the operation of the network or violates the rules and 323 | protocols for communication across the network. 324 | 325 | Corresponding Source conveyed, and Installation Information provided, 326 | in accord with this section must be in a format that is publicly 327 | documented (and with an implementation available to the public in 328 | source code form), and must require no special password or key for 329 | unpacking, reading or copying. 330 | 331 | 7. Additional Terms. 332 | 333 | "Additional permissions" are terms that supplement the terms of this 334 | License by making exceptions from one or more of its conditions. 335 | Additional permissions that are applicable to the entire Program shall 336 | be treated as though they were included in this License, to the extent 337 | that they are valid under applicable law. If additional permissions 338 | apply only to part of the Program, that part may be used separately 339 | under those permissions, but the entire Program remains governed by 340 | this License without regard to the additional permissions. 341 | 342 | When you convey a copy of a covered work, you may at your option 343 | remove any additional permissions from that copy, or from any part of 344 | it. (Additional permissions may be written to require their own 345 | removal in certain cases when you modify the work.) You may place 346 | additional permissions on material, added by you to a covered work, 347 | for which you have or can give appropriate copyright permission. 348 | 349 | Notwithstanding any other provision of this License, for material you 350 | add to a covered work, you may (if authorized by the copyright holders of 351 | that material) supplement the terms of this License with terms: 352 | 353 | a) Disclaiming warranty or limiting liability differently from the 354 | terms of sections 15 and 16 of this License; or 355 | 356 | b) Requiring preservation of specified reasonable legal notices or 357 | author attributions in that material or in the Appropriate Legal 358 | Notices displayed by works containing it; or 359 | 360 | c) Prohibiting misrepresentation of the origin of that material, or 361 | requiring that modified versions of such material be marked in 362 | reasonable ways as different from the original version; or 363 | 364 | d) Limiting the use for publicity purposes of names of licensors or 365 | authors of the material; or 366 | 367 | e) Declining to grant rights under trademark law for use of some 368 | trade names, trademarks, or service marks; or 369 | 370 | f) Requiring indemnification of licensors and authors of that 371 | material by anyone who conveys the material (or modified versions of 372 | it) with contractual assumptions of liability to the recipient, for 373 | any liability that these contractual assumptions directly impose on 374 | those licensors and authors. 375 | 376 | All other non-permissive additional terms are considered "further 377 | restrictions" within the meaning of section 10. If the Program as you 378 | received it, or any part of it, contains a notice stating that it is 379 | governed by this License along with a term that is a further 380 | restriction, you may remove that term. If a license document contains 381 | a further restriction but permits relicensing or conveying under this 382 | License, you may add to a covered work material governed by the terms 383 | of that license document, provided that the further restriction does 384 | not survive such relicensing or conveying. 385 | 386 | If you add terms to a covered work in accord with this section, you 387 | must place, in the relevant source files, a statement of the 388 | additional terms that apply to those files, or a notice indicating 389 | where to find the applicable terms. 390 | 391 | Additional terms, permissive or non-permissive, may be stated in the 392 | form of a separately written license, or stated as exceptions; 393 | the above requirements apply either way. 394 | 395 | 8. Termination. 396 | 397 | You may not propagate or modify a covered work except as expressly 398 | provided under this License. Any attempt otherwise to propagate or 399 | modify it is void, and will automatically terminate your rights under 400 | this License (including any patent licenses granted under the third 401 | paragraph of section 11). 402 | 403 | However, if you cease all violation of this License, then your 404 | license from a particular copyright holder is reinstated (a) 405 | provisionally, unless and until the copyright holder explicitly and 406 | finally terminates your license, and (b) permanently, if the copyright 407 | holder fails to notify you of the violation by some reasonable means 408 | prior to 60 days after the cessation. 409 | 410 | Moreover, your license from a particular copyright holder is 411 | reinstated permanently if the copyright holder notifies you of the 412 | violation by some reasonable means, this is the first time you have 413 | received notice of violation of this License (for any work) from that 414 | copyright holder, and you cure the violation prior to 30 days after 415 | your receipt of the notice. 416 | 417 | Termination of your rights under this section does not terminate the 418 | licenses of parties who have received copies or rights from you under 419 | this License. If your rights have been terminated and not permanently 420 | reinstated, you do not qualify to receive new licenses for the same 421 | material under section 10. 422 | 423 | 9. Acceptance Not Required for Having Copies. 424 | 425 | You are not required to accept this License in order to receive or 426 | run a copy of the Program. Ancillary propagation of a covered work 427 | occurring solely as a consequence of using peer-to-peer transmission 428 | to receive a copy likewise does not require acceptance. However, 429 | nothing other than this License grants you permission to propagate or 430 | modify any covered work. These actions infringe copyright if you do 431 | not accept this License. Therefore, by modifying or propagating a 432 | covered work, you indicate your acceptance of this License to do so. 433 | 434 | 10. Automatic Licensing of Downstream Recipients. 435 | 436 | Each time you convey a covered work, the recipient automatically 437 | receives a license from the original licensors, to run, modify and 438 | propagate that work, subject to this License. You are not responsible 439 | for enforcing compliance by third parties with this License. 440 | 441 | An "entity transaction" is a transaction transferring control of an 442 | organization, or substantially all assets of one, or subdividing an 443 | organization, or merging organizations. If propagation of a covered 444 | work results from an entity transaction, each party to that 445 | transaction who receives a copy of the work also receives whatever 446 | licenses to the work the party's predecessor in interest had or could 447 | give under the previous paragraph, plus a right to possession of the 448 | Corresponding Source of the work from the predecessor in interest, if 449 | the predecessor has it or can get it with reasonable efforts. 450 | 451 | You may not impose any further restrictions on the exercise of the 452 | rights granted or affirmed under this License. For example, you may 453 | not impose a license fee, royalty, or other charge for exercise of 454 | rights granted under this License, and you may not initiate litigation 455 | (including a cross-claim or counterclaim in a lawsuit) alleging that 456 | any patent claim is infringed by making, using, selling, offering for 457 | sale, or importing the Program or any portion of it. 458 | 459 | 11. Patents. 460 | 461 | A "contributor" is a copyright holder who authorizes use under this 462 | License of the Program or a work on which the Program is based. The 463 | work thus licensed is called the contributor's "contributor version". 464 | 465 | A contributor's "essential patent claims" are all patent claims 466 | owned or controlled by the contributor, whether already acquired or 467 | hereafter acquired, that would be infringed by some manner, permitted 468 | by this License, of making, using, or selling its contributor version, 469 | but do not include claims that would be infringed only as a 470 | consequence of further modification of the contributor version. For 471 | purposes of this definition, "control" includes the right to grant 472 | patent sublicenses in a manner consistent with the requirements of 473 | this License. 474 | 475 | Each contributor grants you a non-exclusive, worldwide, royalty-free 476 | patent license under the contributor's essential patent claims, to 477 | make, use, sell, offer for sale, import and otherwise run, modify and 478 | propagate the contents of its contributor version. 479 | 480 | In the following three paragraphs, a "patent license" is any express 481 | agreement or commitment, however denominated, not to enforce a patent 482 | (such as an express permission to practice a patent or covenant not to 483 | sue for patent infringement). To "grant" such a patent license to a 484 | party means to make such an agreement or commitment not to enforce a 485 | patent against the party. 486 | 487 | If you convey a covered work, knowingly relying on a patent license, 488 | and the Corresponding Source of the work is not available for anyone 489 | to copy, free of charge and under the terms of this License, through a 490 | publicly available network server or other readily accessible means, 491 | then you must either (1) cause the Corresponding Source to be so 492 | available, or (2) arrange to deprive yourself of the benefit of the 493 | patent license for this particular work, or (3) arrange, in a manner 494 | consistent with the requirements of this License, to extend the patent 495 | license to downstream recipients. "Knowingly relying" means you have 496 | actual knowledge that, but for the patent license, your conveying the 497 | covered work in a country, or your recipient's use of the covered work 498 | in a country, would infringe one or more identifiable patents in that 499 | country that you have reason to believe are valid. 500 | 501 | If, pursuant to or in connection with a single transaction or 502 | arrangement, you convey, or propagate by procuring conveyance of, a 503 | covered work, and grant a patent license to some of the parties 504 | receiving the covered work authorizing them to use, propagate, modify 505 | or convey a specific copy of the covered work, then the patent license 506 | you grant is automatically extended to all recipients of the covered 507 | work and works based on it. 508 | 509 | A patent license is "discriminatory" if it does not include within 510 | the scope of its coverage, prohibits the exercise of, or is 511 | conditioned on the non-exercise of one or more of the rights that are 512 | specifically granted under this License. You may not convey a covered 513 | work if you are a party to an arrangement with a third party that is 514 | in the business of distributing software, under which you make payment 515 | to the third party based on the extent of your activity of conveying 516 | the work, and under which the third party grants, to any of the 517 | parties who would receive the covered work from you, a discriminatory 518 | patent license (a) in connection with copies of the covered work 519 | conveyed by you (or copies made from those copies), or (b) primarily 520 | for and in connection with specific products or compilations that 521 | contain the covered work, unless you entered into that arrangement, 522 | or that patent license was granted, prior to 28 March 2007. 523 | 524 | Nothing in this License shall be construed as excluding or limiting 525 | any implied license or other defenses to infringement that may 526 | otherwise be available to you under applicable patent law. 527 | 528 | 12. No Surrender of Others' Freedom. 529 | 530 | If conditions are imposed on you (whether by court order, agreement or 531 | otherwise) that contradict the conditions of this License, they do not 532 | excuse you from the conditions of this License. If you cannot convey a 533 | covered work so as to satisfy simultaneously your obligations under this 534 | License and any other pertinent obligations, then as a consequence you may 535 | not convey it at all. For example, if you agree to terms that obligate you 536 | to collect a royalty for further conveying from those to whom you convey 537 | the Program, the only way you could satisfy both those terms and this 538 | License would be to refrain entirely from conveying the Program. 539 | 540 | 13. Remote Network Interaction; Use with the GNU General Public License. 541 | 542 | Notwithstanding any other provision of this License, if you modify the 543 | Program, your modified version must prominently offer all users 544 | interacting with it remotely through a computer network (if your version 545 | supports such interaction) an opportunity to receive the Corresponding 546 | Source of your version by providing access to the Corresponding Source 547 | from a network server at no charge, through some standard or customary 548 | means of facilitating copying of software. This Corresponding Source 549 | shall include the Corresponding Source for any work covered by version 3 550 | of the GNU General Public License that is incorporated pursuant to the 551 | following paragraph. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the work with which it is combined will remain governed by version 559 | 3 of the GNU General Public License. 560 | 561 | 14. Revised Versions of this License. 562 | 563 | The Free Software Foundation may publish revised and/or new versions of 564 | the GNU Affero General Public License from time to time. Such new versions 565 | will be similar in spirit to the present version, but may differ in detail to 566 | address new problems or concerns. 567 | 568 | Each version is given a distinguishing version number. If the 569 | Program specifies that a certain numbered version of the GNU Affero General 570 | Public License "or any later version" applies to it, you have the 571 | option of following the terms and conditions either of that numbered 572 | version or of any later version published by the Free Software 573 | Foundation. If the Program does not specify a version number of the 574 | GNU Affero General Public License, you may choose any version ever published 575 | by the Free Software Foundation. 576 | 577 | If the Program specifies that a proxy can decide which future 578 | versions of the GNU Affero General Public License can be used, that proxy's 579 | public statement of acceptance of a version permanently authorizes you 580 | to choose that version for the Program. 581 | 582 | Later license versions may give you additional or different 583 | permissions. However, no additional obligations are imposed on any 584 | author or copyright holder as a result of your choosing to follow a 585 | later version. 586 | 587 | 15. Disclaimer of Warranty. 588 | 589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 | 598 | 16. Limitation of Liability. 599 | 600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 | SUCH DAMAGES. 609 | 610 | 17. Interpretation of Sections 15 and 16. 611 | 612 | If the disclaimer of warranty and limitation of liability provided 613 | above cannot be given local legal effect according to their terms, 614 | reviewing courts shall apply local law that most closely approximates 615 | an absolute waiver of all civil liability in connection with the 616 | Program, unless a warranty or assumption of liability accompanies a 617 | copy of the Program in return for a fee. 618 | 619 | END OF TERMS AND CONDITIONS 620 | 621 | How to Apply These Terms to Your New Programs 622 | 623 | If you develop a new program, and you want it to be of the greatest 624 | possible use to the public, the best way to achieve this is to make it 625 | free software which everyone can redistribute and change under these terms. 626 | 627 | To do so, attach the following notices to the program. It is safest 628 | to attach them to the start of each source file to most effectively 629 | state the exclusion of warranty; and each file should have at least 630 | the "copyright" line and a pointer to where the full notice is found. 631 | 632 | 633 | Copyright (C) 634 | 635 | This program is free software: you can redistribute it and/or modify 636 | it under the terms of the GNU Affero General Public License as published 637 | by the Free Software Foundation, either version 3 of the License, or 638 | (at your option) any later version. 639 | 640 | This program is distributed in the hope that it will be useful, 641 | but WITHOUT ANY WARRANTY; without even the implied warranty of 642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 | GNU Affero General Public License for more details. 644 | 645 | You should have received a copy of the GNU Affero General Public License 646 | along with this program. If not, see . 647 | 648 | Also add information on how to contact you by electronic and paper mail. 649 | 650 | If your software can interact with users remotely through a computer 651 | network, you should also make sure that it provides a way for users to 652 | get its source. For example, if your program is a web application, its 653 | interface could display a "Source" link that leads users to an archive 654 | of the code. There are many ways you could offer source, and different 655 | solutions will be better for different programs; see section 13 for the 656 | specific requirements. 657 | 658 | You should also get your employer (if you work as a programmer) or school, 659 | if any, to sign a "copyright disclaimer" for the program, if necessary. 660 | For more information on this, and how to apply and follow the GNU AGPL, see 661 | . 662 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RustBot 2 | A Discord bot for the Rust server, written in Rust. 3 | -------------------------------------------------------------------------------- /src/commands/meta.rs: -------------------------------------------------------------------------------- 1 | use serenity::utils::Colour; 2 | use uptimer::UptimerKey; 3 | 4 | command!(uptime(ctx, msg) { 5 | let uptime_string = { 6 | let data = ctx.data.lock(); 7 | let uptimer = data.get::().expect("Failed to get Uptimer"); 8 | uptimer.uptime_string() 9 | }; 10 | let result = msg.channel_id.send_message(|cm| cm 11 | .embed(|ce| ce 12 | .title("Uptime") 13 | .description(&uptime_string) 14 | .color(Colour::blue())) 15 | ); 16 | if result.is_err() { 17 | return Err("Failed send message".to_owned()); 18 | } 19 | }); 20 | 21 | command!(ping(_ctx, msg) { 22 | let result = msg.channel_id.send_message(|m| m.content("Pong!")); 23 | if result.is_err() { 24 | return Err("Failed to send message".to_owned()); 25 | } 26 | }); 27 | 28 | command!(info(_ctx, msg) { 29 | if let Some(guild) = msg.guild() { 30 | let guild = guild.read().expect("Failed to acquire read lock"); 31 | if let Some(member) = guild.members.get(&msg.author.id) { 32 | // NOTE: \u200b is zero-width whitespace. 33 | let mut roles = "@every\u{200b}one".to_owned(); 34 | let mut iter = member.roles.iter(); 35 | while let Some(role_id) = iter.next() { 36 | if let Some(role) = role_id.find() { 37 | roles.push_str(", "); 38 | roles.push_str(&role.name); 39 | } else { 40 | // NOTE: I'm unsure if it's an error when role_id doesn't have corresponding 41 | // role. For now I consider this error. 42 | return Err("Failed to get Role for RoleId".to_owned()); 43 | } 44 | } 45 | let joined_at = { 46 | if let Some(joined_at) = member.joined_at.as_ref() { 47 | joined_at.naive_utc().format("%c") 48 | } else { 49 | return Err("Failed to get Member's joined at".to_owned()); 50 | } 51 | }; 52 | let avatar_url = msg.author.face(); 53 | let id = msg.author.id.0.to_string(); 54 | let nick = member.nick.as_ref().unwrap_or_else(|| &msg.author.name); 55 | let dtag = msg.author.tag(); 56 | let created_at = msg.author.created_at().format("%c").to_string(); 57 | let footer_text = format!("Member since {}", joined_at); 58 | let result = msg.channel_id.send_message(|cm| cm.embed(|ce| 59 | ce.author(|cea| cea.name(&dtag).icon_url(&avatar_url)) 60 | .title("Info") 61 | .field(|cef| cef.inline(true).name("Id").value(&id)) 62 | .field(|cef| cef.inline(true).name("Current name").value(nick)) 63 | .field(|cef| cef.inline(true).name("Created at").value(&created_at)) 64 | .field(|cef| cef.inline(true).name("Roles").value(&roles)) 65 | .footer(|cef| cef.text(&footer_text)) 66 | .image(&avatar_url) 67 | .color(Colour::blue()) 68 | )); 69 | if result.is_err() { 70 | return Err("Failed to send message".to_owned()) 71 | } 72 | } 73 | } 74 | }); 75 | -------------------------------------------------------------------------------- /src/commands/mod.rs: -------------------------------------------------------------------------------- 1 | mod meta; 2 | 3 | // Commands 4 | pub use self::meta::{uptime, ping, info}; 5 | -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | use std::fs::File; 2 | use std::io::Read; 3 | use std::path::Path; 4 | 5 | use toml; 6 | 7 | #[derive(Clone, Debug, Deserialize, Serialize)] 8 | pub struct Config { 9 | pub token: String, 10 | } 11 | 12 | impl Config { 13 | pub fn from_file>(name: P) -> ::Result { 14 | let mut file = File::open(name)?; 15 | let mut toml_doc = String::new(); 16 | file.read_to_string(&mut toml_doc)?; 17 | Ok(toml::from_str(&toml_doc)?) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/error.rs: -------------------------------------------------------------------------------- 1 | use std::io::Error as IoError; 2 | use log::SetLoggerError; 3 | use serenity::Error as SerenityError; 4 | use toml::de::Error as TomlParseError; 5 | 6 | error_chain! { 7 | foreign_links { 8 | TomlParseError(TomlParseError); 9 | Io(IoError); 10 | SetLogger(SetLoggerError); 11 | Serenity(SerenityError); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/logging.rs: -------------------------------------------------------------------------------- 1 | use log::{Log, LogRecord, LogLevel, LogMetadata, LogLevelFilter}; 2 | use std::io::{self, Write}; 3 | use error::ResultExt; 4 | 5 | 6 | pub struct Logger; 7 | 8 | impl Logger { 9 | pub fn init() -> ::Result<()> { 10 | Ok(::log::set_logger(|max_log_filter| { 11 | max_log_filter.set(LogLevelFilter::Info); 12 | Box::new(Logger) 13 | })?) 14 | } 15 | } 16 | 17 | impl Log for Logger { 18 | fn enabled(&self, metadata: &LogMetadata) -> bool { 19 | metadata.level() <= LogLevel::Info 20 | } 21 | 22 | fn log(&self, record: &LogRecord) { 23 | if !self.enabled(record.metadata()) { 24 | return; 25 | } 26 | writeln!(io::stderr(), "[{}]: {}", record.level(), record.args()) 27 | .chain_err(|| "failed writing to stderr") 28 | .unwrap(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![recursion_limit = "1024"] 2 | 3 | #[macro_use] 4 | extern crate serde_derive; 5 | extern crate serde; 6 | #[macro_use] 7 | extern crate error_chain; 8 | #[macro_use] 9 | extern crate log; 10 | #[macro_use] 11 | extern crate serenity; 12 | extern crate toml; 13 | extern crate time; 14 | extern crate typemap; 15 | extern crate num_integer; 16 | 17 | mod error; 18 | mod config; 19 | mod logging; 20 | mod commands; 21 | mod uptimer; 22 | 23 | use error::Result; 24 | use config::Config; 25 | use logging::Logger; 26 | use uptimer::{UptimerKey, Uptimer}; 27 | 28 | use serenity::prelude::*; 29 | use serenity::ext::framework::help_commands; 30 | 31 | struct Handler; 32 | 33 | impl EventHandler for Handler {} 34 | 35 | fn main() { 36 | std::process::exit(match actual_main() { 37 | Ok(_) => 0, 38 | Err(err) => { 39 | error!("Error in main: {}", err); 40 | 1 41 | } 42 | }); 43 | } 44 | 45 | 46 | fn actual_main() -> Result<()> { 47 | // todo: add commands 48 | Logger::init()?; 49 | 50 | let config = Config::from_file("config.toml")?; 51 | 52 | let mut client = Client::new(&config.token, Handler); 53 | 54 | { 55 | let mut data = client.data.lock(); 56 | data.insert::(Uptimer::new()); 57 | } 58 | 59 | #[cfg_attr(rustfmt, rustfmt_skip)] 60 | client.with_framework(|f| f 61 | .configure(|c| c 62 | .prefix("??") 63 | .on_mention(true)) 64 | .before(|_ctx, msg, command_name| { 65 | info!("{} in {}: {}", msg.author.name, msg.channel_id.name().expect("Channel Name"), command_name); 66 | true 67 | }) 68 | .group("Help", |g| g 69 | .command("help", |c| c 70 | .exec_help(help_commands::with_embeds) 71 | .desc("Displays a list of the bots command with embeds.")) 72 | .command("helpp", |c| c 73 | .exec_help(help_commands::plain) 74 | .desc("Displays a list of the bots command in plain text."))) 75 | .group("Meta", |g| g 76 | .command("ping", |c| c 77 | .exec(commands::ping) 78 | .desc("Checks for connection speed.")) 79 | .command("uptime", |c| c 80 | .exec(commands::uptime) 81 | .desc("Tells you how long the bot has been up for.")) 82 | .command("info", |c| c 83 | .exec(commands::info) 84 | .desc("Displays member info"))) 85 | ); 86 | 87 | client.start()?; 88 | 89 | Ok(()) 90 | } 91 | -------------------------------------------------------------------------------- /src/uptimer.rs: -------------------------------------------------------------------------------- 1 | use time::{self, Tm}; 2 | use num_integer::Integer; 3 | use typemap::Key; 4 | 5 | pub struct UptimerKey; 6 | 7 | impl Key for UptimerKey { 8 | type Value = Uptimer; 9 | } 10 | 11 | pub struct Uptimer { 12 | started_at: Tm, 13 | } 14 | 15 | impl Uptimer { 16 | pub fn new() -> Uptimer { 17 | Uptimer { 18 | started_at: time::now_utc(), 19 | } 20 | } 21 | pub fn uptime_string(&self) -> String { 22 | let seconds = (time::now_utc() - self.started_at).num_seconds(); 23 | let (minutes, seconds) = seconds.div_rem(&60); 24 | let (hours, minutes) = minutes.div_rem(&60); 25 | let (days, hours) = hours.div_rem(&24); 26 | format!("{}d {}h {}m {}s", days, hours, minutes, seconds) 27 | } 28 | } 29 | --------------------------------------------------------------------------------