diff --git a/Cargo.lock b/Cargo.lock index d5e060a..5946143 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -195,7 +195,7 @@ dependencies = [ [[package]] name = "bot-database" -version = "0.5.0" +version = "0.6.0" dependencies = [ "chrono", "diesel", diff --git a/bot-database/Cargo.toml b/bot-database/Cargo.toml index 57372b2..c5da86e 100644 --- a/bot-database/Cargo.toml +++ b/bot-database/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bot-database" -version = "0.5.0" +version = "0.6.0" authors = ["trivernis "] edition = "2018" diff --git a/bot-database/migrations/2021-04-21-095152_rename_gifs_table/down.sql b/bot-database/migrations/2021-04-21-095152_rename_gifs_table/down.sql new file mode 100644 index 0000000..e3b46cf --- /dev/null +++ b/bot-database/migrations/2021-04-21-095152_rename_gifs_table/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +ALTER TABLE media RENAME TO gifs; \ No newline at end of file diff --git a/bot-database/migrations/2021-04-21-095152_rename_gifs_table/up.sql b/bot-database/migrations/2021-04-21-095152_rename_gifs_table/up.sql new file mode 100644 index 0000000..65b3f9a --- /dev/null +++ b/bot-database/migrations/2021-04-21-095152_rename_gifs_table/up.sql @@ -0,0 +1,2 @@ +-- Your SQL goes here +ALTER TABLE gifs RENAME TO media; \ No newline at end of file diff --git a/bot-database/src/database/gifs.rs b/bot-database/src/database/media.rs similarity index 67% rename from bot-database/src/database/gifs.rs rename to bot-database/src/database/media.rs index 148929c..3cde521 100644 --- a/bot-database/src/database/gifs.rs +++ b/bot-database/src/database/media.rs @@ -9,42 +9,42 @@ use crate::Database; impl Database { /// Returns a list of all gifs in the database - pub async fn get_all_gifs(&self) -> DatabaseResult> { - use gifs::dsl; + pub async fn get_all_media(&self) -> DatabaseResult> { + use media::dsl; log::debug!("Loading all gifs from the database"); - let gifs: Vec = dsl::gifs.load_async::(&self.pool).await?; + let gifs: Vec = dsl::media.load_async::(&self.pool).await?; Ok(gifs) } /// Returns a list of gifs by assigned category - pub async fn get_gifs_by_category(&self, category: &str) -> DatabaseResult> { - use gifs::dsl; + pub async fn get_media_by_category(&self, category: &str) -> DatabaseResult> { + use media::dsl; log::debug!("Searching for gifs in category '{}'", category); - let gifs: Vec = dsl::gifs + let gifs: Vec = dsl::media .filter(dsl::category.eq(category)) - .load_async::(&self.pool) + .load_async::(&self.pool) .await?; Ok(gifs) } /// Adds a gif to the database - pub async fn add_gif( + pub async fn add_media( &self, url: &str, category: Option, name: Option, ) -> DatabaseResult<()> { - use gifs::dsl; + use media::dsl; log::debug!( "Inserting gif with url '{}' and name {:?} and category {:?}", url, name, category ); - insert_into(dsl::gifs) - .values(GifInsert { + insert_into(dsl::media) + .values(MediaInsert { url: url.to_string(), name, category, diff --git a/bot-database/src/database/mod.rs b/bot-database/src/database/mod.rs index 39e6ba6..1bd144d 100644 --- a/bot-database/src/database/mod.rs +++ b/bot-database/src/database/mod.rs @@ -1,16 +1,16 @@ pub use ephemeral_messages::*; -pub use gifs::*; pub use guild_playlists::*; pub use guild_playlists::*; +pub use media::*; pub use statistics::*; pub use youtube_songs::*; use crate::PoolConnection; mod ephemeral_messages; -mod gifs; mod guild_playlists; mod guild_settings; +mod media; mod statistics; mod youtube_songs; diff --git a/bot-database/src/models.rs b/bot-database/src/models.rs index 27816b6..5240fb1 100644 --- a/bot-database/src/models.rs +++ b/bot-database/src/models.rs @@ -32,7 +32,7 @@ pub struct GuildPlaylistInsert { } #[derive(Queryable, Debug, Clone)] -pub struct Gif { +pub struct Media { pub id: i64, pub category: Option, pub name: Option, @@ -40,8 +40,8 @@ pub struct Gif { } #[derive(Insertable, Debug)] -#[table_name = "gifs"] -pub struct GifInsert { +#[table_name = "media"] +pub struct MediaInsert { pub category: Option, pub name: Option, pub url: String, diff --git a/bot-database/src/schema.rs b/bot-database/src/schema.rs index 36a9abf..3395b30 100644 --- a/bot-database/src/schema.rs +++ b/bot-database/src/schema.rs @@ -6,15 +6,6 @@ table! { } } -table! { - gifs (id) { - id -> Int8, - category -> Nullable, - name -> Nullable, - url -> Varchar, - } -} - table! { guild_playlists (guild_id, name) { guild_id -> Int8, @@ -31,6 +22,15 @@ table! { } } +table! { + media (id) { + id -> Int8, + category -> Nullable, + name -> Nullable, + url -> Varchar, + } +} + table! { statistics (id) { id -> Int8, @@ -56,9 +56,9 @@ table! { allow_tables_to_appear_in_same_query!( ephemeral_messages, - gifs, guild_playlists, guild_settings, + media, statistics, youtube_songs, ); diff --git a/src/commands/misc/add_gif.rs b/src/commands/misc/add_media.rs similarity index 75% rename from src/commands/misc/add_gif.rs rename to src/commands/misc/add_media.rs index f0a040c..76b3767 100644 --- a/src/commands/misc/add_gif.rs +++ b/src/commands/misc/add_media.rs @@ -8,14 +8,14 @@ use serenity::framework::standard::{Args, CommandResult}; use serenity::model::channel::Message; #[command] -#[description("Simple ping test command")] +#[description("Adds media to the database")] #[usage(" [] []")] #[bucket("general")] -#[aliases("add-gif", "addgif")] +#[aliases("add_gif", "add-gif", "addgif", "add-media", "addmedia")] #[min_args(1)] #[max_args(3)] #[owners_only] -async fn add_gif(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult { +async fn add_media(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult { let url = args.single::()?; if !url::is_valid(&url) { @@ -26,10 +26,10 @@ async fn add_gif(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult let name = args.single_quoted::().ok(); let database = get_database_from_context(&ctx).await; - database.add_gif(&url, category, name).await?; + database.add_media(&url, category, name).await?; EphemeralMessage::create(&ctx.http, msg.channel_id, SHORT_TIMEOUT, |c| { c.reference_message(msg) - .content("Gif added to the database.") + .content("Media entry added to the database.") }) .await?; diff --git a/src/commands/misc/gifs.rs b/src/commands/misc/media.rs similarity index 65% rename from src/commands/misc/gifs.rs rename to src/commands/misc/media.rs index ca0b77d..a4597af 100644 --- a/src/commands/misc/gifs.rs +++ b/src/commands/misc/media.rs @@ -1,4 +1,4 @@ -use crate::messages::gifs::create_gifs_menu; +use crate::messages::gifs::create_media_menu; use crate::utils::context_data::get_database_from_context; use serenity::client::Context; use serenity::framework::standard::macros::command; @@ -9,10 +9,10 @@ use serenity::model::channel::Message; #[description("Displays a list of all gifs used by the bot")] #[bucket("general")] #[only_in(guilds)] -async fn gifs(ctx: &Context, msg: &Message) -> CommandResult { +async fn media(ctx: &Context, msg: &Message) -> CommandResult { let database = get_database_from_context(ctx).await; - let gifs = database.get_all_gifs().await?; - create_gifs_menu(ctx, msg.channel_id, gifs).await?; + let gifs = database.get_all_media().await?; + create_media_menu(ctx, msg.channel_id, gifs).await?; Ok(()) } diff --git a/src/commands/misc/mod.rs b/src/commands/misc/mod.rs index 0e4ad76..494b8d5 100644 --- a/src/commands/misc/mod.rs +++ b/src/commands/misc/mod.rs @@ -1,9 +1,9 @@ use serenity::framework::standard::macros::group; use about::ABOUT_COMMAND; -use add_gif::ADD_GIF_COMMAND; +use add_media::ADD_MEDIA_COMMAND; use clear::CLEAR_COMMAND; -use gifs::GIFS_COMMAND; +use media::MEDIA_COMMAND; use pain::PAIN_COMMAND; use ping::PING_COMMAND; use qalc::QALC_COMMAND; @@ -13,10 +13,10 @@ use time::TIME_COMMAND; use timezones::TIMEZONES_COMMAND; mod about; -mod add_gif; +mod add_media; mod clear; -mod gifs; pub(crate) mod help; +mod media; mod pain; mod ping; mod qalc; @@ -27,6 +27,6 @@ mod timezones; #[group] #[commands( - ping, stats, shutdown, time, timezones, qalc, about, add_gif, gifs, pain, clear + ping, stats, shutdown, time, timezones, qalc, about, add_media, media, pain, clear )] pub struct Misc; diff --git a/src/commands/misc/pain.rs b/src/commands/misc/pain.rs index 161b467..933186d 100644 --- a/src/commands/misc/pain.rs +++ b/src/commands/misc/pain.rs @@ -20,23 +20,23 @@ async fn pain(ctx: &Context, msg: &Message, args: Args) -> CommandResult { log::debug!("Got pain command"); let pain_type = args.message().to_lowercase(); let database = get_database_from_context(ctx).await; - let mut gifs = database - .get_gifs_by_category(format!("{}{}", CATEGORY_PREFIX, pain_type).as_str()) + let mut media = database + .get_media_by_category(format!("{}{}", CATEGORY_PREFIX, pain_type).as_str()) .await?; - if gifs.is_empty() { - log::debug!("No gif found for pain {}. Using 404", pain_type); - gifs = database - .get_gifs_by_category(format!("{}{}", CATEGORY_PREFIX, NOT_FOUND_PAIN).as_str()) + if media.is_empty() { + log::debug!("No media found for pain {}. Using 404", pain_type); + media = database + .get_media_by_category(format!("{}{}", CATEGORY_PREFIX, NOT_FOUND_PAIN).as_str()) .await?; } - let gif = gifs + let entry = media .into_iter() .choose(&mut rand::thread_rng()) .ok_or(BotError::from("No gifs found."))?; - log::trace!("Gif for pain is {:?}", gif); - msg.reply(ctx, gif.url).await?; + log::trace!("Gif for pain is {:?}", entry); + msg.reply(ctx, entry.url).await?; Ok(()) } diff --git a/src/commands/weeb/matsuri.rs b/src/commands/weeb/matsuri.rs index 0ad487f..430d6d4 100644 --- a/src/commands/weeb/matsuri.rs +++ b/src/commands/weeb/matsuri.rs @@ -6,7 +6,7 @@ use serenity::framework::standard::macros::command; use serenity::framework::standard::CommandResult; use serenity::model::channel::Message; -static GIF_CATEGORY: &str = "matsuri"; +static MEDIA_CATEGORY: &str = "matsuri"; #[command] #[description("Posts a random matsuri gif")] @@ -14,8 +14,8 @@ static GIF_CATEGORY: &str = "matsuri"; #[bucket("general")] async fn matsuri(ctx: &Context, msg: &Message) -> CommandResult { let database = get_database_from_context(ctx).await; - let gifs = database.get_gifs_by_category(GIF_CATEGORY).await?; - let gif = gifs + let media = database.get_media_by_category(MEDIA_CATEGORY).await?; + let gif = media .into_iter() .choose(&mut rand::thread_rng()) .ok_or(BotError::from("No gifs found."))?; diff --git a/src/commands/weeb/pekofy.rs b/src/commands/weeb/pekofy.rs index 5e1053d..9722ce5 100644 --- a/src/commands/weeb/pekofy.rs +++ b/src/commands/weeb/pekofy.rs @@ -7,7 +7,7 @@ use serenity::{framework::standard::macros::command, prelude::*}; use crate::utils::context_data::get_database_from_context; use crate::utils::error::{BotError, BotResult}; use crate::utils::get_previous_message_or_reply; -use bot_database::models::Gif; +use bot_database::models::Media; // return a normal peko in most cases static PEKOS: &[&str] = &[ @@ -18,7 +18,7 @@ static PEKOS: &[&str] = &[ "🇵 🇪 🇰 🇴", "p3k0", ]; -static GIF_CATEGORY: &str = "pain-peko"; +static MEDIA_CATEGORY: &str = "pain-peko"; #[command] #[description("Pekofy messages")] @@ -48,7 +48,7 @@ async fn pekofy(ctx: &Context, msg: &Message, args: Args) -> CommandResult { alpha_lowercase.retain(|c| c.is_alphanumeric()); let pekofied: String = if alpha_lowercase == "pain" { - random_pain_gif(ctx).await?.url + random_pain_media(ctx).await?.url } else if PEKOS.contains(&&*alpha_lowercase) { random_peko() } else { @@ -114,10 +114,10 @@ fn random_peko() -> String { } /// Chooses a random pain peko gif -async fn random_pain_gif(ctx: &Context) -> BotResult { +async fn random_pain_media(ctx: &Context) -> BotResult { let database = get_database_from_context(ctx).await; - let gifs = database.get_gifs_by_category(GIF_CATEGORY).await?; + let gifs = database.get_media_by_category(MEDIA_CATEGORY).await?; gifs.into_iter() .choose(&mut rand::thread_rng()) - .ok_or(BotError::from("No gifs found")) + .ok_or(BotError::from("No media found")) } diff --git a/src/messages/gifs.rs b/src/messages/gifs.rs index 788f91d..d74a4ea 100644 --- a/src/messages/gifs.rs +++ b/src/messages/gifs.rs @@ -1,5 +1,5 @@ use crate::utils::error::BotResult; -use bot_database::models::Gif; +use bot_database::models::Media; use bot_serenityutils::menu::{MenuBuilder, Page}; use serenity::builder::CreateMessage; use serenity::client::Context; @@ -7,16 +7,16 @@ use serenity::model::id::ChannelId; use std::time::Duration; /// Creates a new gifs embed -pub async fn create_gifs_menu( +pub async fn create_media_menu( ctx: &Context, channel_id: ChannelId, - gifs: Vec, + media: Vec, ) -> BotResult<()> { - let total_pages = (gifs.len() as f32 / 10.0).ceil() as usize; - let pages: Vec = gifs + let total_pages = (media.len() as f32 / 10.0).ceil() as usize; + let pages: Vec = media .chunks(10) .enumerate() - .map(|(page, gifs)| create_gifs_page(page + 1, total_pages, gifs.to_vec())) + .map(|(page, media)| create_media_page(page + 1, total_pages, media.to_vec())) .collect(); MenuBuilder::new_paginator() @@ -30,21 +30,21 @@ pub async fn create_gifs_menu( } /// Creates a new gif page -pub fn create_gifs_page(page: usize, total_pages: usize, gifs: Vec) -> Page<'static> { +pub fn create_media_page(page: usize, total_pages: usize, media: Vec) -> Page<'static> { let mut message = CreateMessage::default(); - let description_lines: Vec = gifs + let description_lines: Vec = media .into_iter() - .map(|g| { + .map(|m| { format!( "{} - {} - [Source]({})", - g.category.unwrap_or("*N/A*".to_string()), - g.name.unwrap_or("*N/A*".to_string()), - g.url + m.category.unwrap_or("*N/A*".to_string()), + m.name.unwrap_or("*N/A*".to_string()), + m.url ) }) .collect(); message.embed(|e| { - e.title("Gifs") + e.title("Media") .description(description_lines.join("\n")) .footer(|f| f.text(format!("Page {} of {}", page, total_pages))) });