From 7f0a1cd4764ccefdf83fceabf56cb6adab125043 Mon Sep 17 00:00:00 2001 From: ByteDice Date: Thu, 13 Feb 2025 18:21:06 +0100 Subject: [PATCH] added /bk_week_remove command --- TODO.md | 6 +++--- src/bk_week_cmds.rs | 29 +++++++++++++++++++++++++---- src/main.rs | 4 ++-- src/python/data.py | 10 +++++++++- src/python/py_websocket.py | 1 + src/websocket.rs | 5 +++++ 6 files changed, 45 insertions(+), 10 deletions(-) diff --git a/TODO.md b/TODO.md index 8ae2467..b072f30 100644 --- a/TODO.md +++ b/TODO.md @@ -9,12 +9,12 @@ - [ ] Manually add posts - [ ] via `u/[bot] add` - - [ ] Manually remove posts via `/bk_week_remove [url]` + - - [ ] Manually un-approve posts via `/bk_week_disapprove [url]` + - [ ] Automatically remove posts older than 7 days from JSON - + - [x] ~~Function~~ - [ ] Automate - [ ] Automatically approve posts that dont get caught by reverse image search (ris) - [ ] Log all posts in a Discord thread diff --git a/src/bk_week_cmds.rs b/src/bk_week_cmds.rs index a72302a..10a0bab 100644 --- a/src/bk_week_cmds.rs +++ b/src/bk_week_cmds.rs @@ -1,3 +1,4 @@ +use crate::websocket::send_cmd_json; use crate::{rs_println, websocket, Context, Error, BK_WEEK}; use crate::messages::{send_embed, send_msg, EmbedOptions}; use crate::data; @@ -135,7 +136,7 @@ async fn send_post_removed_message(ctx: Context<'_>, url: &str, rm_by: &str) { send_msg( ctx, format!( - r#"Post URL \"<{}>\" is removed: Post is removed from the data! (Removed by: {}) + r#"Post URL \"<{}>\" is removed: Post is removed from the data! (Removed by: `{}`) Hint: Run the command `/bk_week_add [URL]` in a Discord channel or `u/ByteDiceAssistant bk_week_add` in a Reddit post."#, url, rm_by ).trim().to_string(), @@ -219,6 +220,21 @@ pub async fn bk_week_remove( #[description = "The post URL"] url: String ) -> Result<(), Error> { + let auth = &ctx.author().name; + let r = send_cmd_json("remove_post_url", json!([&url, &auth])).await.unwrap(); + + if r["value"].as_bool().unwrap() { + send_msg( + ctx, + format!("Successfully flagged URL \"{}\" as `\"removed\": true` and `\"removed_by\": \"{}\"`", url, auth), + true, + true + ).await; + } + else { + send_post_not_found_message(ctx, &url).await; + } + return Ok(()); } @@ -246,9 +262,14 @@ async fn approve_cmd(ctx: Context<'_>, url: &str, reddit_data: &Value, approve: send_post_removed_message(ctx, &url, post.get("removed_by").unwrap().as_str().unwrap()).await; } - let r = websocket::send_cmd_json("set_approve_post", json!([approve, &url])).await; - if let Some(v) = r.unwrap().get("value") { - send_msg(ctx, format!("Successfully flagged URL \"<{}>\" as `approved:by_human`!", &url), true, true).await; + let r = websocket::send_cmd_json("set_approve_post", json!([approve, &url])).await.unwrap(); + if let Some(v) = r.get("value") { + if approve { + send_msg(ctx, format!("Successfully flagged URL \"<{}>\" as `approved:by_human`!", &url), true, true).await; + } + else { + send_msg(ctx, format!("Successfully removed flag `approved:by_human` from URL \"<{}>\"!", &url), true, true).await; + } } else { send_msg(ctx, format!("Unknown error!\nError trace: `bk_week_cmds.rs -> bk_week_approve() -> unwrap websocket result error`."), true, true).await; diff --git a/src/main.rs b/src/main.rs index 60bf565..af9ef33 100644 --- a/src/main.rs +++ b/src/main.rs @@ -146,9 +146,9 @@ async fn gen_bot(data: Data) -> Client { bk_week_cmds::bk_week_help(), bk_week_cmds::bk_week_get(), bk_week_cmds::bk_week_add(), - //bk_week_cmds::bk_week_remove(), + bk_week_cmds::bk_week_remove(), bk_week_cmds::bk_week_approve(), - //bk_week_cmds::bk_week_disapprove() + bk_week_cmds::bk_week_disapprove() ], event_handler: events::event_handler, ..Default::default() diff --git a/src/python/data.py b/src/python/data.py index 830c09f..635ba22 100644 --- a/src/python/data.py +++ b/src/python/data.py @@ -124,4 +124,12 @@ def set_approve_post(bot: botPy.Bot, approved: bool, url: str) -> bool: bot.data[BK_WEEKLY][url]["approved"]["by_human"] = approved return True - return False \ No newline at end of file + return False + + +def remove_post(bot: botPy.Bot, url: str, removed_by: str = "UNKNOWN") -> bool: + if url in bot.data[BK_WEEKLY]: + bot.data[BK_WEEKLY][url] = { "removed": True, "removed_by": removed_by } + return True + else: + return False \ No newline at end of file diff --git a/src/python/py_websocket.py b/src/python/py_websocket.py index 6e2358e..daa41c9 100644 --- a/src/python/py_websocket.py +++ b/src/python/py_websocket.py @@ -65,6 +65,7 @@ async def json_to_func(v: dict, bot: botPy.Bot) -> dict: match v["value"]: case "update_data_file": result = result_json(data.write_data(bot)) case "add_post_url": result = result_json(await posts.add_post_url(bot, *v["args"])) + case "remove_post_url": result = result_json(data.remove_post(bot, *v["args"])) case "set_approve_post": result = result_json(data.set_approve_post(bot, *v["args"])) case "stop_praw": result = result_json(await bot.stop()) case _: value_supported = False diff --git a/src/websocket.rs b/src/websocket.rs index d0b098d..7e2808f 100644 --- a/src/websocket.rs +++ b/src/websocket.rs @@ -62,6 +62,11 @@ pub async fn send_cmd_json(func_name: &str, func_args: Value) -> Option { let r = receive_response().await; rs_println!("Received from Python: [RESPONSE] {:?}", r); + + if r.is_none() { + rs_println!("--- Response from Python is None!"); + } + return r; } }