From 20d906c3ba1b364a708f235b983c353019ec7a3c Mon Sep 17 00:00:00 2001 From: ByteDice Date: Sun, 8 Jun 2025 22:25:46 +0200 Subject: [PATCH] made all buttons work! Now just QA and bugfixing before merging to main and publishing! --- src/events.rs | 50 +++++++++++++++++++++++++++++++++++++--------- src/python/data.py | 10 +++++----- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/src/events.rs b/src/events.rs index 0bcda76..b4e48df 100644 --- a/src/events.rs +++ b/src/events.rs @@ -1,6 +1,6 @@ use crate::data::{get_mutex_data, update_re_data}; use crate::messages::{make_post_embed, make_removed_embed, EmbedOptions}; -use crate::re_cmds::generic_fns::{is_bk_mod_serenity, serenity_edit_msg_embed, serenity_send_msg}; +use crate::re_cmds::generic_fns::{is_bk_mod, is_bk_mod_serenity, serenity_edit_msg_embed, serenity_send_msg}; use crate::websocket::send_cmd_json; use crate::{lang, rs_println, Data, Error, CFG_DATA_RE}; @@ -55,11 +55,11 @@ async fn handle_buttons(ctx: &serenity::Context, data: &Data, interaction: &Inte return match component.data.custom_id.as_str() { "approve_btn" => approve_btn(ctx, data, &component.member.as_ref().unwrap(), component, url, true).await, - "remove_btn" => remove_btn(ctx, data, &component.member.as_ref().unwrap(), component, url, true).await, + "remove_btn" => remove_btn (ctx, data, &component.member.as_ref().unwrap(), component, url, true).await, "unapprove_btn" => approve_btn(ctx, data, &component.member.as_ref().unwrap(), component, url, false).await, - "unremove_btn" => remove_btn(ctx, data, &component.member.as_ref().unwrap(), component, url, false).await, - "unvote_btn" => Ok(()), - "vote_btn" => Ok(()), + "unremove_btn" => remove_btn (ctx, data, &component.member.as_ref().unwrap(), component, url, false).await, + "unvote_btn" => vote_btn (ctx, data, &component.member.as_ref().unwrap(), component, url, false).await, + "vote_btn" => vote_btn (ctx, data, &component.member.as_ref().unwrap(), component, url, true).await, _ => Err("Message button with that ID isn't handled.".into()) } } @@ -78,12 +78,12 @@ async fn approve_btn(ctx: &serenity::Context, data: &Data, c_member: &Member, co let new_data = &get_mutex_data(&data.reddit_data).await.unwrap()[CFG_DATA_RE][&url]; let e = make_post_embed(new_data, &url, true); + serenity_edit_msg_embed(ctx, &c_id, &m_id, e).await; + if approve { - serenity_edit_msg_embed(ctx, &c_id, &m_id, e).await; serenity_send_msg(ctx, component, lang!("dc_msg_re_post_approve_success"), true).await; } else { - serenity_edit_msg_embed(ctx, &c_id, &m_id, e).await; serenity_send_msg(ctx, component, lang!("dc_msg_re_post_disapprove_success"), true).await; } } @@ -114,15 +114,47 @@ async fn remove_btn(ctx: &serenity::Context, data: &Data, c_member: &Member, com if remove { e = make_removed_embed(new_data, &url, true); } else { e = make_post_embed (new_data, &url, true); } + serenity_edit_msg_embed(ctx, &c_id, &m_id, e).await; + if remove { - serenity_edit_msg_embed(ctx, &c_id, &m_id, e).await; serenity_send_msg(ctx, component, lang!("dc_msg_re_post_remove_success", &url), true).await; } else { - serenity_edit_msg_embed(ctx, &c_id, &m_id, e).await; serenity_send_msg(ctx, component, lang!("dc_msg_re_post_unremove_success", &url), true).await; } } + return Ok(()); +} + + +async fn vote_btn(ctx: &serenity::Context, data: &Data, c_member: &Member, component: &ComponentInteraction, url: String, vote: bool) -> Result<(), Error> { + let uid: u64 = c_member.user.id.into(); + let is_mod = is_bk_mod(data.bk_mods.clone(), uid); + + let r = send_cmd_json("set_vote_post", Some(json!([&url, uid, is_mod, true, !vote])), true).await.unwrap(); + + let c_id = component.channel_id; + let m_id = component.message.id; + + if r["value"].as_bool().unwrap() { + update_re_data(data).await; + let new_data = &get_mutex_data(&data.reddit_data).await.unwrap()[CFG_DATA_RE][&url]; + let e = make_post_embed(new_data, &url, true); + + serenity_edit_msg_embed(ctx, &c_id, &m_id, e).await; + + if vote { + if is_mod { serenity_send_msg(ctx, component, lang!("dc_msg_re_vote_mod_success"), true).await; } + else { serenity_send_msg(ctx, component, lang!("dc_msg_re_vote_success"), true).await; } + } + else { + serenity_send_msg(ctx, component, lang!("dc_msg_re_vote_remove_success"), true).await; + } + } + else { + if !vote { serenity_send_msg(ctx, component, lang!("dc_msg_re_vote_remove_havent"), true).await; } + } + return Ok(()); } \ No newline at end of file diff --git a/src/python/data.py b/src/python/data.py index e783bc6..74b5c12 100644 --- a/src/python/data.py +++ b/src/python/data.py @@ -207,8 +207,8 @@ def set_vote_post( return False votes = bot.data[botPy.RE_DATA_POSTS][url]["votes"] - re_voters: set[str] = set(votes["voters_re"]) - dc_voters: set[int] = set(votes["voters_dc"]) + re_voters: set[str] = set(votes["voters_re"]) + dc_voters: set[int] = set(votes["voters_dc"]) mod_voters: set[int] = set(votes["mod_voters"]) target_voters = mod_voters if mod_vote else (dc_voters if from_dc else re_voters) @@ -222,9 +222,9 @@ def set_vote_post( if user in target_voters: return False target_voters.add(user) - - bot.data[botPy.RE_DATA_POSTS][url]["votes"]["voters_re"] = list(re_voters) - bot.data[botPy.RE_DATA_POSTS][url]["votes"]["voters_dc"] = list(dc_voters) + + bot.data[botPy.RE_DATA_POSTS][url]["votes"]["voters_re"] = list(re_voters) + bot.data[botPy.RE_DATA_POSTS][url]["votes"]["voters_dc"] = list(dc_voters) bot.data[botPy.RE_DATA_POSTS][url]["votes"]["mod_voters"] = list(mod_voters) return True