diff options
Diffstat (limited to 'src/commands/optional')
| -rw-r--r-- | src/commands/optional/copypasta.rs | 80 | ||||
| -rw-r--r-- | src/commands/optional/mod.rs | 5 | ||||
| -rw-r--r-- | src/commands/optional/teawiespam.rs | 20 |
3 files changed, 105 insertions, 0 deletions
diff --git a/src/commands/optional/copypasta.rs b/src/commands/optional/copypasta.rs new file mode 100644 index 0000000..ea23f5f --- /dev/null +++ b/src/commands/optional/copypasta.rs @@ -0,0 +1,80 @@ +use crate::{Context, Settings}; + +use std::collections::HashMap; + +use color_eyre::eyre::{eyre, Result}; +use include_dir::{include_dir, Dir}; +use log::*; + +const FILES: Dir = include_dir!("src/copypastas"); + +#[allow(clippy::upper_case_acronyms)] +#[derive(Debug, poise::ChoiceParameter)] +pub enum Copypastas { + Astral, + DVD, + Egrill, + HappyMeal, + Sus, + TickTock, + Twitter, +} + +impl Copypastas { + fn as_str(&self) -> &str { + match self { + Copypastas::Astral => "astral", + Copypastas::DVD => "dvd", + Copypastas::Egrill => "egrill", + Copypastas::HappyMeal => "happymeal", + Copypastas::Sus => "sus", + Copypastas::TickTock => "ticktock", + Copypastas::Twitter => "twitter", + } + } +} + +fn get_copypasta(name: Copypastas) -> Result<String> { + let mut files: HashMap<&str, &str> = HashMap::new(); + + for file in FILES.files() { + let name = file + .path() + .file_stem() + .ok_or_else(|| eyre!("couldn't get file stem from {file:#?}"))? + .to_str() + .ok_or_else(|| eyre!("couldn't convert file stem to str!"))?; + + let contents = file + .contents_utf8() + .ok_or_else(|| eyre!("couldnt get contents from copypasta!"))?; + + // refer to files by their name w/o extension + files.insert(name, contents); + } + + if files.contains_key(name.as_str()) { + Ok(files[name.as_str()].to_string()) + } else { + Err(eyre!("couldnt find copypasta {name}!")) + } +} + +/// ask teawie to send funni copypasta +#[poise::command(slash_command)] +pub async fn copypasta( + ctx: Context<'_>, + #[description = "the copypasta you want to send"] copypasta: Copypastas, +) -> Result<()> { + let gid = ctx.guild_id().unwrap_or_default(); + let settings = Settings::from_redis(&ctx.data().redis, &gid).await?; + + if !settings.optional_commands_enabled { + debug!("Not running copypasta command in {gid} since it's disabled"); + return Ok(()); + } + + ctx.say(get_copypasta(copypasta)?).await?; + + Ok(()) +} diff --git a/src/commands/optional/mod.rs b/src/commands/optional/mod.rs new file mode 100644 index 0000000..451deeb --- /dev/null +++ b/src/commands/optional/mod.rs @@ -0,0 +1,5 @@ +mod copypasta; +mod teawiespam; + +pub use copypasta::copypasta; +pub use teawiespam::teawiespam; diff --git a/src/commands/optional/teawiespam.rs b/src/commands/optional/teawiespam.rs new file mode 100644 index 0000000..c1b3b29 --- /dev/null +++ b/src/commands/optional/teawiespam.rs @@ -0,0 +1,20 @@ +use crate::{Context, Settings}; + +use color_eyre::eyre::Result; +use log::*; + +/// teawie will spam you. +#[poise::command(slash_command, prefix_command)] +pub async fn teawiespam(ctx: Context<'_>) -> Result<()> { + let gid = ctx.guild_id().unwrap_or_default(); + let settings = Settings::from_redis(&ctx.data().redis, &gid).await?; + + if !settings.optional_commands_enabled { + debug!("Not running teawiespam in {gid} since it's disabled"); + return Ok(()); + } + + let wies = "<:teawiesmile:1056438046440042546>".repeat(50); + ctx.say(wies).await?; + Ok(()) +} |
