added config file

This commit is contained in:
2025-03-05 19:20:36 +01:00
parent 412e04b4dc
commit 4d9e015d36
13 changed files with 178 additions and 96 deletions
+9 -46
View File
@@ -1,7 +1,7 @@
use crate::websocket::send_cmd_json;
use crate::{cmds, rs_println, websocket, Context, Data, Error, BK_WEEK};
use crate::{cmds, rs_println, websocket, Context, Error, BK_WEEK};
use crate::messages::*;
use crate::data::{self, dc_bind_bk};
use crate::data::{self, dc_bind_bk, get_mutex_data};
use std::collections::HashMap;
use std::fs;
@@ -81,7 +81,7 @@ pub async fn bk_week_get(
{
data::update_re_data(ctx.data()).await;
let reddit_data = get_reddit_data(ctx.data()).await?;
let reddit_data = get_mutex_data(&ctx.data().reddit_data).await?;
if let Some(post) = get_post_from_data(ctx, &reddit_data, &url).await? {
send_embed_for_post(ctx, post, &url).await?;
@@ -90,14 +90,6 @@ pub async fn bk_week_get(
return Ok(());
}
pub async fn get_reddit_data(data: &Data) -> Result<Value, Error> {
let data_lock = data.reddit_data.lock().await;
return match data_lock.as_ref() {
Some(data) => Ok(data.clone()),
None => Err("Reddit data is corrupted".into()),
};
}
async fn get_post_from_data(ctx: Context<'_>, reddit_data: &Value, url: &str) -> Result<Option<Value>, Error> {
if let Some(bk_week) = reddit_data.get(BK_WEEK) {
@@ -186,7 +178,7 @@ pub async fn bk_week_add(
let shorturl = if shorturl_u.is_ok() { shorturl_u.unwrap() } else { url };
data::update_re_data(ctx.data()).await;
let reddit_data = get_reddit_data(ctx.data()).await.unwrap();
let reddit_data = get_mutex_data(&ctx.data().reddit_data).await?;
if let Some(bk_week) = reddit_data.get(BK_WEEK) {
let a = approve.unwrap_or_else(|| false);
@@ -293,7 +285,7 @@ pub async fn bk_week_approve(
}
data::update_re_data(ctx.data()).await;
let reddit_data = get_reddit_data(ctx.data()).await.unwrap();
let reddit_data = get_mutex_data(&ctx.data().reddit_data).await?;
approve_cmd(ctx, &url, &reddit_data, !disapprove.unwrap_or_else(|| false)).await;
@@ -392,7 +384,7 @@ pub async fn bk_week_update(
send_cmd_json("add_new_posts", Some(json!([max_age_secs]))).await;
data::update_re_data(ctx.data()).await;
let r_data = get_reddit_data(ctx.data()).await.unwrap();
let r_data = get_mutex_data(&ctx.data().reddit_data).await?;
let c_id_u = get_c_id(ctx).await;
@@ -464,8 +456,7 @@ async fn get_c_id(ctx: Context<'_>) -> Option<ChannelId> {
return None;
}
let d_lock = ctx.data().discord_data.lock().await;
let d = d_lock.as_ref().unwrap();
let d = get_mutex_data(&ctx.data().reddit_data).await.unwrap();
let c_id_u =
d["servers"]
[ctx.guild_id().unwrap().to_string()]
@@ -675,7 +666,7 @@ pub async fn bk_week_vote(
{
data::update_re_data(ctx.data()).await;
let uid = ctx.author().id.get();
let re_data = get_reddit_data(ctx.data()).await.unwrap();
let re_data = get_mutex_data(&ctx.data().reddit_data).await?;
let post_data = re_data[BK_WEEK].clone();
let unw_vote = un_vote.unwrap_or_else(|| false);
@@ -742,7 +733,7 @@ pub async fn bk_week_top(
) -> Result<(), Error>
{
let mut all: HashMap<&str, i32> = HashMap::new();
let posts = &get_reddit_data(ctx.data()).await.unwrap()[BK_WEEK];
let posts = &get_mutex_data(&ctx.data().reddit_data).await?[BK_WEEK];
let posts_u = posts.as_object().unwrap();
for (url, dat) in posts_u {
@@ -789,32 +780,4 @@ fn smallest_n<'a>(map: &'a HashMap<&'a str, i32>, n: usize) -> Vec<(&'a str, i32
let mut vec: Vec<_> = map.iter().collect();
vec.sort_unstable_by(|a, b| a.1.cmp(b.1));
vec.into_iter().take(n).map(|(&k, &v)| (k, v)).collect()
}
#[poise::command(
slash_command,
prefix_command,
owners_only,
required_bot_permissions = "SEND_MESSAGES | VIEW_CHANNEL"
)]
/// Changes the subreddit(s) the bot patrols in.
pub async fn bk_cfg_sr(
ctx: Context<'_>,
sr: String
) -> Result<(), Error>
{
let r = send_cmd_json("change_sr", Some(json!([sr]))).await;
if r.is_some() {
if r.unwrap()["value"].as_bool().unwrap() {
send_msg(ctx, "Successfully updated subreddits!".to_string(), true, true).await;
return Ok(());
}
}
send_msg(ctx, "Failed to update subreddits: Failed-type response from Python.".to_string(), true, true).await;
return Ok(());
}