aboutsummaryrefslogtreecommitdiff
path: root/src/game.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.rs')
-rw-r--r--src/game.rs80
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(())
}