diff options
Diffstat (limited to 'src/game.rs')
| -rw-r--r-- | src/game.rs | 80 |
1 files changed, 54 insertions, 26 deletions
diff --git a/src/game.rs b/src/game.rs index 362e304..47ae18c 100644 --- a/src/game.rs +++ b/src/game.rs @@ -10,11 +10,16 @@ use std::{ }, }; +use anyhow::{ + anyhow, + Error, +}; use fnv::{ FnvHashMap, FnvHashSet, }; use itertools::Itertools; +use lazy_static::lazy_static; use log::{ debug, error, @@ -29,7 +34,10 @@ use serenity::{ }, ArgError, Args, + CommandError, + CommandResult, }, + futures::TryFutureExt, model::{ channel::Message, guild::Guild, @@ -39,21 +47,13 @@ use serenity::{ }; use url::Url; -use anyhow::{ - anyhow, - Error, -}; -use lazy_static::lazy_static; -use serenity::framework::standard::CommandResult; - use crate::{ + bot::HttpKey, util, Result, CONFIG, }; -pub use self::Game as GROUP; - #[group] #[prefix = "game"] #[commands(game, installedgame, ownedgame, updategaem)] @@ -106,7 +106,7 @@ lazy_static! { }) .collect::<FnvHashMap<_, _>>(); - log::info!( + info!( "loaded user info for {} users ({:#?})", result.len(), result.keys().collect::<Vec<_>>() @@ -164,13 +164,13 @@ impl FromStr for GameStatus { #[command] #[aliases("installedgaem")] pub async fn installedgame(ctx: &Context, msg: &Message, args: Args) -> CommandResult { - _game(ctx, msg, args, GameStatus::Installed) + _game(ctx, msg, args, GameStatus::Installed).await } #[command] #[aliases("ownedgaem")] pub async fn ownedgame(ctx: &Context, msg: &Message, args: Args) -> CommandResult { - _game(ctx, msg, args, GameStatus::NotInstalled) + _game(ctx, msg, args, GameStatus::NotInstalled).await } #[derive(Copy, Clone, Debug, thiserror::Error, PartialEq, Eq, Hash)] @@ -315,7 +315,11 @@ async fn _game( return Ok(()); } - let data = load_spreadsheet().await?; + let client = { + let data = ctx.data.read().await; + data.get::<HttpKey>().unwrap().clone() + }; + let data = load_spreadsheet(&client).await?; let user_indexes = (0..data.len()) .filter_map(|i| { @@ -395,7 +399,7 @@ async fn _game( Ok(()) } -async fn load_spreadsheet() -> Result<Vec<Vec<String>>> { +async fn load_spreadsheet(client: &reqwest::Client) -> Result<Vec<Vec<String>>> { let mut u = SPREADSHEET_URL.clone(); u.query_pairs_mut() @@ -405,7 +409,6 @@ async fn load_spreadsheet() -> Result<Vec<Vec<String>>> { .append_pair("key", &CONFIG.sheets.api_key); let req = reqwest::Request::new(reqwest::Method::GET, u); - let client = reqwest::Client::new(); let resp = client.execute(req).await?; #[derive(Deserialize)] @@ -429,6 +432,11 @@ async fn load_spreadsheet() -> Result<Vec<Vec<String>>> { pub async fn updategaem(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult { use regex::Regex; + let client = { + let data = ctx.data.read().await; + data.get::<HttpKey>().unwrap() + }; + let arg_user = args.single_quoted::<String>(); let user = if arg_user.is_err() { @@ -437,11 +445,9 @@ pub async fn updategaem(ctx: &Context, msg: &Message, mut args: Args) -> Command use std::borrow::Borrow; let guild = - msg.channel_id.to_channel(&ctx)?.guild().ok_or(anyhow!("couldn't find guild"))?; + msg.channel_id.to_channel(&ctx).await?.guild().ok_or(anyhow!("couldn't find guild"))?; - let guild = guild.read().guild(&ctx).ok_or(anyhow!("couldn't find guild"))?; - - let guild = guild.read(); + let guild = guild.guild(&ctx).ok_or(anyhow!("couldn't find guild"))?; get_user_id(guild.borrow(), arg_user.unwrap()).map_err(Error::from)? }; @@ -450,15 +456,23 @@ pub async fn updategaem(ctx: &Context, msg: &Message, mut args: Args) -> Command let username = match DISCORD_MAP.get(&user) { Some(s) => s, - None => return util::send(ctx, msg.channel_id, "WHO THE FUCK ARE YE", msg.tts).await, + None => { + return util::send(ctx, msg.channel_id, "WHO THE FUCK ARE YE", msg.tts) + .map_err(CommandError::from) + .await; + }, }; let steam_id = match STEAM_MAP.get(&user) { Some(u) => u, - None => return util::send(ctx, msg.channel_id, "WHO ARE YE ON STEAM", msg.tts).await, + None => { + return util::send(ctx, msg.channel_id, "WHO ARE YE ON STEAM", msg.tts) + .map_err(CommandError::from) + .await; + }, }; - let spreadsheet = load_spreadsheet().await?; + let spreadsheet = load_spreadsheet(client).await?; let user_column = (0..spreadsheet.len()) .find(|x| spreadsheet[*x][0].to_lowercase() == username.to_lowercase()); @@ -466,7 +480,9 @@ pub async fn updategaem(ctx: &Context, msg: &Message, mut args: Args) -> Command let user_column = match user_column { Some(c) => &spreadsheet[c][1..], None => { - return util::send(ctx, msg.channel_id, "YER NOT IN THE SPREADSHEET", msg.tts).await; + return util::send(ctx, msg.channel_id, "YER NOT IN THE SPREADSHEET", msg.tts) + .map_err(CommandError::from) + .await; }, }; @@ -480,7 +496,9 @@ pub async fn updategaem(ctx: &Context, msg: &Message, mut args: Args) -> Command Some(c) => &spreadsheet[c][1..], None => { error!("didn't find an appid column in the spreadsheet"); - return util::send(ctx, msg.channel_id, "SPREADSHEET BROKE", msg.tts).await; + return util::send(ctx, msg.channel_id, "SPREADSHEET BROKE", msg.tts) + .map_err(CommandError::from) + .await; }, }; @@ -517,7 +535,14 @@ pub async fn updategaem(ctx: &Context, msg: &Message, mut args: Args) -> Command play_time: u64, } - let games_owned = reqwest::get(u) + let client = { + let data = ctx.data.read().await; + data.get::<HttpKey>().unwrap() + }; + + let games_owned = client + .get(u) + .send() .await? .json::<SteamResp>() .await? @@ -548,7 +573,10 @@ pub async fn updategaem(ctx: &Context, msg: &Message, mut args: Args) -> Command ), msg.tts, ) + .await?; } else { - util::send(ctx, msg.channel_id, "up to date", msg.tts) + util::send(ctx, msg.channel_id, "up to date", msg.tts).await?; } + + Ok(()) } |
