oof
This commit is contained in:
parent
72df65e295
commit
777e941469
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
/target
|
||||
**/*.rs.bk
|
||||
.idea/
|
1908
Cargo.lock
generated
Normal file
1908
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
22
Cargo.toml
Normal file
22
Cargo.toml
Normal file
|
@ -0,0 +1,22 @@
|
|||
[package]
|
||||
name = "aoclog"
|
||||
version = "0.1.0"
|
||||
authors = ["Julius de Jeu <julius@voidcorp.nl>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
reqwest = "0.9"
|
||||
|
||||
[dependencies.serenity]
|
||||
default-features = false
|
||||
features = [
|
||||
"model",
|
||||
"http",
|
||||
"utils",
|
||||
"rustls_backend"
|
||||
]
|
||||
version = "0.7"
|
76
src/main.rs
Normal file
76
src/main.rs
Normal file
|
@ -0,0 +1,76 @@
|
|||
extern crate reqwest;
|
||||
extern crate serde;
|
||||
extern crate serde_json;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::str::FromStr;
|
||||
|
||||
use serde::{Deserialize, Deserializer};
|
||||
use serde::de::{self};
|
||||
use serde::export::fmt::Display;
|
||||
use serde_json::Value;
|
||||
|
||||
#[derive(Deserialize, PartialEq, Debug)]
|
||||
struct AOCRequest {
|
||||
event: String,
|
||||
owner_id: String,
|
||||
members: HashMap<u32, User>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, PartialEq, Debug)]
|
||||
struct User {
|
||||
global_score: u32,
|
||||
name: Value,
|
||||
stars: u8,
|
||||
completion_day_level: HashMap<String, HashMap<String, Star>>,
|
||||
last_star_ts: Value,
|
||||
#[serde(deserialize_with = "from_str")]
|
||||
id: u64,
|
||||
local_score: u64,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Eq, PartialEq, Debug)]
|
||||
struct Star {
|
||||
#[serde(deserialize_with = "from_str")]
|
||||
get_star_ts: u64
|
||||
}
|
||||
|
||||
fn from_str<'de, T, D>(deserializer: D) -> Result<T, D::Error>
|
||||
where T: FromStr,
|
||||
T::Err: Display,
|
||||
D: Deserializer<'de>
|
||||
{
|
||||
let s = String::deserialize(deserializer)?;
|
||||
T::from_str(&s).map_err(de::Error::custom)
|
||||
}
|
||||
|
||||
|
||||
fn main() {
|
||||
let client = reqwest::Client::new();
|
||||
let json: AOCRequest = client.get("https://adventofcode.com/2019/leaderboard/private/view/356604.json")
|
||||
.header("Cookie",
|
||||
"session=lol")
|
||||
.send().expect("Failed to send request").json().expect("Error parsing response");
|
||||
//"https://discordapp.com/api/webhooks/651520885349548044/EY0yz2fvWiViMr_mr1AhgTQ2xikC32U_ncEnpAy4sy7zlsq8hDFufYuynUjw22vbLHlQ"
|
||||
let id = 651_520_885_349_548_044;
|
||||
let token = "EY0yz2fvWiViMr_mr1AhgTQ2xikC32U_ncEnpAy4sy7zlsq8hDFufYuynUjw22vbLHlQ";
|
||||
let http = serenity::http::Http::default();
|
||||
let mut wh = http.as_ref().get_webhook_with_token(id, token).expect("Cannot create webhook");
|
||||
|
||||
wh.edit(&http, Some("AOCHook"), Some(include_str!("./faviconlife"))).expect("oof?");
|
||||
let mut res: Vec<&User> = json.members.iter().filter_map(|(_k, v)| {
|
||||
if v.name.is_string() {
|
||||
return Some(v);
|
||||
}
|
||||
None
|
||||
}).collect();
|
||||
res.sort_by(|x, y| x.local_score.cmp(&y.local_score).reverse());
|
||||
|
||||
let k = res.iter().filter_map(|v| v.name.as_str()).max_by_key(|s| s.len()).unwrap_or("").len() + 2;
|
||||
let l: Vec<String> = res.iter().enumerate().map(|(i, u)| format!("{:0>2} - {:^len$} - {:0>4}", i + 1, u.name.as_str().unwrap(), u.local_score, len = k)).collect();
|
||||
|
||||
wh.execute(&http, false, |w| {
|
||||
w.content(format!("```{}```", l.join("\n")));
|
||||
w
|
||||
}).expect("oof");
|
||||
}
|
Loading…
Reference in a new issue