made 1 button do something. Only all of them left because it doesn't do what it should.
This commit is contained in:
+47
-5
@@ -1,6 +1,7 @@
|
||||
use crate::re_cmds::generic_fns::{embed_to_json, is_bk_mod_serenity, serenity_send_msg};
|
||||
use crate::{rs_println, Data, Error};
|
||||
|
||||
use poise::serenity_prelude::{self as serenity, ActivityData};
|
||||
use poise::serenity_prelude::{self as serenity, ActivityData, ComponentInteraction, Interaction, Member, Ready};
|
||||
|
||||
use std::future::Future;
|
||||
use std::pin::Pin;
|
||||
@@ -9,10 +10,20 @@ pub fn event_handler<'a>(
|
||||
ctx: &'a serenity::Context,
|
||||
event: &'a serenity::FullEvent,
|
||||
_framework: poise::FrameworkContext<'a, Data, Error>,
|
||||
_data: &'a Data,
|
||||
data: &'a Data,
|
||||
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
|
||||
Box::pin(async move {
|
||||
if let serenity::FullEvent::Ready { data_about_bot } = event {
|
||||
match event {
|
||||
serenity::FullEvent::Ready { data_about_bot } => on_ready(ctx, data_about_bot),
|
||||
serenity::FullEvent::InteractionCreate { interaction } => { let _ = handle_buttons(ctx, data, interaction).await; },
|
||||
_ => {}
|
||||
}
|
||||
return Ok(());
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
fn on_ready(ctx: &serenity::Context, data_about_bot: &Ready) {
|
||||
rs_println!(
|
||||
"Bot started as user \"{}\" with id {}",
|
||||
data_about_bot.user.name,
|
||||
@@ -25,6 +36,37 @@ pub fn event_handler<'a>(
|
||||
ctx.online();
|
||||
ctx.set_activity(Some(custom_activity));
|
||||
}
|
||||
return Ok(());
|
||||
})
|
||||
|
||||
|
||||
async fn handle_buttons(ctx: &serenity::Context, data: &Data, interaction: &Interaction) -> Result<(), Error> {
|
||||
let component = match interaction {
|
||||
Interaction::Component(component) => component,
|
||||
_ => return Err(Error::from("Not a message component interaction"))
|
||||
};
|
||||
|
||||
let i_msg = interaction.clone().message_component();
|
||||
if i_msg.is_none() { return Err(Error::from("message_component is None!")); }
|
||||
let i_embed = i_msg.unwrap().message.embeds[0].clone();
|
||||
|
||||
let json = embed_to_json(&i_embed);
|
||||
if json.is_err() { return Err(Error::from("Failed to pase message JSON!")); }
|
||||
|
||||
return match component.data.custom_id.as_str() {
|
||||
"approve_btn" => approve_btn(ctx, data, &component.member.as_ref().unwrap(), component).await,
|
||||
"remove_btn" => Ok(()),
|
||||
"unapprove_btn" => Ok(()),
|
||||
"unremove_btn" => Ok(()),
|
||||
"unvote_btn" => Ok(()),
|
||||
"vote_btn" => Ok(()),
|
||||
_ => Err("Message button with that ID isn't handled.".into())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async fn approve_btn(ctx: &serenity::Context, data: &Data, c_member: &Member, component: &ComponentInteraction) -> Result<(), Error> {
|
||||
if !is_bk_mod_serenity(ctx, data, c_member, component).await { return Ok(()); }
|
||||
|
||||
serenity_send_msg(ctx, component, "Hello from this stupid program that tastes oddly like pasta.".to_string(), true).await;
|
||||
|
||||
return Ok(());
|
||||
}
|
||||
+3
-2
@@ -1,6 +1,6 @@
|
||||
use serde_json::json;
|
||||
|
||||
use crate::data::get_mutex_data;
|
||||
use crate::data::{get_mutex_data, update_re_data};
|
||||
use crate::messages::send_msg;
|
||||
use crate::re_cmds::get::get_post_from_data;
|
||||
use crate::{data, websocket::send_cmd_json, Context, Error, CFG_DATA_RE};
|
||||
@@ -22,7 +22,7 @@ pub async fn cmd(
|
||||
) -> Result<(), Error>
|
||||
{
|
||||
if !is_bk_mod(ctx.data().bk_mods.clone(), ctx.author().id.get()) {
|
||||
let sr = get_readable_subreddits(ctx).await?;
|
||||
let sr = get_readable_subreddits(ctx.data()).await?;
|
||||
send_msg(ctx, lang!("dc_msg_re_permdeny_not_re_mod", sr), false, false).await;
|
||||
return Ok(());
|
||||
}
|
||||
@@ -59,6 +59,7 @@ pub async fn cmd(
|
||||
if a { send_msg(ctx, lang!("dc_msg_re_also_approved"), true, true).await; }
|
||||
}
|
||||
|
||||
update_re_data(ctx.data()).await;
|
||||
if let Some(post) = get_post_from_data(ctx, &reddit_data, &url).await? {
|
||||
send_embed_for_post(ctx, post, &url).await?;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use serde_json::{json, Value};
|
||||
|
||||
use crate::{data::{self, get_mutex_data}, lang, messages::send_msg, re_cmds::generic_fns::{get_readable_subreddits, is_bk_mod}, websocket, Context, Error, CFG_DATA_RE};
|
||||
use crate::{data::{self, get_mutex_data}, lang, messages::send_msg, re_cmds::generic_fns::is_bk_mod_msg, websocket, Context, Error, CFG_DATA_RE};
|
||||
|
||||
use super::generic_fns::send_embed_for_removed;
|
||||
|
||||
@@ -18,11 +18,7 @@ pub async fn cmd(
|
||||
#[description = "Wether to approve or disapprove the post"] disapprove: Option<bool>
|
||||
) -> Result<(), Error>
|
||||
{
|
||||
if !is_bk_mod(ctx.data().bk_mods.clone(), ctx.author().id.get()) {
|
||||
let sr = get_readable_subreddits(ctx).await?;
|
||||
send_msg(ctx, lang!("dc_msg_re_permdeny_not_re_mod", sr), false, false).await;
|
||||
return Ok(());
|
||||
}
|
||||
if is_bk_mod_msg(ctx).await { return Ok(()); }
|
||||
|
||||
data::update_re_data(ctx.data()).await;
|
||||
let reddit_data = get_mutex_data(&ctx.data().reddit_data).await?;
|
||||
|
||||
@@ -1,12 +1,38 @@
|
||||
use poise::serenity_prelude::{self as serenity, ComponentInteraction, CreateInteractionResponse, CreateInteractionResponseMessage, Embed, Member};
|
||||
use regex::Regex;
|
||||
use serde_json::Value;
|
||||
|
||||
use crate::{data::get_toml_mutex, messages::{make_post_embed, make_removed_embed, send_embed}, Context, Error};
|
||||
use crate::{data::get_toml_mutex, lang, messages::{make_post_embed, make_removed_embed, send_embed, send_msg, JSON_TEXT_END, JSON_TEXT_START}, Context, Data, Error};
|
||||
|
||||
pub fn is_bk_mod(mod_list: Vec<u64>, uid: u64) -> bool {
|
||||
return mod_list.contains(&uid);
|
||||
}
|
||||
|
||||
|
||||
pub async fn is_bk_mod_msg(ctx: Context<'_>) -> bool {
|
||||
if is_bk_mod(ctx.data().bk_mods.clone(), ctx.author().id.get()) { return true; }
|
||||
|
||||
let sr = get_readable_subreddits(ctx.data()).await.unwrap();
|
||||
send_msg(ctx, lang!("dc_msg_re_permdeny_not_re_mod", sr), false, false).await;
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
pub async fn is_bk_mod_serenity(ctx: &serenity::Context, data: &Data, author: &Member, component: &ComponentInteraction) -> bool {
|
||||
if is_bk_mod(data.bk_mods.clone(), author.user.id.get()) { return true; }
|
||||
|
||||
let sr = get_readable_subreddits(data).await.unwrap();
|
||||
serenity_send_msg(ctx, component, lang!("dc_msg_re_permdeny_not_re_mod", sr), true).await;
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
pub async fn serenity_send_msg(ctx: &serenity::Context, component: &ComponentInteraction, t: String, ephemeral: bool) {
|
||||
let r = CreateInteractionResponse::Message(CreateInteractionResponseMessage::new().content(t).ephemeral(ephemeral));
|
||||
let _ = component.create_response(ctx.http.clone(), r).await;
|
||||
}
|
||||
|
||||
|
||||
pub fn to_shorturl(url: &str) -> Result<String, &str> {
|
||||
let re = Regex::new(r"comments/([a-zA-Z0-9]+)").unwrap();
|
||||
|
||||
@@ -34,11 +60,22 @@ pub async fn send_embed_for_removed(ctx: Context<'_>, url: &str, post: &Value) {
|
||||
}
|
||||
|
||||
|
||||
pub async fn get_readable_subreddits(ctx: Context<'_>) -> Result<String, Error> {
|
||||
let d = get_toml_mutex(&ctx.data().cfg).await.unwrap();
|
||||
pub async fn get_readable_subreddits(data: &Data) -> Result<String, Error> {
|
||||
let d = get_toml_mutex(&data.cfg).await.unwrap();
|
||||
let sr = d["reddit"]["subreddits"].as_str().ok_or("Item of key \"subreddit\" is not a string type.\nTrace: `get_readable_subreddits -> let sr = ...`")?;
|
||||
let split: Vec<&str> = sr.split("+").collect();
|
||||
let join = split.join(", r/");
|
||||
|
||||
return Ok(join);
|
||||
}
|
||||
|
||||
|
||||
pub fn embed_to_json(embed: &Embed) -> Result<Value, serde_json::Error> {
|
||||
let msg_desc = embed.description.clone().unwrap();
|
||||
let msg_lines = msg_desc.split("\n");
|
||||
let msg_last_len = msg_lines.clone().last().unwrap().len();
|
||||
|
||||
let msg_json_str = &msg_lines.clone().last().unwrap()[JSON_TEXT_START.len()..msg_last_len - JSON_TEXT_END.len()];
|
||||
let msg_json: Result<Value, serde_json::Error> = serde_json::from_str(msg_json_str);
|
||||
return msg_json;
|
||||
}
|
||||
@@ -17,7 +17,7 @@ pub async fn cmd(
|
||||
) -> Result<(), Error>
|
||||
{
|
||||
if !is_bk_mod(ctx.data().bk_mods.clone(), ctx.author().id.get()) {
|
||||
let sr = get_readable_subreddits(ctx).await?;
|
||||
let sr = get_readable_subreddits(ctx.data()).await?;
|
||||
send_msg(ctx, lang!("dc_msg_re_permdeny_not_re_mod", sr), false, false).await;
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
+2
-10
@@ -3,7 +3,7 @@ use std::time::{SystemTime, UNIX_EPOCH};
|
||||
use poise::{serenity_prelude::{ChannelId, EditMessage, GetMessages, Http, Message, MessageId, UserId}, ReplyHandle};
|
||||
use serde_json::{json, Map, Value};
|
||||
|
||||
use crate::{data::{self, get_mutex_data, DC_POSTS_CHANNEL_KEY}, lang, messages::{edit_reply, embed_from_options, http_send_embed, make_post_embed, make_removed_embed, send_msg, JSON_TEXT_END, JSON_TEXT_START}, websocket::send_cmd_json, Context, Error, CFG_DATA_RE};
|
||||
use crate::{data::{self, get_mutex_data, DC_POSTS_CHANNEL_KEY}, lang, messages::{edit_reply, embed_from_options, http_send_embed, make_post_embed, make_removed_embed, send_msg}, re_cmds::generic_fns::embed_to_json, websocket::send_cmd_json, Context, Error, CFG_DATA_RE};
|
||||
|
||||
#[poise::command(
|
||||
slash_command,
|
||||
@@ -175,15 +175,7 @@ async fn msgs_to_json(msgs: Vec<Message>, reddit_data: &Value, max_age: u64) ->
|
||||
continue;
|
||||
}
|
||||
|
||||
let msg_desc = &msg.embeds[0].description.clone().unwrap();
|
||||
let msg_lines = msg_desc.split("\n");
|
||||
let msg_last_len = msg_lines.clone().last().unwrap().len();
|
||||
|
||||
if msg_last_len < 13 { continue; }
|
||||
|
||||
let msg_json_str = &msg_lines.clone().last().unwrap()[JSON_TEXT_START.len()..msg_last_len - JSON_TEXT_END.len()];
|
||||
|
||||
let msg_json = serde_json::from_str(msg_json_str);
|
||||
let msg_json = embed_to_json(&msg.embeds[0]);
|
||||
if msg_json.is_err() { continue; }
|
||||
|
||||
let mut u_json: Value = msg_json.unwrap();
|
||||
|
||||
Reference in New Issue
Block a user