C:/Program Files/Git/bk_week_approve command
This commit is contained in:
@@ -6,10 +6,12 @@
|
|||||||
- [x] ~~Put it in a JSON~~
|
- [x] ~~Put it in a JSON~~
|
||||||
- [x] ~~Multithread so it can run both Discord and Reddit bot!!!~~
|
- [x] ~~Multithread so it can run both Discord and Reddit bot!!!~~
|
||||||
- [ ] Allow updating the data autonomously and via manual commands.
|
- [ ] Allow updating the data autonomously and via manual commands.
|
||||||
- [ ] Manually add posts (via `u/[bot] add` or `/bk_week_add [url]`)
|
- [ ] Manually add posts
|
||||||
- [ ] Manually remove posts (via `/bk_week_remove [url]`)
|
- [ ] via `u/[bot] add`
|
||||||
- [ ] Manually approve posts (via `/bk_week_approve [url]`)
|
- [x] ~~via `/bk_week_add [url]`~~
|
||||||
- [ ] Manually un-approve posts (via `/bk_week_disapprove [url]`)
|
- [ ] Manually remove posts via `/bk_week_remove [url]`
|
||||||
|
- [ ] Manually approve posts via `/bk_week_approve [url]`
|
||||||
|
- [ ] Manually un-approve posts via `/bk_week_disapprove [url]`
|
||||||
- [x] ~~Automatically add scraped posts to JSON~~
|
- [x] ~~Automatically add scraped posts to JSON~~
|
||||||
- [ ] Automatically remove posts older than 7 days from JSON
|
- [ ] Automatically remove posts older than 7 days from JSON
|
||||||
- [x] ~~Function~~
|
- [x] ~~Function~~
|
||||||
|
|||||||
@@ -20,7 +20,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EXAMPLE VALUE DELETED": {
|
"EXAMPLE VALUE DELETED": {
|
||||||
"removed": true
|
"removed": true,
|
||||||
|
"removed_by": "ME!!!!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+35
-19
@@ -1,4 +1,4 @@
|
|||||||
use crate::{rs_println, websocket, Context, Error};
|
use crate::{rs_println, websocket, Context, Error, BK_WEEK};
|
||||||
use crate::messages::{send_embed, send_msg, EmbedOptions};
|
use crate::messages::{send_embed, send_msg, EmbedOptions};
|
||||||
use crate::data;
|
use crate::data;
|
||||||
|
|
||||||
@@ -49,10 +49,10 @@ async fn get_reddit_data(ctx: Context<'_>) -> Result<Value, Error> {
|
|||||||
|
|
||||||
|
|
||||||
async fn get_post_from_data(ctx: Context<'_>, reddit_data: &Value, url: &str) -> Result<Option<Value>, Error> {
|
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_weekly_art_posts") {
|
if let Some(bk_week) = reddit_data.get(BK_WEEK) {
|
||||||
if let Some(post) = bk_week.get(url) {
|
if let Some(post) = bk_week.get(url) {
|
||||||
if post.get("removed").is_some() {
|
if post.get("removed").is_some() {
|
||||||
send_post_removed_message(ctx, url).await;
|
send_post_removed_message(ctx, url, post.get("removed_by").unwrap().as_str().unwrap()).await;
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
return Ok(Some(post.clone()));
|
return Ok(Some(post.clone()));
|
||||||
@@ -101,7 +101,7 @@ async fn send_post_not_found_message(ctx: Context<'_>, url: &str) {
|
|||||||
send_msg(
|
send_msg(
|
||||||
ctx,
|
ctx,
|
||||||
format!(
|
format!(
|
||||||
r#"Post url \"<{}>\" not found: Post doesn't exist in the data!
|
r#"Post URL \"<{}>\" not found: Post doesn't exist in the data!
|
||||||
Hint: Run the command `/bk_week_add [URL]` in a Discord channel or `u/ByteDiceAssistant bk_week_add` in a Reddit post."#,
|
Hint: Run the command `/bk_week_add [URL]` in a Discord channel or `u/ByteDiceAssistant bk_week_add` in a Reddit post."#,
|
||||||
url
|
url
|
||||||
).trim().to_string(),
|
).trim().to_string(),
|
||||||
@@ -111,13 +111,13 @@ async fn send_post_not_found_message(ctx: Context<'_>, url: &str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async fn send_post_removed_message(ctx: Context<'_>, url: &str) {
|
async fn send_post_removed_message(ctx: Context<'_>, url: &str, rm_by: &str) {
|
||||||
send_msg(
|
send_msg(
|
||||||
ctx,
|
ctx,
|
||||||
format!(
|
format!(
|
||||||
r#"Post url \"<{}>\" is removed: Post is removed from the data!
|
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."#,
|
Hint: Run the command `/bk_week_add [URL]` in a Discord channel or `u/ByteDiceAssistant bk_week_add` in a Reddit post."#,
|
||||||
url
|
url, rm_by
|
||||||
).trim().to_string(),
|
).trim().to_string(),
|
||||||
true,
|
true,
|
||||||
true
|
true
|
||||||
@@ -152,7 +152,7 @@ pub async fn bk_week_add(
|
|||||||
data::update_re_data(ctx.data()).await;
|
data::update_re_data(ctx.data()).await;
|
||||||
let reddit_data = get_reddit_data(ctx).await.unwrap();
|
let reddit_data = get_reddit_data(ctx).await.unwrap();
|
||||||
|
|
||||||
if let Some(bk_week) = reddit_data.get("bk_weekly_art_posts") {
|
if let Some(bk_week) = reddit_data.get(BK_WEEK) {
|
||||||
websocket::send_cmd_json("add_post_url", json!([&url])).await;
|
websocket::send_cmd_json("add_post_url", json!([&url])).await;
|
||||||
|
|
||||||
if let Some(post) = bk_week.get(&url) {
|
if let Some(post) = bk_week.get(&url) {
|
||||||
@@ -170,12 +170,12 @@ pub async fn bk_week_add(
|
|||||||
|
|
||||||
|
|
||||||
async fn send_unremove_msg(ctx: Context<'_>, url: &str) {
|
async fn send_unremove_msg(ctx: Context<'_>, url: &str) {
|
||||||
send_msg(ctx, format!("Un-removed post with URL \"{}\"!", url), true, true).await;
|
send_msg(ctx, format!("Un-removed post with URL \"<{}>\"!", url), true, true).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async fn send_updated_msg(ctx: Context<'_>, url: &str) {
|
async fn send_updated_msg(ctx: Context<'_>, url: &str) {
|
||||||
send_msg(ctx, format!("Updated post with URL \"{}\"!", url), true, true).await;
|
send_msg(ctx, format!("Updated post with URL \"<{}>\"!", url), true, true).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -184,11 +184,9 @@ async fn send_updated_msg(ctx: Context<'_>, url: &str) {
|
|||||||
#[poise::command(slash_command, prefix_command)]
|
#[poise::command(slash_command, prefix_command)]
|
||||||
pub async fn bk_week_remove(
|
pub async fn bk_week_remove(
|
||||||
ctx: Context<'_>,
|
ctx: Context<'_>,
|
||||||
#[description = "The post URL"] url: Option<String>
|
#[description = "The post URL"] url: String
|
||||||
) -> Result<(), Error>
|
) -> Result<(), Error>
|
||||||
{
|
{
|
||||||
// update data
|
|
||||||
// use python_comms.rs to tell python to update its data
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,11 +196,31 @@ pub async fn bk_week_remove(
|
|||||||
#[poise::command(slash_command, prefix_command)]
|
#[poise::command(slash_command, prefix_command)]
|
||||||
pub async fn bk_week_approve(
|
pub async fn bk_week_approve(
|
||||||
ctx: Context<'_>,
|
ctx: Context<'_>,
|
||||||
#[description = "The post URL"] url: Option<String>
|
#[description = "The post URL"] url: String
|
||||||
) -> Result<(), Error>
|
) -> Result<(), Error>
|
||||||
{
|
{
|
||||||
// update data
|
data::update_re_data(ctx.data()).await;
|
||||||
// use python_comms.rs to tell python to update its data
|
let reddit_data = get_reddit_data(ctx).await.unwrap();
|
||||||
|
|
||||||
|
if let Some(post) = reddit_data.get(BK_WEEK).unwrap().get(&url) {
|
||||||
|
if post.get("removed").is_some() {
|
||||||
|
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!([true, &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;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
send_msg(ctx, format!("Unknown error!\nError trace: `bk_week_cmds.rs -> bk_week_approve() -> unwrap websocket result error`."), true, true).await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
send_post_not_found_message(ctx, &url).await;
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = websocket::send_cmd_json("set_approve_post", json!([true, &url]));
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,10 +230,8 @@ pub async fn bk_week_approve(
|
|||||||
#[poise::command(slash_command, prefix_command)]
|
#[poise::command(slash_command, prefix_command)]
|
||||||
pub async fn bk_week_disapprove(
|
pub async fn bk_week_disapprove(
|
||||||
ctx: Context<'_>,
|
ctx: Context<'_>,
|
||||||
#[description = "The post URL"] url: Option<String>
|
#[description = "The post URL"] url: String
|
||||||
) -> Result<(), Error>
|
) -> Result<(), Error>
|
||||||
{
|
{
|
||||||
// update data
|
|
||||||
// use python_comms.rs to tell python to update its data
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
+2
-2
@@ -3,7 +3,7 @@ use std::path::Path;
|
|||||||
|
|
||||||
use serde_json::{self, Value, json};
|
use serde_json::{self, Value, json};
|
||||||
|
|
||||||
use crate::Data;
|
use crate::{Data, BK_WEEK};
|
||||||
use crate::websocket::send_cmd_json;
|
use crate::websocket::send_cmd_json;
|
||||||
|
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ fn generate_re_data() {
|
|||||||
let preset_str = fs::read_to_string(PRESET_PATH_RE).unwrap();
|
let preset_str = fs::read_to_string(PRESET_PATH_RE).unwrap();
|
||||||
let mut preset_json: Value = serde_json::from_str(&preset_str).unwrap();
|
let mut preset_json: Value = serde_json::from_str(&preset_str).unwrap();
|
||||||
|
|
||||||
if let Some(bk_week) = preset_json["bk_weekly_art_posts"].as_object_mut() {
|
if let Some(bk_week) = preset_json[BK_WEEK].as_object_mut() {
|
||||||
bk_week.remove("EXAMPLE VALUE");
|
bk_week.remove("EXAMPLE VALUE");
|
||||||
bk_week.remove("EXAMPLE VALUE DELETED");
|
bk_week.remove("EXAMPLE VALUE DELETED");
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -47,6 +47,9 @@ type Error = Box<dyn std::error::Error + Send + Sync>;
|
|||||||
type Context<'a> = poise::Context<'a, Data, Error>;
|
type Context<'a> = poise::Context<'a, Data, Error>;
|
||||||
|
|
||||||
|
|
||||||
|
static BK_WEEK: &str = "bk_weekly_art_posts";
|
||||||
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let args = <Args as clap::Parser>::parse();
|
let args = <Args as clap::Parser>::parse();
|
||||||
@@ -140,7 +143,10 @@ async fn gen_bot(data: Data) -> Client {
|
|||||||
//cmds::rule(),
|
//cmds::rule(),
|
||||||
bk_week_cmds::bk_week_help(),
|
bk_week_cmds::bk_week_help(),
|
||||||
bk_week_cmds::bk_week_get(),
|
bk_week_cmds::bk_week_get(),
|
||||||
bk_week_cmds::bk_week_add()
|
bk_week_cmds::bk_week_add(),
|
||||||
|
//bk_week_cmds::bk_week_remove(),
|
||||||
|
bk_week_cmds::bk_week_approve(),
|
||||||
|
//bk_week_cmds::bk_week_disapprove()
|
||||||
],
|
],
|
||||||
event_handler: events::event_handler,
|
event_handler: events::event_handler,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
|||||||
+1
-5
@@ -1,4 +1,4 @@
|
|||||||
use crate::{rs_println, Context};
|
use crate::Context;
|
||||||
|
|
||||||
use poise::{serenity_prelude::CreateMessage, CreateReply, ReplyHandle};
|
use poise::{serenity_prelude::CreateMessage, CreateReply, ReplyHandle};
|
||||||
use poise::serenity_prelude::{Color, CreateEmbed, Timestamp};
|
use poise::serenity_prelude::{Color, CreateEmbed, Timestamp};
|
||||||
@@ -61,8 +61,6 @@ pub async fn send_embed(
|
|||||||
reply: bool
|
reply: bool
|
||||||
) -> Option<ReplyHandle<'_>>
|
) -> Option<ReplyHandle<'_>>
|
||||||
{
|
{
|
||||||
let r_text = format!("Sent embed: {}", options.title.clone().unwrap_or_else(|| "No title".to_string()));
|
|
||||||
|
|
||||||
let mut embed = CreateEmbed::new()
|
let mut embed = CreateEmbed::new()
|
||||||
.title (none_to_empty(options.title))
|
.title (none_to_empty(options.title))
|
||||||
.description(options.desc)
|
.description(options.desc)
|
||||||
@@ -79,13 +77,11 @@ pub async fn send_embed(
|
|||||||
};
|
};
|
||||||
|
|
||||||
let msg = ctx.send(r).await;
|
let msg = ctx.send(r).await;
|
||||||
rs_println!("{}", r_text);
|
|
||||||
return Some(msg.unwrap());
|
return Some(msg.unwrap());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
let r = CreateMessage::new().embeds(vec![embed]);
|
let r = CreateMessage::new().embeds(vec![embed]);
|
||||||
let _ = ctx.channel_id().send_message(ctx.http(), r).await;
|
let _ = ctx.channel_id().send_message(ctx.http(), r).await;
|
||||||
rs_println!("{}", r_text);
|
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-3
@@ -69,8 +69,8 @@ def read_data(bot: botPy.Bot):
|
|||||||
with open(data_path + "\\reddit_data_preset.json", "r") as f:
|
with open(data_path + "\\reddit_data_preset.json", "r") as f:
|
||||||
data_preset_json = json.load(f)
|
data_preset_json = json.load(f)
|
||||||
|
|
||||||
data_preset_json["bk_weekly_art_posts"].pop("EXAMPLE VALUE", None)
|
data_preset_json[BK_WEEKLY].pop("EXAMPLE VALUE", None)
|
||||||
data_preset_json["bk_weekly_art_posts"].pop("EXAMPLE VALUE DELETED", None)
|
data_preset_json[BK_WEEKLY].pop("EXAMPLE VALUE DELETED", None)
|
||||||
|
|
||||||
with open(data_path + "\\reddit_data.json", "w") as f:
|
with open(data_path + "\\reddit_data.json", "w") as f:
|
||||||
json.dump(data_preset_json, f, indent = 2)
|
json.dump(data_preset_json, f, indent = 2)
|
||||||
@@ -109,4 +109,12 @@ def add_post_to_data(bot: botPy.Bot, new_data: PostData, bypass_conditions: bool
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
py_print(f"Failed to add post \"{new_data.url}\": Already exists.")
|
py_print(f"Failed to add post \"{new_data.url}\": Already exists.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def set_approve_post(bot: botPy.Bot, approved: bool, url: str) -> bool:
|
||||||
|
if not hasattr(bot.data[BK_WEEKLY][url], "removed"):
|
||||||
|
bot.data[BK_WEEKLY][url]["approved"]["by_human"] = approved
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
+3
-3
@@ -102,7 +102,7 @@ def from_url(bot: botPy.Bot, url: str) -> tuple[bool, models.Submission]:
|
|||||||
return False, None
|
return False, None
|
||||||
|
|
||||||
|
|
||||||
def get_post_details(post: models.Submission):
|
def get_post_details(post: models.Submission) -> data.PostData:
|
||||||
media = has_media(post)
|
media = has_media(post)
|
||||||
|
|
||||||
return data.PostData(
|
return data.PostData(
|
||||||
@@ -116,11 +116,11 @@ def get_post_details(post: models.Submission):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def add_post_url(bot, url: str) -> bool:
|
def add_post_url(bot, url: str) -> bool:
|
||||||
result, post = from_url(bot, url)
|
result, post = from_url(bot, url)
|
||||||
|
|
||||||
if not result:
|
if not result:
|
||||||
return result
|
return result
|
||||||
|
|
||||||
post_data = get_post_details(post)
|
post_data = get_post_details(post)
|
||||||
data.add_post_to_data(bot, post_data, True)
|
return data.add_post_to_data(bot, post_data, True)
|
||||||
@@ -36,6 +36,7 @@ async def parse_json(response: str, bot: botPy.Bot):
|
|||||||
json_response = json.loads(json_str)
|
json_response = json.loads(json_str)
|
||||||
result = await json_to_func(json_response, bot)
|
result = await json_to_func(json_response, bot)
|
||||||
await ws_global.ping()
|
await ws_global.ping()
|
||||||
|
print(result)
|
||||||
await send_message(f"json:{json.dumps(result)}")
|
await send_message(f"json:{json.dumps(result)}")
|
||||||
except json.JSONDecodeError as e:
|
except json.JSONDecodeError as e:
|
||||||
if bot.args["dev"]: py_print(f"failed to parse json: {json_str}\n reason: {e}")
|
if bot.args["dev"]: py_print(f"failed to parse json: {json_str}\n reason: {e}")
|
||||||
@@ -60,7 +61,8 @@ async def json_to_func(v: dict, bot: botPy.Bot) -> dict:
|
|||||||
|
|
||||||
match v["value"]:
|
match v["value"]:
|
||||||
case "update_data_file": result = {"type": "result", "value": data.write_data(bot)}
|
case "update_data_file": result = {"type": "result", "value": data.write_data(bot)}
|
||||||
case "add_post_url": result = {"type": "result", "value": await posts.add_post_url(bot, *v["args"])}
|
case "add_post_url": result = {"type": "result", "value": posts.add_post_url(bot, *v["args"])}
|
||||||
|
case "set_approve_post": result = {"type": "result", "value": data.set_approve_post(bot, *v["args"])}
|
||||||
case _: value_supported = False
|
case _: value_supported = False
|
||||||
|
|
||||||
if bot.args["dev"] and not value_supported:
|
if bot.args["dev"] and not value_supported:
|
||||||
|
|||||||
Reference in New Issue
Block a user