-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
21 changed files
with
350 additions
and
148 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,4 @@ | ||
use crate::Context; | ||
|
||
use color_eyre::eyre::Result; | ||
|
||
/// make sure the wie is alive | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,4 @@ | ||
use crate::Context; | ||
|
||
use bottomify::bottom; | ||
use color_eyre::eyre::Result; | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
mod ask; | ||
mod bing; | ||
mod convert; | ||
mod random; | ||
mod version; | ||
|
||
pub use ask::ask; | ||
pub use bing::bing; | ||
pub use convert::convert; | ||
pub use random::random; | ||
pub use version::version; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,5 @@ | ||
use crate::colors::Colors; | ||
use crate::Context; | ||
|
||
use color_eyre::eyre::Result; | ||
|
||
/// get version info | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,23 @@ | ||
pub mod ask; | ||
pub mod bing; | ||
pub mod convert; | ||
pub mod copypasta; | ||
pub mod random; | ||
pub mod teawiespam; | ||
pub mod version; | ||
|
||
use crate::Data; | ||
|
||
use color_eyre::eyre::Report; | ||
use poise::Command; | ||
|
||
mod general; | ||
mod moderation; | ||
mod optional; | ||
|
||
pub fn to_global_commands() -> Vec<Command<Data, Report>> { | ||
vec![ | ||
ask::ask(), | ||
bing::bing(), | ||
convert::convert(), | ||
random::random(), | ||
copypasta::copypasta(), | ||
teawiespam::teawiespam(), | ||
version::version(), | ||
general::ask(), | ||
general::bing(), | ||
general::convert(), | ||
general::random(), | ||
general::version(), | ||
moderation::config(), | ||
] | ||
} | ||
|
||
pub fn to_guild_commands() -> Vec<Command<Data, Report>> { | ||
vec![copypasta::copypasta(), teawiespam::teawiespam()] | ||
vec![optional::copypasta(), optional::teawiespam()] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
use crate::settings::{Settings, SettingsProperties}; | ||
use crate::Context; | ||
|
||
use color_eyre::eyre::{eyre, Context as _, ContextCompat, Result}; | ||
use log::*; | ||
use poise::serenity_prelude::{GuildChannel, ReactionType}; | ||
|
||
#[poise::command( | ||
slash_command, | ||
subcommands("set", "get"), | ||
default_member_permissions = "MANAGE_GUILD" | ||
)] | ||
pub async fn config(_ctx: Context<'_>) -> Result<()> { | ||
Ok(()) | ||
} | ||
|
||
#[poise::command(slash_command, ephemeral, guild_only)] | ||
pub async fn set( | ||
ctx: Context<'_>, | ||
#[channel_types("Text")] | ||
#[description = "Where to redirect pins from channels. If empty (the default), the PinBoard is disabled."] | ||
pinboard_channel: Option<GuildChannel>, | ||
#[channel_types("Text")] | ||
#[description = "A channel that PinBoard will redirect pins from. This will be all channels if empty."] | ||
pinboard_watch: Option<GuildChannel>, | ||
#[channel_types("Text")] | ||
#[description = "Where to post messages that made it to the ReactBoard. If left empty, ReactBoard is disabled."] | ||
reactboard_channel: Option<GuildChannel>, | ||
#[description = "An emoji that will get messages on the ReactBoard. If empty, ReactBoard is disabled."] | ||
reactboard_reaction: Option<String>, | ||
#[description = "Minimum number of reactions a message needs to make it to the ReactBoard (defaults to 5)"] | ||
reactboard_requirement: Option<u64>, | ||
#[description = "Enables 'extra' commands like teawiespam and copypasta. Defaults to false."] | ||
optional_commands_enabled: Option<bool>, | ||
) -> Result<()> { | ||
let redis = &ctx.data().redis; | ||
let gid = ctx.guild_id().unwrap_or_default(); | ||
let mut settings = Settings::from_redis(redis, &gid).await?; | ||
let previous_settings = settings.clone(); | ||
|
||
if let Some(channel) = pinboard_channel { | ||
settings.pinboard_channel = Some(channel.id); | ||
} | ||
|
||
if let Some(watch) = pinboard_watch { | ||
if let Some(mut prev) = settings.pinboard_watch { | ||
prev.push(watch.id); | ||
settings.pinboard_watch = Some(prev); | ||
} else { | ||
let new = Vec::from([watch.id]); | ||
debug!("Setting pinboard_watch to {new:#?} for {} in Redis", gid); | ||
|
||
settings.pinboard_watch = Some(new); | ||
} | ||
} | ||
|
||
if let Some(channel) = reactboard_channel { | ||
debug!( | ||
"Setting reactboard_channel to {channel} for {} in Redis", | ||
gid | ||
); | ||
|
||
settings.reactboard_channel = Some(channel.id); | ||
} | ||
|
||
if let Some(requirement) = reactboard_requirement { | ||
debug!( | ||
"Setting reactboard_requirement to {requirement} for {} in Redis", | ||
gid | ||
); | ||
|
||
settings.reactboard_requirement = Some(requirement); | ||
} | ||
|
||
if let Some(reaction) = reactboard_reaction { | ||
let emoji = reaction | ||
.parse::<ReactionType>() | ||
.wrap_err_with(|| format!("Couldn't parse {reaction} as string!"))?; | ||
|
||
if let Some(mut prev) = settings.reactboard_reactions { | ||
prev.push(emoji); | ||
settings.reactboard_reactions = Some(prev); | ||
} else { | ||
let new = Vec::from([emoji]); | ||
debug!("Setting pinboard_watch to {new:#?} for {} in Redis", gid); | ||
|
||
settings.reactboard_reactions = Some(new); | ||
} | ||
} | ||
|
||
if let Some(enabled) = optional_commands_enabled { | ||
debug!( | ||
"Setting optional_commands_enabled to {enabled} for {} in Redis", | ||
gid | ||
); | ||
|
||
settings.optional_commands_enabled = enabled; | ||
} | ||
|
||
if previous_settings != settings { | ||
settings.save(redis).await?; | ||
ctx.reply("Configuration updated!").await?; | ||
} else { | ||
ctx.reply("No changes made, so i'm not updating anything") | ||
.await?; | ||
} | ||
|
||
Ok(()) | ||
} | ||
|
||
#[poise::command(slash_command, ephemeral, guild_only)] | ||
pub async fn get( | ||
ctx: Context<'_>, | ||
#[description = "The setting you want to get"] setting: SettingsProperties, | ||
) -> Result<()> { | ||
let gid = &ctx | ||
.guild_id() | ||
.wrap_err_with(|| eyre!("Failed to get GuildId from context!"))?; | ||
|
||
let settings = Settings::from_redis(&ctx.data().redis, gid).await?; | ||
|
||
let value = match setting { | ||
SettingsProperties::GuildId => settings.guild_id.to_string(), | ||
SettingsProperties::PinBoardChannel => format!("{:#?}", settings.pinboard_channel), | ||
SettingsProperties::PinBoardWatch => format!("{:#?}", settings.pinboard_watch), | ||
SettingsProperties::ReactBoardChannel => format!("{:#?}", settings.reactboard_channel), | ||
SettingsProperties::ReactBoardRequirement => { | ||
format!("{:?}", settings.reactboard_requirement) | ||
} | ||
SettingsProperties::ReactBoardReactions => format!("{:?}", settings.reactboard_reactions), | ||
SettingsProperties::OptionalCommandsEnabled => { | ||
settings.optional_commands_enabled.to_string() | ||
} | ||
}; | ||
|
||
ctx.say(format!("{setting}: {value}")).await?; | ||
|
||
Ok(()) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
mod config; | ||
|
||
pub use config::config; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
mod copypasta; | ||
mod teawiespam; | ||
|
||
pub use copypasta::copypasta; | ||
pub use teawiespam::teawiespam; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
use color_eyre::eyre::Result; | ||
use log::*; | ||
use poise::serenity_prelude::{Guild, UnavailableGuild}; | ||
|
||
use crate::{Data, Settings}; | ||
|
||
pub async fn handle_create(guild: &Guild, is_new: &bool, data: &Data) -> Result<()> { | ||
if !is_new && Settings::from_redis(&data.redis, &guild.id).await.is_ok() { | ||
debug!("Not recreating Redis key for {}", guild.id); | ||
return Ok(()); | ||
} | ||
|
||
info!("Creating new Redis key for {}", guild.id); | ||
Settings::new_redis(&data.redis, &guild.id).await?; | ||
Ok(()) | ||
} | ||
|
||
pub async fn handle_delete(guild: &UnavailableGuild, data: &Data) -> Result<()> { | ||
let redis = &data.redis; | ||
|
||
info!("Deleting redis key for {}", guild.id); | ||
let settings = Settings::from_redis(redis, &guild.id).await?; | ||
settings.delete(redis).await?; | ||
|
||
Ok(()) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.