diff --git a/Cargo.lock b/Cargo.lock index a76e4a1..c4ecebe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2280,7 +2280,7 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tobi-rs" -version = "0.2.1" +version = "0.2.2" dependencies = [ "aspotify", "bot-coreutils", diff --git a/Cargo.toml b/Cargo.toml index 8f6728c..8425633 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tobi-rs" -version = "0.2.1" +version = "0.2.2" authors = ["trivernis "] edition = "2018" diff --git a/bot-coreutils/src/process.rs b/bot-coreutils/src/process.rs index 17068b5..f9baa49 100644 --- a/bot-coreutils/src/process.rs +++ b/bot-coreutils/src/process.rs @@ -13,7 +13,9 @@ pub async fn run_command_async(command: &str, args: &[&str]) -> io::Result BotResult { let token = dotenv::var("BOT_TOKEN").map_err(|_| BotError::MissingToken)?; diff --git a/src/commands/common.rs b/src/commands/common.rs index b946de0..e347b2e 100644 --- a/src/commands/common.rs +++ b/src/commands/common.rs @@ -1,8 +1,9 @@ -use crate::providers::settings::{get_setting, Setting}; -use crate::utils::error::BotResult; use serenity::model::channel::Message; use serenity::prelude::*; +use crate::providers::settings::{get_setting, Setting}; +use crate::utils::error::BotResult; + /// Deletes a message automatically if configured that way pub async fn handle_autodelete(ctx: &Context, msg: &Message) -> BotResult<()> { if let Some(guild_id) = msg.guild_id { diff --git a/src/commands/misc/help.rs b/src/commands/misc/help.rs index d7ba4ea..b728e65 100644 --- a/src/commands/misc/help.rs +++ b/src/commands/misc/help.rs @@ -1,6 +1,5 @@ use std::collections::HashSet; -use crate::commands::common::handle_autodelete; use serenity::client::Context; use serenity::framework::standard::macros::help; use serenity::framework::standard::{help_commands, Args}; @@ -8,6 +7,8 @@ use serenity::framework::standard::{CommandGroup, CommandResult, HelpOptions}; use serenity::model::channel::Message; use serenity::model::id::UserId; +use crate::commands::common::handle_autodelete; + #[help] #[max_levenshtein_distance(2)] pub async fn help( diff --git a/src/commands/misc/mod.rs b/src/commands/misc/mod.rs index 5f2ab1d..455de87 100644 --- a/src/commands/misc/mod.rs +++ b/src/commands/misc/mod.rs @@ -1,5 +1,6 @@ use serenity::framework::standard::macros::group; +use about::ABOUT_COMMAND; use pekofy::PEKOFY_COMMAND; use ping::PING_COMMAND; use qalc::QALC_COMMAND; @@ -8,8 +9,8 @@ use shutdown::SHUTDOWN_COMMAND; use stats::STATS_COMMAND; use time::TIME_COMMAND; use timezones::TIMEZONES_COMMAND; -use about::ABOUT_COMMAND; +mod about; pub(crate) mod help; mod pekofy; mod ping; @@ -19,7 +20,6 @@ mod shutdown; mod stats; mod time; mod timezones; -mod about; #[group] #[commands(ping, stats, shutdown, pekofy, time, timezones, qalc, sauce, about)] diff --git a/src/commands/misc/pekofy.rs b/src/commands/misc/pekofy.rs index d34492c..18feeef 100644 --- a/src/commands/misc/pekofy.rs +++ b/src/commands/misc/pekofy.rs @@ -1,10 +1,11 @@ -use crate::utils::get_previous_message_or_reply; use rand::prelude::*; use regex::Regex; use serenity::framework::standard::{Args, CommandError, CommandResult}; use serenity::model::channel::Message; use serenity::{framework::standard::macros::command, prelude::*}; +use crate::utils::get_previous_message_or_reply; + // return a normal peko in most cases static PEKOS: &[&str] = &[ "peko", diff --git a/src/commands/misc/qalc.rs b/src/commands/misc/qalc.rs index 6fe90c2..06ab58d 100644 --- a/src/commands/misc/qalc.rs +++ b/src/commands/misc/qalc.rs @@ -1,10 +1,11 @@ -use crate::providers::qalc; use regex::Regex; use serenity::client::Context; use serenity::framework::standard::macros::command; use serenity::framework::standard::{Args, CommandResult}; use serenity::model::channel::Message; +use crate::providers::qalc; + static QALC_HELP: &[&str] = &["help", "--help", "-h", "h"]; #[command] diff --git a/src/commands/misc/sauce.rs b/src/commands/misc/sauce.rs index 800542d..b6efd66 100644 --- a/src/commands/misc/sauce.rs +++ b/src/commands/misc/sauce.rs @@ -1,15 +1,15 @@ -use crate::messages::sauce::show_sauce_menu; -use crate::utils::get_previous_message_or_reply; -use bot_coreutils::url; - use sauce_api::Sauce; - -use crate::utils::context_data::Store; use serenity::client::Context; use serenity::framework::standard::macros::command; use serenity::framework::standard::CommandResult; use serenity::model::channel::Message; +use bot_coreutils::url; + +use crate::messages::sauce::show_sauce_menu; +use crate::utils::context_data::Store; +use crate::utils::get_previous_message_or_reply; + #[command] #[description("Searches for the source of a previously posted image or an image replied to.")] #[usage("")] diff --git a/src/commands/misc/shutdown.rs b/src/commands/misc/shutdown.rs index 297f248..05625f0 100644 --- a/src/commands/misc/shutdown.rs +++ b/src/commands/misc/shutdown.rs @@ -1,9 +1,11 @@ -use crate::commands::common::handle_autodelete; +use std::process; + use serenity::framework::standard::macros::command; use serenity::framework::standard::{Args, CommandResult}; use serenity::model::channel::Message; use serenity::prelude::*; -use std::process; + +use crate::commands::common::handle_autodelete; #[command] #[description("Shuts down the bot with the specified exit code")] diff --git a/src/commands/misc/stats.rs b/src/commands/misc/stats.rs index a64e991..6bca0f7 100644 --- a/src/commands/misc/stats.rs +++ b/src/commands/misc/stats.rs @@ -1,13 +1,15 @@ -use crate::commands::common::handle_autodelete; +use std::process; +use std::time::{Duration, SystemTime, UNIX_EPOCH}; + use chrono::Duration as ChronoDuration; use serenity::framework::standard::macros::command; use serenity::framework::standard::CommandResult; use serenity::model::channel::Message; use serenity::prelude::*; -use std::process; -use std::time::{Duration, SystemTime, UNIX_EPOCH}; use sysinfo::{ProcessExt, SystemExt}; +use crate::commands::common::handle_autodelete; + const VERSION: &'static str = env!("CARGO_PKG_VERSION"); #[command] diff --git a/src/commands/music/current.rs b/src/commands/music/current.rs index afc7e95..5aad683 100644 --- a/src/commands/music/current.rs +++ b/src/commands/music/current.rs @@ -1,3 +1,5 @@ +use std::mem; + use serenity::client::Context; use serenity::framework::standard::macros::command; use serenity::framework::standard::CommandResult; @@ -6,7 +8,6 @@ use serenity::model::channel::Message; use crate::commands::common::handle_autodelete; use crate::commands::music::get_queue_for_guild; use crate::messages::music::NowPlayingMessage; -use std::mem; #[command] #[only_in(guilds)] diff --git a/src/commands/music/mod.rs b/src/commands/music/mod.rs index bcf1462..da2ebe7 100644 --- a/src/commands/music/mod.rs +++ b/src/commands/music/mod.rs @@ -1,9 +1,8 @@ +use std::mem; +use std::sync::atomic::{AtomicIsize, AtomicUsize, Ordering}; use std::sync::Arc; +use std::time::Duration; -use crate::providers::music::queue::{MusicQueue, Song}; -use crate::providers::music::youtube_dl; -use crate::utils::context_data::{DatabaseContainer, Store}; -use crate::utils::error::{BotError, BotResult}; use regex::Regex; use serenity::async_trait; use serenity::client::Context; @@ -12,29 +11,12 @@ use serenity::http::Http; use serenity::model::channel::Message; use serenity::model::guild::Guild; use serenity::model::id::{ChannelId, GuildId, UserId}; +use serenity::model::user::User; use songbird::{ Call, Event, EventContext, EventHandler as VoiceEventHandler, Songbird, TrackEvent, }; -use std::mem; -use std::sync::atomic::{AtomicIsize, AtomicUsize, Ordering}; -use std::time::Duration; use tokio::sync::Mutex; -mod clear_queue; -mod current; -mod join; -mod leave; -mod lyrics; -mod pause; -mod play; -mod play_next; -mod playlists; -mod queue; -mod save_playlist; -mod shuffle; -mod skip; - -use crate::providers::settings::{get_setting, Setting}; use clear_queue::CLEAR_QUEUE_COMMAND; use current::CURRENT_COMMAND; use join::JOIN_COMMAND; @@ -46,10 +28,29 @@ use play_next::PLAY_NEXT_COMMAND; use playlists::PLAYLISTS_COMMAND; use queue::QUEUE_COMMAND; use save_playlist::SAVE_PLAYLIST_COMMAND; -use serenity::model::user::User; use shuffle::SHUFFLE_COMMAND; use skip::SKIP_COMMAND; +use crate::providers::music::queue::{MusicQueue, Song}; +use crate::providers::music::youtube_dl; +use crate::providers::settings::{get_setting, Setting}; +use crate::utils::context_data::{DatabaseContainer, Store}; +use crate::utils::error::{BotError, BotResult}; + +mod clear_queue; +mod current; +mod join; +mod leave; +mod lyrics; +mod pause; +mod play; +mod play_next; +mod playlists; +mod queue; +mod save_playlist; +mod shuffle; +mod skip; + #[group] #[commands( join, diff --git a/src/commands/music/play.rs b/src/commands/music/play.rs index c3a5ce0..2dc78b2 100644 --- a/src/commands/music/play.rs +++ b/src/commands/music/play.rs @@ -3,12 +3,11 @@ use serenity::framework::standard::macros::command; use serenity::framework::standard::{Args, CommandError, CommandResult}; use serenity::model::channel::Message; +use crate::commands::common::handle_autodelete; use crate::commands::music::{ get_channel_for_author, get_queue_for_guild, get_songs_for_query, get_voice_manager, join_channel, play_next_in_queue, }; - -use crate::commands::common::handle_autodelete; use crate::providers::settings::{get_setting, Setting}; #[command] diff --git a/src/commands/music/playlists.rs b/src/commands/music/playlists.rs index d922438..92ca932 100644 --- a/src/commands/music/playlists.rs +++ b/src/commands/music/playlists.rs @@ -1,10 +1,11 @@ -use crate::commands::common::handle_autodelete; -use crate::utils::context_data::get_database_from_context; use serenity::client::Context; use serenity::framework::standard::macros::command; use serenity::framework::standard::CommandResult; use serenity::model::channel::Message; +use crate::commands::common::handle_autodelete; +use crate::utils::context_data::get_database_from_context; + #[command] #[only_in(guilds)] #[description("Displays a list of all saved playlists")] diff --git a/src/commands/music/save_playlist.rs b/src/commands/music/save_playlist.rs index 19c142a..55ee8da 100644 --- a/src/commands/music/save_playlist.rs +++ b/src/commands/music/save_playlist.rs @@ -1,10 +1,11 @@ -use crate::commands::music::is_dj; -use crate::utils::context_data::get_database_from_context; use serenity::client::Context; use serenity::framework::standard::macros::command; use serenity::framework::standard::{Args, CommandResult}; use serenity::model::channel::Message; +use crate::commands::music::is_dj; +use crate::utils::context_data::get_database_from_context; + #[command] #[only_in(guilds)] #[description("Adds a playlist to the guilds saved playlists")] diff --git a/src/handler.rs b/src/handler.rs index 5eca697..d1ece1b 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -1,5 +1,3 @@ -use crate::commands::music::get_queue_for_guild; -use crate::utils::context_data::EventDrivenMessageContainer; use serenity::async_trait; use serenity::client::Context; use serenity::model::channel::Reaction; @@ -10,6 +8,9 @@ use serenity::model::id::{ChannelId, GuildId, MessageId}; use serenity::model::voice::VoiceState; use serenity::prelude::*; +use crate::commands::music::get_queue_for_guild; +use crate::utils::context_data::EventDrivenMessageContainer; + pub(crate) struct Handler; macro_rules! log_msg_fire_error { diff --git a/src/messages/music.rs b/src/messages/music.rs index d008830..1edcdfe 100644 --- a/src/messages/music.rs +++ b/src/messages/music.rs @@ -1,10 +1,12 @@ -use crate::utils::error::BotResult; -use crate::utils::messages::ShareableMessage; +use std::sync::Arc; + use serenity::builder::CreateEmbed; use serenity::http::Http; use serenity::model::prelude::ChannelId; use songbird::input::Metadata; -use std::sync::Arc; + +use crate::utils::error::BotResult; +use crate::utils::messages::ShareableMessage; #[derive(Clone)] pub struct NowPlayingMessage { diff --git a/src/messages/sauce.rs b/src/messages/sauce.rs index 0cb19d9..7898cd5 100644 --- a/src/messages/sauce.rs +++ b/src/messages/sauce.rs @@ -1,10 +1,13 @@ -use crate::utils::error::BotResult; -use bot_coreutils::url::get_domain_for_url; +use std::cmp::Ordering; + use sauce_api::{SauceItem, SauceResult}; use serenity::builder::CreateMessage; use serenity::{model::channel::Message, prelude::*}; use serenity_utils::prelude::*; -use std::cmp::Ordering; + +use bot_coreutils::url::get_domain_for_url; + +use crate::utils::error::BotResult; static MAX_RESULTS: usize = 6; static MIN_SIMILARITY: f32 = 50.0; diff --git a/src/providers/music/lyrics.rs b/src/providers/music/lyrics.rs index 5359d20..efdb340 100644 --- a/src/providers/music/lyrics.rs +++ b/src/providers/music/lyrics.rs @@ -1,7 +1,8 @@ -use crate::utils::error::BotResult; use regex::Regex; use serde_derive::Deserialize; +use crate::utils::error::BotResult; + const API_ENDPOINT: &str = "https://api.lyrics.ovh/v1/"; /// Returns the lyrics of a song diff --git a/src/providers/music/queue.rs b/src/providers/music/queue.rs index 93401e6..057349e 100644 --- a/src/providers/music/queue.rs +++ b/src/providers/music/queue.rs @@ -1,12 +1,13 @@ use std::collections::VecDeque; +use aspotify::{Track, TrackSimplified}; use songbird::tracks::TrackHandle; +use bot_coreutils::shuffle::Shuffle; + use crate::messages::music::NowPlayingMessage; use crate::providers::music::responses::{PlaylistEntry, VideoInformation}; use crate::providers::music::youtube_dl; -use aspotify::{Track, TrackSimplified}; -use bot_coreutils::shuffle::Shuffle; #[derive(Clone)] pub struct MusicQueue { diff --git a/src/providers/music/spotify.rs b/src/providers/music/spotify.rs index 4cbb16b..102daf1 100644 --- a/src/providers/music/spotify.rs +++ b/src/providers/music/spotify.rs @@ -1,6 +1,7 @@ +use aspotify::{Client, ClientCredentials, PlaylistItem, PlaylistItemType}; + use crate::providers::music::queue::Song; use crate::utils::error::{BotError, BotResult}; -use aspotify::{Client, ClientCredentials, PlaylistItem, PlaylistItemType}; pub struct SpotifyApi { client: Client, diff --git a/src/providers/music/youtube_dl.rs b/src/providers/music/youtube_dl.rs index 9a4d345..a673cf1 100644 --- a/src/providers/music/youtube_dl.rs +++ b/src/providers/music/youtube_dl.rs @@ -1,13 +1,16 @@ -use crate::providers::music::queue::Song; -use crate::providers::music::responses::{PlaylistEntry, VideoInformation}; -use crate::utils::error::BotResult; -use bot_coreutils::process::run_command_async; -use futures::future::BoxFuture; -use futures::FutureExt; use std::sync::atomic::{AtomicU8, Ordering}; use std::sync::Arc; use std::time::Duration; +use futures::future::BoxFuture; +use futures::FutureExt; + +use bot_coreutils::process::run_command_async; + +use crate::providers::music::queue::Song; +use crate::providers::music::responses::{PlaylistEntry, VideoInformation}; +use crate::utils::error::BotResult; + static THREAD_LIMIT: u8 = 64; /// Returns a list of youtube videos for a given url diff --git a/src/providers/qalc.rs b/src/providers/qalc.rs index 28adae4..1def5a5 100644 --- a/src/providers/qalc.rs +++ b/src/providers/qalc.rs @@ -1,6 +1,7 @@ -use crate::utils::error::BotResult; use bot_coreutils::process::run_command_async; +use crate::utils::error::BotResult; + /// Runs the qalc command with the given expression pub async fn qalc(expression: &str) -> BotResult { let result = run_command_async( diff --git a/src/providers/settings.rs b/src/providers/settings.rs index 7345610..14f4f38 100644 --- a/src/providers/settings.rs +++ b/src/providers/settings.rs @@ -1,8 +1,10 @@ -use crate::utils::context_data::DatabaseContainer; -use crate::utils::error::{BotError, BotResult}; +use std::str::FromStr; + use serenity::client::Context; use serenity::model::prelude::GuildId; -use std::str::FromStr; + +use crate::utils::context_data::DatabaseContainer; +use crate::utils::error::{BotError, BotResult}; pub static ALL_SETTINGS: &[Setting] = &[ Setting::MusicAutoShuffle, diff --git a/src/utils/context_data.rs b/src/utils/context_data.rs index 5c0fd19..b8132ad 100644 --- a/src/utils/context_data.rs +++ b/src/utils/context_data.rs @@ -1,6 +1,10 @@ use std::collections::HashMap; +use std::env; use std::sync::Arc; +use bot_database::Database; +use sauce_api::prelude::SauceNao; +use serenity::client::Context; use serenity::model::id::GuildId; use serenity::prelude::TypeMapKey; use tokio::sync::Mutex; @@ -8,10 +12,6 @@ use tokio::sync::Mutex; use crate::providers::music::queue::MusicQueue; use crate::providers::music::spotify::SpotifyApi; use crate::utils::messages::EventDrivenMessage; -use bot_database::Database; -use sauce_api::prelude::SauceNao; -use serenity::client::Context; -use std::env; pub struct Store; diff --git a/src/utils/logging.rs b/src/utils/logging.rs index c2a323b..0a80b08 100644 --- a/src/utils/logging.rs +++ b/src/utils/logging.rs @@ -4,13 +4,14 @@ * See LICENSE for more information */ -use chrono::Local; -use colored::*; -use log::{Level, LevelFilter}; use std::fs; use std::path::PathBuf; use std::str::FromStr; +use chrono::Local; +use colored::*; +use log::{Level, LevelFilter}; + /// Initializes the env_logger with a custom format /// that also logs the thread names pub fn init_logger() { diff --git a/src/utils/messages.rs b/src/utils/messages.rs index 15e1c80..e58cba3 100644 --- a/src/utils/messages.rs +++ b/src/utils/messages.rs @@ -1,10 +1,12 @@ -use crate::utils::error::BotResult; +use std::sync::Arc; + use serenity::async_trait; use serenity::builder::{CreateMessage, EditMessage}; use serenity::http::{CacheHttp, Http}; use serenity::model::channel::{Message, Reaction}; use serenity::model::id::{ChannelId, MessageId}; -use std::sync::Arc; + +use crate::utils::error::BotResult; #[async_trait] pub trait EventDrivenMessage: Send + Sync { diff --git a/src/utils/mod.rs b/src/utils/mod.rs index f59d102..165d02c 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -1,7 +1,8 @@ -use crate::utils::error::BotResult; use serenity::client::Context; use serenity::model::channel::Message; +use crate::utils::error::BotResult; + pub(crate) mod context_data; pub(crate) mod error; pub(crate) mod logging;