From 283c09bd1b1345ad4d331c43c728773e1247cf7d Mon Sep 17 00:00:00 2001 From: Joey Hines Date: Mon, 21 Apr 2025 10:57:39 -0600 Subject: [PATCH] Fix flipped social credit bounds for point ranges --- src/discord/admin.rs | 15 ++++++++-- src/discord/mod.rs | 4 +-- src/migrations/migration_7_flip_bounds.rs | 34 +++++++++++++++++++++++ src/migrations/mod.rs | 10 ++++++- 4 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 src/migrations/migration_7_flip_bounds.rs diff --git a/src/discord/admin.rs b/src/discord/admin.rs index 09c7f41..eb0f725 100644 --- a/src/discord/admin.rs +++ b/src/discord/admin.rs @@ -271,11 +271,20 @@ pub async fn remove_role( pub async fn add_social_credit_phrase( ctx: Context<'_>, #[description = "Phrase to look for, wrap in \"s if you want multiple words"] phrase: String, - #[description = "Upper limit of points to add/take away"] upper_limit: i64, - #[description = "Lower limit of points to take away"] lower_limit: i64, + #[description = "Lower limit of points to add/take away"] lower_limit: i64, + #[description = "Upper limit of points to take away"] upper_limit: i64, ) -> Result<(), Error> { + if upper_limit < lower_limit { + ctx.reply(format!( + "Invalid range, upper limit ({}) is less than lower limit ({})", + upper_limit, lower_limit + )) + .await?; + return Ok(()); + } + let social_credit_phrase = - SocialCreditPhrase::add_new_phrase(&ctx.data().db, phrase, upper_limit, lower_limit)?; + SocialCreditPhrase::add_new_phrase(&ctx.data().db, phrase, lower_limit, upper_limit)?; ctx.reply(format!( "Added new phrase '{}' with id `{}`", diff --git a/src/discord/mod.rs b/src/discord/mod.rs index 2be72dd..a4ede41 100644 --- a/src/discord/mod.rs +++ b/src/discord/mod.rs @@ -21,7 +21,7 @@ use crate::models::lil_fren::lil_fren_task; use crate::models::social_credit::SocialCreditPhrase; use crate::models::task::Task; use crate::user::User; -use log::{debug, error, info}; +use log::{error, info}; use poise::serenity_prelude::{GuildId, Http, Message, MessageBuilder, ReactionType, RoleId}; use poise::{FrameworkOptions, find_command, serenity_prelude as serenity}; use rand::prelude::IteratorRandom; @@ -128,7 +128,7 @@ async fn handle_message( give_coin(&data.db, new_message.author.id, 0.05, 10).await?; if let Some(phrase) = SocialCreditPhrase::check_if_match(&data.db, &new_message.content)? { - debug!( + info!( "{} matched phrase '{}' for social credit checking", new_message.author.name, phrase.phrase ); diff --git a/src/migrations/migration_7_flip_bounds.rs b/src/migrations/migration_7_flip_bounds.rs new file mode 100644 index 0000000..7975670 --- /dev/null +++ b/src/migrations/migration_7_flip_bounds.rs @@ -0,0 +1,34 @@ +use j_db::database::Database; +use j_db::migration::Migration; + +pub struct Migration7FlipBounds {} + +impl Migration for Migration7FlipBounds { + fn up(&self, db: &Database) -> j_db::error::Result<()> { + let tree = db.db.open_tree("SocialCreditPhrase")?; + + for entry in tree.iter() { + let (id, scp_bytes) = entry?; + + let mut scp = json::parse(std::str::from_utf8(&scp_bytes).unwrap()).unwrap(); + + let upper = scp["lower_bound"].clone(); + let lower = scp["upper_bound"].clone(); + + scp["lower_bound"] = lower; + scp["upper_bound"] = upper; + + tree.insert(id, scp.to_string().as_bytes())?; + } + + Ok(()) + } + + fn down(&self, _db: &Database) -> j_db::error::Result<()> { + Ok(()) + } + + fn version(&self) -> u64 { + 7 + } +} diff --git a/src/migrations/mod.rs b/src/migrations/mod.rs index 35a7425..64a2618 100644 --- a/src/migrations/mod.rs +++ b/src/migrations/mod.rs @@ -1,6 +1,7 @@ use crate::migrations::migration_4_update_random::Migration4UpdateRandoms; use crate::migrations::migration_5_update_motivation::Migration5UpdateMotivation; use crate::migrations::migration_6_add_social_credit::Migration6AddSocialCredit; +use crate::migrations::migration_7_flip_bounds::Migration7FlipBounds; use crate::migrations::migration2_remove_imgur::Migration2RemoveImgur; use crate::migrations::migration3_remove_img::Migration3RemoveImage; use j_db::database::Database; @@ -12,8 +13,9 @@ mod migration3_remove_img; mod migration_4_update_random; mod migration_5_update_motivation; mod migration_6_add_social_credit; +mod migration_7_flip_bounds; -pub const CURRENT_DB_VERSION: u64 = 6; +pub const CURRENT_DB_VERSION: u64 = 7; #[allow(clippy::single_match)] pub fn do_migration(db: &Database) { @@ -56,6 +58,12 @@ pub fn do_migration(db: &Database) { Direction::Up, ) .unwrap(), + 7 => migration::do_migration::( + db, + Migration7FlipBounds {}, + Direction::Up, + ) + .unwrap(), _ => {} } }