diff options
| author | Nathan Perry <np@nathanperry.dev> | 2019-11-17 22:51:59 -0500 |
|---|---|---|
| committer | Nathan Perry <np@nathanperry.dev> | 2019-11-17 22:51:59 -0500 |
| commit | 8b2ccf363ac6894c21e256844948c8327645f0db (patch) | |
| tree | f6742f2d7905613b8c0404bba46e237f984a8da2 | |
| parent | 2a38c282dd57c2051a568549d62c80d6036e8920 (diff) | |
mostly fixed
| -rw-r--r-- | Cargo.lock | 7 | ||||
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/audio/play_queue.rs | 5 | ||||
| -rw-r--r-- | src/audio/timeutil.rs | 9 | ||||
| -rw-r--r-- | src/commands/meme/create.rs | 18 | ||||
| -rw-r--r-- | src/commands/meme/delete.rs | 12 | ||||
| -rw-r--r-- | src/commands/meme/history.rs | 25 | ||||
| -rw-r--r-- | src/commands/meme/invoke.rs | 27 | ||||
| -rw-r--r-- | src/commands/meme/mod.rs | 23 | ||||
| -rw-r--r-- | src/commands/mod.rs | 65 | ||||
| -rw-r--r-- | src/commands/playback.rs | 46 | ||||
| -rw-r--r-- | src/commands/roll.rs | 15 | ||||
| -rw-r--r-- | src/commands/sound_levels.rs | 18 | ||||
| -rw-r--r-- | src/db/mod.rs | 3 | ||||
| -rw-r--r-- | src/db/models.rs | 11 | ||||
| -rw-r--r-- | src/game.rs | 54 | ||||
| -rw-r--r-- | src/main.rs | 40 | ||||
| -rw-r--r-- | src/util.rs | 3 |
18 files changed, 246 insertions, 137 deletions
@@ -1986,6 +1986,11 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] +name = "static-cond" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "statrs" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2177,6 +2182,7 @@ dependencies = [ "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "serenity 0.7.2 (git+https://github.com/mammothbane/serenity)", "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "static-cond 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "statrs 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2962,6 +2968,7 @@ dependencies = [ "checksum sodiumoxide 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585232e78a4fc18133eef9946d3080befdf68b906c51b621531c37e91787fa2b" "checksum sourcefile 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4bf77cb82ba8453b42b6ae1d692e4cdc92f9a47beaf89a847c8be83f4e328ad3" "checksum spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +"checksum static-cond 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9aec68100e00aeda0e22498f9892aa4b3a3d6b2c366d44262a2a1a08a62531e0" "checksum statrs 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "10102ac8d55e35db2b3fafc26f81ba8647da2e15879ab686a67e6d19af2685e8" "checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" "checksum stringprep 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" @@ -2,6 +2,7 @@ name = "thulani" version = "0.1.6" authors = ["Nathan Perry <avaglir@gmail.com>"] +edition = "2018" [features] default = ["db", "games"] @@ -37,6 +38,7 @@ pest = "~2.1" pest_derive = "~2.1" postgres = { version = "^0.15", optional = true, features = ["with-chrono"] } r2d2_postgres = { version = "^0.14", optional = true } +static-cond = "^0.2" [dependencies.serenity] default-features = false diff --git a/src/audio/play_queue.rs b/src/audio/play_queue.rs index 1f80961..273f07b 100644 --- a/src/audio/play_queue.rs +++ b/src/audio/play_queue.rs @@ -8,6 +8,11 @@ use std::{ }; use either::{Left, Right}; +use log::{ + debug, + error, + trace, +}; use serenity::{ CacheAndHttp, client::bridge::voice::ClientVoiceManager, diff --git a/src/audio/timeutil.rs b/src/audio/timeutil.rs index b2232de..c9b38dd 100644 --- a/src/audio/timeutil.rs +++ b/src/audio/timeutil.rs @@ -1,8 +1,10 @@ +use chrono::Duration; use regex::{ - Regex, Match, + Regex, }; -use chrono::Duration; + +use lazy_static::lazy_static; lazy_static! { static ref START_REGEX: Regex = @@ -47,9 +49,10 @@ pub fn parse_times<A: AsRef<str>>(s: A) -> (Option<Duration>, Option<Duration>) #[cfg(test)] mod test { - use super::*; use time::Duration; + use super::*; + #[test] fn test_start() { let captures = START_REGEX.captures("start 1h2m3s").unwrap(); diff --git a/src/commands/meme/create.rs b/src/commands/meme/create.rs index 0851961..7f590b1 100644 --- a/src/commands/meme/create.rs +++ b/src/commands/meme/create.rs @@ -7,13 +7,25 @@ use std::{ }; use diesel::result::Error as DieselError; +use log::{ + debug, + error, + warn, +}; use serenity::{ - framework::standard::{Args, Delimiter}, + framework::standard::{ + Args, CommandResult, + Delimiter, + macros::command, + }, model::channel::Message, prelude::*, }; use url::Url; +use anyhow::anyhow; +use lazy_static::lazy_static; + use crate::{ audio::{ parse_times, @@ -34,7 +46,7 @@ lazy_static! { } #[command] -pub fn addmeme(ctx: &mut Context, msg: &Message, args: Args) -> Result<()> { +pub fn addmeme(ctx: &mut Context, msg: &Message, args: Args) -> CommandResult { let mut args = Args::new(args.rest(), delims.as_ref()); let title = args.single_quoted::<String>()?; @@ -81,7 +93,7 @@ pub fn addmeme(ctx: &mut Context, msg: &Message, args: Args) -> Result<()> { } #[command] -pub fn addaudiomeme(ctx: &mut Context, msg: &Message, args: Args) -> Result<()> { +pub fn addaudiomeme(ctx: &mut Context, msg: &Message, args: Args) -> CommandResult { let mut args = Args::new(args.rest(), delims.as_ref()); let title = args.single_quoted::<String>()?; diff --git a/src/commands/meme/delete.rs b/src/commands/meme/delete.rs index 72226e5..148dfd6 100644 --- a/src/commands/meme/delete.rs +++ b/src/commands/meme/delete.rs @@ -2,8 +2,13 @@ use diesel::{ NotFound, result::Error as DieselError, }; +use log::info; use serenity::{ - framework::standard::Args, + framework::standard::{ + Args, + CommandResult, + macros::command, + }, model::channel::Message, prelude::*, }; @@ -19,7 +24,7 @@ use crate::{ #[command] #[aliases("delmem")] -pub fn delmeme(ctx: &mut Context, msg: &Message, mut args: Args) -> Result<()> { +pub fn delmeme(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult { let title = args.single_quoted::<String>()?; let conn = connection()?; @@ -34,7 +39,8 @@ pub fn delmeme(ctx: &mut Context, msg: &Message, mut args: Args) -> Result<()> { return Ok(()); } - Err(e) + Err(e)?; + Ok(()) } } } diff --git a/src/commands/meme/history.rs b/src/commands/meme/history.rs index 6c03bef..5921e1a 100644 --- a/src/commands/meme/history.rs +++ b/src/commands/meme/history.rs @@ -2,8 +2,17 @@ use diesel::{ NotFound, result::Error as DieselError, }; +use log::{ + debug, + error, + info, +}; use serenity::{ - framework::standard::Args, + framework::standard::{ + Args, + CommandResult, + macros::command, + }, model::channel::Message, prelude::*, }; @@ -12,8 +21,12 @@ use timeago::{ TimeUnit, }; +use anyhow::anyhow; +use lazy_static::lazy_static; + use crate::{ db::{ + self, connection, InvocationRecord, Meme, @@ -38,7 +51,7 @@ static CLEAN_DATE_FORMAT: &'static str = "%b %-e %Y"; #[command] #[aliases("what")] -pub fn wat(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { +pub fn wat(ctx: &mut Context, msg: &Message, _: Args) -> CommandResult { let conn = connection()?; let record = match InvocationRecord::last(&conn) { @@ -80,7 +93,7 @@ pub fn wat(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { } #[command] -pub fn history(ctx: &mut Context, msg: &Message, mut args: Args) -> Result<()> { +pub fn history(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult { use itertools::Itertools; lazy_static! { @@ -143,7 +156,7 @@ pub fn history(ctx: &mut Context, msg: &Message, mut args: Args) -> Result<()> { #[command] #[aliases("stat")] -pub fn stats(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { +pub fn stats(ctx: &mut Context, msg: &Message, _: Args) -> CommandResult { use db; use serenity::model::{ id::UserId, @@ -206,7 +219,7 @@ and *{}* was the most-memed overall ({})"#, } #[command] -pub fn memers(ctx: &mut Context, msg: &Message, _args: Args) -> Result<()> { +pub fn memers(ctx: &mut Context, msg: &Message, _args: Args) -> CommandResult { use db; use itertools::Itertools; use serenity::model::{ @@ -240,7 +253,7 @@ pub fn memers(ctx: &mut Context, msg: &Message, _args: Args) -> Result<()> { } #[command] -pub fn query(ctx: &mut Context, msg: &Message, mut args: Args) -> Result<()> { +pub fn query(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult { use std::borrow::Borrow; use itertools::Itertools; diff --git a/src/commands/meme/invoke.rs b/src/commands/meme/invoke.rs index 89ca999..93c5141 100644 --- a/src/commands/meme/invoke.rs +++ b/src/commands/meme/invoke.rs @@ -3,8 +3,13 @@ use diesel::{ result::Error as DieselError, }; use itertools::Itertools; +use log::info; use serenity::{ - framework::standard::Args, + framework::standard::{ + Args, + CommandResult, + macros::command, + }, model::channel::Message, prelude::*, }; @@ -23,22 +28,19 @@ use crate::{ #[command] #[aliases("mem")] -#[inline] -pub fn meme(ctx: &mut Context, msg: &Message, args: Args) -> Result<()> { +pub fn meme(ctx: &mut Context, msg: &Message, args: Args) -> CommandResult { _meme(ctx, msg, args, AudioPlayback::Optional) } #[command] #[aliases("audiomeme", "audiomem")] -#[inline] -pub fn audio_meme(ctx: &mut Context, msg: &Message, args: Args) -> Result<()> { +pub fn audio_meme(ctx: &mut Context, msg: &Message, args: Args) -> CommandResult { _meme(ctx, msg, args, AudioPlayback::Required) } #[command] #[aliases("silentmeme", "silentmem")] -#[inline] -pub fn silent_meme(ctx: &mut Context, msg: &Message, args: Args) -> Result<()> { +pub fn silent_meme(ctx: &mut Context, msg: &Message, args: Args) -> CommandResult { _meme(ctx, msg, args, AudioPlayback::Prohibited) } @@ -49,7 +51,7 @@ enum AudioPlayback { Prohibited, } -fn _meme(ctx: &mut Context, msg: &Message, args: Args, audio_playback: AudioPlayback) -> Result<()> { +fn _meme(ctx: &mut Context, msg: &Message, args: Args, audio_playback: AudioPlayback) -> CommandResult { if args.len() == 0 || audio_playback != AudioPlayback::Optional { return rand_meme(ctx, msg, audio_playback); } @@ -77,9 +79,7 @@ fn _meme(ctx: &mut Context, msg: &Message, args: Args, audio_playback: AudioPlay send_meme(ctx, &mem, &conn, msg) } -#[command] -#[aliases("rarememe", "raremem")] -fn rand_meme(ctx: &Context, message: &Message, audio_playback: AudioPlayback) -> Result<()> { +fn rand_meme(ctx: &Context, message: &Message, audio_playback: AudioPlayback) -> CommandResult { let conn = connection()?; let should_audio = ctx.users_listening()?; @@ -93,7 +93,8 @@ fn rand_meme(ctx: &Context, message: &Message, audio_playback: AudioPlayback) -> match mem { Ok(mem) => { InvocationRecord::create(&conn, message.author.id.0, message.id.0, mem.id, true)?; - send_meme(ctx, &mem, &conn, message).map_err(Error::from) + send_meme(ctx, &mem, &conn, message)?; + Ok(()) }, Err(e) => { match e.downcast_ref::<DieselError>() { @@ -112,7 +113,7 @@ fn rand_meme(ctx: &Context, message: &Message, audio_playback: AudioPlayback) -> #[command] #[aliases("rarememe", "raremem")] -pub fn rare_meme(ctx: &mut Context, msg: &Message, _args: Args) -> Result<()> { +pub fn rare_meme(ctx: &mut Context, msg: &Message, _args: Args) -> CommandResult { let should_audio = ctx.users_listening()?; let conn = connection()?; diff --git a/src/commands/meme/mod.rs b/src/commands/meme/mod.rs index e5244aa..1761ab1 100644 --- a/src/commands/meme/mod.rs +++ b/src/commands/meme/mod.rs @@ -1,7 +1,9 @@ use diesel::PgConnection; +use log::debug; use rand::{Rng, thread_rng}; use serenity::{ builder::CreateMessage, + framework::standard::macros::group, http::AttachmentType, model::channel::Message, prelude::*, @@ -28,6 +30,27 @@ mod create; mod invoke; mod delete; +group!({ + name: "memes", + options: { + only_in: "guild", + }, + commands: [ + meme, + audio_meme, + silent_Meme, + addmeme, + addaudiomeme, + delmeme, + wat, + stats, + history, + rare_meme, + memers, + query, + ], +}); + fn send_meme(ctx: &Context, t: &Meme, conn: &PgConnection, msg: &Message) -> Result<()> { let should_tts = t.content.as_ref().map(|t| t.len() > 0).unwrap_or(false) && thread_rng().gen::<u32>() % 25 == 0; diff --git a/src/commands/mod.rs b/src/commands/mod.rs index 619335c..5c23418 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -1,5 +1,9 @@ +use log::info; use serenity::{ - framework::StandardFramework, + framework::{ + StandardFramework, + standard::macros::group, + }, }; use crate::{ @@ -19,42 +23,27 @@ pub(crate) mod playback; pub(crate) mod sound_levels; pub(crate) mod roll; -group!("playback", { - options: { - only_in: "guild", - }, - commands: [ - skip, - pause, - resume, - list, - die, - mute, - unmute, - play, - volume, - ], -}); -group!("general", { +group!({ + name: "general", options: { only_in: "guild", }, commands: [ - roll, + roll::roll, ], }); pub fn register_commands(f: StandardFramework) -> StandardFramework { let result = f - .group(&PLAYBACK_GROUP) + .group(&self::playback::PLAYBACK_GROUP) .group(&GENERAL_GROUP); #[cfg(feature = "diesel")] - let result = result.group(&MEMES_GROUP); + let result = result.group(&self::meme::MEMES_GROUP); #[cfg(feature = "games")] - let result = result.group(&GAME_GROUP); + let result = result.group(&crate::game::GAME_GROUP); result.unrecognised_command(|ctx, msg, unrec| { let url = match msg.content.split_whitespace().skip(1).next() { @@ -70,38 +59,6 @@ pub fn register_commands(f: StandardFramework) -> StandardFramework { }) } -#[cfg(feature = "games")] -group!("game", { - options: { - only_in: "guild", - }, - commands: [ - installedgame, - ownedgame, - updategaem, - ], -}); #[cfg(feature = "diesel")] mod meme; - -#[cfg(feature = "diesel")] -group!("memes", { - options: { - only_in: "guild", - }, - commands: [ - meme, - audio_meme, - silent_Meme, - addmeme, - addaudiomeme, - delmeme, - wat, - stats, - history, - rare_meme, - memers, - query, - ], -}); diff --git a/src/commands/playback.rs b/src/commands/playback.rs index 49ff44c..a54e937 100644 --- a/src/commands/playback.rs +++ b/src/commands/playback.rs @@ -1,6 +1,16 @@ use either::{Left, Right}; +use log::{ + debug, + error, + info, + warn, +}; use serenity::{ - framework::standard::Args, + framework::standard::{ + Args, + CommandResult, + macros::{command, group}, + }, model::channel::Message, prelude::*, }; @@ -17,7 +27,25 @@ use crate::{ util::CtxExt, }; -pub fn _play(ctx: &Context, msg: &Message, url: &str) -> Result<()> { +group!({ + name: "playback", + options: { + only_in: "guild", + }, + commands: [ + skip, + pause, + resume, + list, + die, + mute, + unmute, + play, + volume, + ], +}); + +pub fn _play(ctx: &Context, msg: &Message, url: &str) -> CommandResult { use url::{Url, Host}; debug!("playing '{}'", url); @@ -69,7 +97,7 @@ pub fn _play(ctx: &Context, msg: &Message, url: &str) -> Result<()> { } #[command] -pub fn play(ctx: &mut Context, msg: &Message, mut args: Args) -> Result<()> { +pub fn play(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult { if args.len() == 0 { return _resume(ctx, msg); } @@ -86,7 +114,7 @@ pub fn play(ctx: &mut Context, msg: &Message, mut args: Args) -> Result<()> { } #[command] -pub fn pause(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { +pub fn pause(ctx: &mut Context, msg: &Message, _: Args) -> CommandResult { let queue_lock = ctx.data.write().get::<PlayQueue>().cloned().unwrap(); let done = || ctx.send(msg.channel_id, "r u srs", msg.tts); @@ -119,11 +147,11 @@ pub fn pause(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { #[command] #[aliases("continue")] -pub fn resume(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { +pub fn resume(ctx: &mut Context, msg: &Message, _: Args) -> CommandResult { _resume(ctx, msg) } -fn _resume(ctx: &mut Context, msg: &Message) -> Result<()> { +fn _resume(ctx: &mut Context, msg: &Message) -> CommandResult { let queue_lock = ctx.data.write().get::<PlayQueue>().cloned().unwrap(); let done = || ctx.send(msg.channel_id, "r u srs", msg.tts); @@ -160,7 +188,7 @@ fn _resume(ctx: &mut Context, msg: &Message) -> Result<()> { #[command] #[aliases("next")] -pub fn skip(ctx: &mut Context, _msg: &Message, _args: Args) -> Result<()> { +pub fn skip(ctx: &mut Context, _msg: &Message, _args: Args) -> CommandResult { let data = ctx.data.write(); let mgr_lock = data.get::<VoiceManager>().cloned().unwrap(); @@ -182,7 +210,7 @@ pub fn skip(ctx: &mut Context, _msg: &Message, _args: Args) -> Result<()> { #[command] #[aliases("sudoku", "fuckoff", "stop")] -pub fn die(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { +pub fn die(ctx: &mut Context, msg: &Message, _: Args) -> CommandResult { let data = ctx.data.write(); let mgr_lock = data.get::<VoiceManager>().cloned().unwrap(); @@ -212,7 +240,7 @@ pub fn die(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { #[command] #[aliases("queue")] -pub fn list(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { +pub fn list(ctx: &mut Context, msg: &Message, _: Args) -> CommandResult { let queue_lock = ctx.data.write().get::<PlayQueue>().cloned().unwrap(); let play_queue = queue_lock.read().unwrap(); diff --git a/src/commands/roll.rs b/src/commands/roll.rs index 3df91d0..1544654 100644 --- a/src/commands/roll.rs +++ b/src/commands/roll.rs @@ -1,12 +1,23 @@ use std::result::Result as StdResult; +use log::{ + debug, + error, +}; use rand::prelude::*; use serenity::{ - framework::standard::Args, + framework::standard::{ + Args, + CommandResult, + macros::command, + }, model::channel::Message, prelude::*, }; use statrs; +use thiserror::Error; + +use lazy_static::lazy_static; use crate::{ Result, @@ -198,7 +209,7 @@ mod test { #[command] #[aliases("calc", "calculate")] -pub fn roll(ctx: &mut Context, msg: &Message, args: Args) -> Result<()> { +pub fn roll(ctx: &mut Context, msg: &Message, args: Args) -> CommandResult { match Calc::eval(args.rest()) { Ok(result) => { debug!("got calc result '{}'", result); diff --git a/src/commands/sound_levels.rs b/src/commands/sound_levels.rs index 81508a6..8add787 100644 --- a/src/commands/sound_levels.rs +++ b/src/commands/sound_levels.rs @@ -1,5 +1,15 @@ +use log::{ + error, + info, + trace, + warn, +}; use serenity::{ - framework::standard::Args, + framework::standard::{ + Args, + CommandResult, + macros::command, + }, model::channel::Message, prelude::*, }; @@ -14,7 +24,7 @@ use crate::{ pub const DEFAULT_VOLUME: f32 = 0.10; #[command] -pub fn mute(ctx: &mut Context, _: &Message, _: Args) -> Result<()> { +pub fn mute(ctx: &mut Context, _: &Message, _: Args) -> CommandResult { let mgr_lock = ctx.data.write().get::<VoiceManager>().cloned().unwrap(); let mut manager = mgr_lock.lock(); @@ -32,7 +42,7 @@ pub fn mute(ctx: &mut Context, _: &Message, _: Args) -> Result<()> { } #[command] -pub fn unmute(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { +pub fn unmute(ctx: &mut Context, msg: &Message, _: Args) -> CommandResult { let mgr_lock = ctx.data.write().get::<VoiceManager>().cloned().unwrap(); let mut manager = mgr_lock.lock(); @@ -51,7 +61,7 @@ pub fn unmute(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { } #[command] -pub fn volume(ctx: &mut Context, msg: &Message, mut args: Args) -> Result<()> { +pub fn volume(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult { if args.len() == 0 { let vol = { let queue_lock = ctx.data.write().get::<PlayQueue>().cloned().unwrap(); diff --git a/src/db/mod.rs b/src/db/mod.rs index 2a6d1f4..db6cfb8 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -19,6 +19,9 @@ use r2d2_postgres::{ TlsMode, }; +use anyhow::anyhow; +use lazy_static::lazy_static; + use crate::{Error, Result}; pub use self::models::*; diff --git a/src/db/models.rs b/src/db/models.rs index a01a9c1..95acb16 100644 --- a/src/db/models.rs +++ b/src/db/models.rs @@ -1,5 +1,10 @@ use chrono::naive::NaiveDateTime; -use diesel::prelude::*; +use diesel::{ + Identifiable, + Insertable, + prelude::*, + Queryable, +}; use crate::{ db::schema::*, @@ -57,7 +62,7 @@ impl NewMeme { #[derive(Queryable, Identifiable, PartialEq, Debug)] -#[table_name="audio"] +#[table_name = "audio"] pub struct Audio { pub id: i32, pub data: Vec<u8>, @@ -97,7 +102,7 @@ impl Audio { } #[derive(Insertable, PartialEq, Debug)] -#[table_name="audio"] +#[table_name = "audio"] pub struct NewAudio { pub data: Vec<u8>, pub metadata_id: i32, diff --git a/src/game.rs b/src/game.rs index 5ca5c72..224ca46 100644 --- a/src/game.rs +++ b/src/game.rs @@ -8,16 +8,26 @@ use std::{ }, }; -use anyhow::Error; use fnv::{ FnvHashMap, FnvHashSet, }; use itertools::Itertools; +use log::{ + debug, + error, + info, +}; +use serde::{ + Deserialize, + Serialize, +}; use serenity::{ framework::standard::{ ArgError, Args, + CommandResult, + macros::{command, group}, }, model::{ channel::Message, @@ -28,6 +38,12 @@ use serenity::{ }; use url::Url; +use anyhow::{ + anyhow, + Error, +}; +use lazy_static::lazy_static; + use crate::{ must_env_lookup, Result, @@ -35,6 +51,20 @@ use crate::{ VOICE_CHANNEL_ID, }; +pub use self::GAME_GROUP as GROUP; + +group!({ + name: "game", + options: { + only_in: "guild", + }, + commands: [ + installedgame, + ownedgame, + updategaem, + ], +}); + lazy_static! { static ref SHEETS_API_KEY: String = must_env_lookup("SHEETS_API_KEY"); static ref STEAM_API_KEY: String = must_env_lookup("STEAM_API_KEY"); @@ -123,17 +153,17 @@ impl FromStr for GameStatus { #[command] #[aliases("installedgaem")] -pub fn installedgame(ctx: &mut Context, msg: &Message, args: Args) -> Result<()> { - game(ctx, msg, args, GameStatus::Installed) +pub fn installedgame(ctx: &mut Context, msg: &Message, args: Args) -> CommandResult { + _game(ctx, msg, args, GameStatus::Installed) } #[command] #[aliases("ownedgaem")] -pub fn ownedgame(ctx: &mut Context, msg: &Message, args: Args) -> Result<()> { - game(ctx, msg, args, GameStatus::NotInstalled) +pub fn ownedgame(ctx: &mut Context, msg: &Message, args: Args) -> CommandResult { + _game(ctx, msg, args, GameStatus::NotInstalled) } -#[derive(Copy, Clone, Debug, Error, PartialEq, Eq, Hash)] +#[derive(Copy, Clone, Debug, thiserror::Error, PartialEq, Eq, Hash)] pub enum UserLookupError { #[error("too many possible options ({}) for query", _0)] Ambiguous(usize), @@ -186,7 +216,11 @@ pub fn get_user_id<S: AsRef<str>>(g: &Guild, s: S) -> StdResult<UserId, UserLook #[command] #[aliases("gaem")] -pub fn game(ctx: &mut Context, msg: &Message, mut args: Args, min_status: GameStatus) -> Result<()> { +fn game(ctx: &mut Context, msg: &Message, args: Args) -> CommandResult { + _game(ctx, msg, args, GameStatus::Installed) +} + +fn _game(ctx: &mut Context, msg: &Message, mut args: Args, min_status: GameStatus) -> CommandResult { let guild = msg.channel_id.to_channel(ctx)? .guild() .ok_or(anyhow!("couldn't find guild"))?; @@ -337,7 +371,9 @@ pub fn game(ctx: &mut Context, msg: &Message, mut args: Args, min_status: GameSt games_formatted = "**LITERALLY NOTHING**".to_owned(); } - ctx.send(msg.channel_id, &games_formatted, msg.tts) + ctx.send(msg.channel_id, &games_formatted, msg.tts)?; + + Ok(()) } fn load_spreadsheet() -> Result<Vec<Vec<String>>> { @@ -372,7 +408,7 @@ fn load_spreadsheet() -> Result<Vec<Vec<String>>> { #[command] #[aliases("updategame")] -pub fn updategaem(ctx: &mut Context, msg: &Message, mut args: Args) -> Result<()> { +pub fn updategaem(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult { use regex::Regex; let arg_user = args.single_quoted::<String>(); diff --git a/src/main.rs b/src/main.rs index 6af4660..720e830 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,35 +6,10 @@ #![feature(box_syntax, box_patterns)] -#[macro_use] extern crate anyhow; -extern crate chrono; -#[cfg(feature = "db")] +// trash dependencies that can't be fucked to upgrade to ed. 2018 #[macro_use] extern crate diesel; -extern crate dotenv; #[macro_use] extern crate dotenv_codegen; -extern crate either; -extern crate fern; -extern crate fnv; -#[cfg_attr(test, macro_use)] extern crate itertools; -#[macro_use] extern crate lazy_static; -#[macro_use] extern crate log; -extern crate pest; #[macro_use] extern crate pest_derive; -#[cfg(feature = "db")] extern crate postgres; -#[cfg(feature = "db")] extern crate r2d2_postgres; -extern crate rand; -extern crate regex; -extern crate reqwest; -#[macro_use] extern crate serde; -extern crate serde_json; -#[macro_use] extern crate serenity; -extern crate sha1; -extern crate statrs; -#[macro_use] extern crate thiserror; -extern crate time; -extern crate timeago; -extern crate typemap; -extern crate url; use std::{ default::Default, @@ -47,8 +22,13 @@ use std::{ }; use chrono::Datelike; -use dotenv::dotenv; use fnv::{FnvHashMap, FnvHashSet}; +use log::{ + debug, + error, + info, + trace, +}; use serenity::{ framework::StandardFramework, model::{ @@ -58,6 +38,10 @@ use serenity::{ prelude::*, }; +use anyhow::anyhow; +use dotenv::{dotenv, var as dvar}; +use lazy_static::lazy_static; + use self::commands::register_commands; pub use self::util::*; @@ -130,7 +114,7 @@ lazy_static! { fn run() -> Result<()> { - let token = &dotenv::var("THULANI_TOKEN").map_err(|_| format_err!("missing token"))?; + let token = &dvar("THULANI_TOKEN").map_err(|_| anyhow!("missing token"))?; let mut client = Client::new(token, Handler)?; audio::VoiceManager::register(&mut client); diff --git a/src/util.rs b/src/util.rs index 1e478d3..eb38d9c 100644 --- a/src/util.rs +++ b/src/util.rs @@ -3,6 +3,7 @@ use std::{ str::FromStr,
};
+use dotenv;
use serenity::{
client::Context,
model::{
@@ -15,6 +16,8 @@ use serenity::{ };
use url::Url;
+use lazy_static::lazy_static;
+
use crate::{
audio::PlayQueue,
Result,
|
