From 23a17143b418087e9cb9aa5a5989c25cea5d92ef Mon Sep 17 00:00:00 2001 From: Sakuhl <2012collector@gmail.com> Date: Mon, 26 Feb 2018 13:24:25 +0100 Subject: [PATCH] Show online members --- src/commands/guild.rs | 46 +++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/src/commands/guild.rs b/src/commands/guild.rs index 1ba0dbf..51a9a4e 100644 --- a/src/commands/guild.rs +++ b/src/commands/guild.rs @@ -10,6 +10,8 @@ use ::serde_json::Value; use failure::Error; +use ::std::collections::HashSet; + use ::ResponseError; pub fn wc_guild(command: &str, msg: &Message) -> Result<(), Error> { @@ -65,40 +67,42 @@ pub fn wc_guild(command: &str, msg: &Message) -> Result<(), Error> { Ok(message) })().unwrap_or_else(|e| format!("\nError getting territories: {}", e)); + let online_players = (|| { + let resp = reqwest::get("https://api.wynncraft.com/public_api.php?action=onlinePlayers")?; + + let players: Value = serde_json::from_reader(resp)?; + let mut online_players = HashSet::new(); + + for key in players.as_object().unwrap().keys() { + if key == "request" { + continue; + } + let players = players.get(key).unwrap().as_array().unwrap(); + for p in players { + online_players.insert(p.as_str().unwrap().to_owned()); + } + } + let guild_online_players = guild.members.iter().filter(|x| online_players.contains(&x.name)).map(|x| &*x.name).collect::>().as_slice().join(", "); + Ok(guild_online_players) + })().unwrap_or_else(|e: Error| format!("\nError getting online players: {}", e)); + let full_msg = format!( "**Guild**: {} **prefix**: {} **Created**: {} **Level**: {} -**Members**: {}", +**Members**: {} +**Online members**: {}", guild.name, guild.prefix, guild.created_friendly, guild.level, - guild.members.len() + guild.members.len(), + online_players ) + &message; for part in full_msg.split('\n').collect::>().chunks(48) { msg.channel_id.say(part.join("\n"))?; } - /* - msg.channel_id.say( - format!( -"**Guild**: {} -**prefix**: {} -**Created**: {} -**Level**: {} -**Members**: {} -**Territories**: {}", - guild.name, - guild.prefix, - guild.created_friendly, - guild.level, - guild.members.len(), - territories_count - ) - )?; - }; - */ Ok(()) }