last Rust LANG files migrations (only python left)

This commit is contained in:
2026-03-05 15:33:58 +01:00
parent afa966804f
commit 9e890c9d7c
13 changed files with 114 additions and 101 deletions
+28 -3
View File
@@ -13,6 +13,10 @@
"vote": "Vote",
"unvote": "Un-vote"
},
"add": {
"success": "Added post with URL \"<{0}>\"!",
"approved": "Also approved it!"
},
"approve": {
"success": "Successfully approved the post!",
"disapprove": "Successfully disapproved the post!",
@@ -27,19 +31,39 @@
"removed": "Successfully removed vote!",
"mod": "Successfully voted (as moderator vote)!",
"post_removed": "Couldn't [vote / un-vote] the post because the post has been removed!",
"remove_hasnt_voted": "Couldn't remove your vote: You haven't voted on this post yet!"
"remove_hasnt_voted": "Couldn't remove your vote: You haven't voted on this post yet!",
"already": "Couldn't cast a vote: You have already voted on this post!",
"error": "Failed to [vote / un-vote]: Unknown internal error."
},
"update": {
"fetch": "\nFetching new posts & updating data file...",
"read": "✅\nReading messages in <#{1}>...",
"parse": "✅\nParsing messages to JSON...",
"add": "✅\nAdding new posts...",
"rm_dupe": "✅\nRemoving duplicate posts...",
"rm": "✅\nRemoving removed posts...",
"rm_old": "✅\nRemoving old posts (threshold: {1}d)...",
"editing": "✅\nEditing updated posts...",
"done": "✅\n## Done!"
},
"embed": {
"post": "Spoilers and vote length anonymizer for fair review!\n## Post Data:\n**Subreddit:** {0}\n**Post upvotes:** ||`{1:>6}`||\n**Moderator votes:** ||`{2:>6}`||\n**Media type:** `{3}`\n## Listing Data:\n**Added by:** human: {4} | bot: {5}\n**Approved:** {6}",
"post_removed": "## Removed by `{0}`\n**Reason:** {1}"
},
"help_404": "Reddit help file not found, someone likely deleted it.\n Hint: You can find the official help text at https://github.com/ByteDice/ByteDiceAssistant in `re_help.md`.\n**CAUTION:** The official help file may contain incorrect information if you're not using the official bot by Byte Dice."
"update_post": "Updated post with URL \"<{0}>\"!",
"help_404": "Reddit help file not found, someone likely deleted it.\n-# Hint: You can find the official help text at https://github.com/ByteDice/ByteDiceAssistant in `re_help.md`.\n**CAUTION:** The official help file may contain incorrect information if you're not using the official bot by Byte Dice.",
"post_404": "Post URL \"<{0}>\" not found: Post doesn't exist in the data!\n-# Hint: Run the command `/re_addpost [URL]` in a Discord channel or `u/ByteDiceAssistant add_post` in a Reddit post.",
"not_mod": "Permission denied: You are not a moderator of the subreddit(s) {0}",
"post_corrupted": "Post URL \"<{0}>\" not found: Post data is corrupted!\n-# Full details: Could not find key \"posts\" in data file \"re_data.json\"",
"shorturl": "ShortURL: <{0}>",
"shorturl_fail": "Couldn't convert to shortURL: Invalid Reddit URL format."
},
"db": {
"added_server": "Added your server to my database. Thanks for letting me steal it! (/s)",
"corrupted_data": "Couldn't add your server to the database! The database is corrupted!",
"server_404": "This server is not in the data!\n-# Hint: Run the command `/database AddServer` inside of a Discord server (requires administrator permission).",
"wwrps_404": "Could not find `wwrps_channel` in data!\n-# Hint: Run `/database WWRPSChannel` in a channel (requires administrator permission).",
"bk_404": "Could not find `re_posts_channel` in data!\n-# Hint: Run `/database RedditChannel` in a (preferably read-only) channel (requires administrator permission).",
"channel_bind": "Successfully added channel ID `{0}` to the database!",
"not_in_guild": "I am not a part of that guild.",
"saving_progress": "Saving data...",
@@ -61,5 +85,6 @@
"whoami": "**Bot \"owner\":** {0}\n**BK moderator:** {1}",
"mandatory_response": "Mandatory response message, please ignore.",
"cmd_404": "No command \"{0}\" found!\nHint: Try `/help` without any arguments or `/help <category>`"
}
},
"lang_load": "Successfully loaded the english language file!"
}
+24 -24
View File
@@ -16,31 +16,31 @@
//"dc_msg_embed_default_embed_desc": "Default english embed description.",
//"dc_msg_embed_re_post": "Spoilers and vote length anonymizer for fair review!\n## Post Data:\n**Subreddit:** {0}\n**Post upvotes:** ||`{1:>6}`||\n**Moderator votes:** ||`{2:>6}`||\n**Media type:** `{3}`\n## Listing Data:\n**Added by:** human: {4} | bot: {5}\n**Approved:** {6}",
//"dc_msg_embed_re_removed": "## Removed by `{0}`\n**Reason:** {1}",
"dc_msg_err_trace": "Unknown error!\nError trace: {0}",
"dc_msg_failed_shorturl_conversion": "Couldn't convert to shortURL: Invalid Reddit URL format.",
"dc_msg_mandatory_response": "Mandatory response message, please ignore.",
//"dc_msg_err_trace": "Unknown error!\nError trace: {0}",
//"dc_msg_failed_shorturl_conversion": "Couldn't convert to shortURL: Invalid Reddit URL format.",
//"dc_msg_mandatory_response": "Mandatory response message, please ignore.",
//"dc_msg_no_perms": "Missing permission in that server: {0}",
//"dc_msg_not_in_guild": "I am not a part of that guild.",
//"dc_msg_owner_data_save_complete": "Saving data... Done!",
//"dc_msg_owner_data_save": "Saving data...",
//"dc_msg_owner_shutdown": "Shutting down...",
"dc_msg_owner_shutdown_failed_confirmation": "Failed to shut down: Invalid confirmation.",
"dc_msg_re_already_voted": "Couldn't cast a vote: You have already voted on this post!",
"dc_msg_re_also_approved": "Also approved it!",
"dc_msg_re_data_corrupted": "Post URL \"<{0}>\" not found: Post data is corrupted!\n Full details: Could not find key \"posts\" in data file \"re_data.json\"",
//"dc_msg_owner_shutdown_failed_confirmation": "Failed to shut down: Invalid confirmation.",
//"dc_msg_re_already_voted": "Couldn't cast a vote: You have already voted on this post!",
//"dc_msg_re_also_approved": "Also approved it!",
//"dc_msg_re_data_corrupted": "Post URL \"<{0}>\" not found: Post data is corrupted!\n Full details: Could not find key \"posts\" in data file \"re_data.json\"",
"dc_msg_re_help_removed": "Reddit help file not found, someone likely deleted it.\n Hint: You can find the official help text at https://github.com/ByteDice/ByteDiceAssistant in `re_help.md`.\n**CAUTION:** The official help file may contain incorrect information if you're not using the official bot by Byte Dice.",
"dc_msg_re_permdeny_not_re_mod": "Permission denied: You are not a moderator of the subreddit(s) {0}",
"dc_msg_re_post_404": "Post URL \"<{0}>\" not found: Post doesn't exist in the data!\n Hint: Run the command `/re_addpost [URL]` in a Discord channel or `u/ByteDiceAssistant add_post` in a Reddit post.",
"dc_msg_re_post_add_success": "Added post with URL \"<{0}>\"!",
//"dc_msg_re_permdeny_not_re_mod": "Permission denied: You are not a moderator of the subreddit(s) {0}",
//"dc_msg_re_post_404": "Post URL \"<{0}>\" not found: Post doesn't exist in the data!\n Hint: Run the command `/re_addpost [URL]` in a Discord channel or `u/ByteDiceAssistant add_post` in a Reddit post.",
//"dc_msg_re_post_add_success": "Added post with URL \"<{0}>\"!",
//"dc_msg_re_post_approve_remove": "Couldn't approve the post because it has been removed!",
//"dc_msg_re_post_approve_success": "Successfully approved the post!",
//"dc_msg_re_post_disapprove_success": "Successfully disapproved the post!",
//"dc_msg_re_post_remove_success": "Successfully removed post with URL \"<{0}>\"!",
"dc_msg_re_post_unremove_success": "Successfully restored post with URL \"<{0}>\"!",
"dc_msg_re_post_update_success": "Updated post with URL \"<{0}>\"!",
//"dc_msg_re_post_unremove_success": "Successfully restored post with URL \"<{0}>\"!",
//"dc_msg_re_post_update_success": "Updated post with URL \"<{0}>\"!",
//"dc_msg_re_post_vote_removed_post": "Couldn't [vote / un-vote] the post because it has been removed!",
"dc_msg_re_posts_channel_404": "Could not find `re_posts_channel` in data!\nHint: Run `/database RedditChannel` in a (preferably read-only) channel (requires administrator permission).",
"dc_msg_re_vote_err": "Failed to [vote / un-vote]: Unknown internal error.",
//"dc_msg_re_vote_err": "Failed to [vote / un-vote]: Unknown internal error.",
//"dc_msg_re_vote_mod_success": "Successfully voted (as moderator vote)!",
//"dc_msg_re_vote_remove_havent": "Couldn't remove your vote: You haven't voted on this post yet!",
//"dc_msg_re_vote_remove_success": "Successfully removed vote!",
@@ -48,16 +48,16 @@
"dc_msg_reload_cfg_python_fail": "Failed to reload configs: Failed-type response from Python.",
"dc_msg_reload_cfg_success": "Successfully reloaded the configs!\nNew configs:\n```\n{0}\n```",
"dc_msg_removed_square_brackets": "[REMOVED] {0}",
"dc_msg_shorturl": "ShortURL: <{0}>",
"dc_msg_update_add": "{0}Adding new posts...",
"dc_msg_update_done": "{0}Done!",
"dc_msg_update_editing": "{0}Editing updated posts...",
"dc_msg_update_fetch": "{0}Fetching new posts & updating data file...",
"dc_msg_update_parse": "{0}Parsing messages to JSON...",
"dc_msg_update_read": "{0}Reading messages in <#{1}>...",
"dc_msg_update_removing_dupe": "{0}Removing duplicate posts...",
"dc_msg_update_removing_old": "{0}Removing old posts (threshold: {1}d)...",
"dc_msg_update_removing": "{0}Removing removed posts...",
//"dc_msg_shorturl": "ShortURL: <{0}>",
//"dc_msg_update_add": "{0}Adding new posts...",
//"dc_msg_update_done": "{0}Done!",
//"dc_msg_update_editing": "{0}Editing updated posts...",
//"dc_msg_update_fetch": "{0}Fetching new posts & updating data file...",
//"dc_msg_update_parse": "{0}Parsing messages to JSON...",
//"dc_msg_update_read": "{0}Reading messages in <#{1}>...",
//"dc_msg_update_removing_dupe": "{0}Removing duplicate posts...",
//"dc_msg_update_removing_old": "{0}Removing old posts (threshold: {1}d)...",
//"dc_msg_update_removing": "{0}Removing removed posts...",
//"dc_msg_whoami": "**Bot \"owner\":** {0}\n**BK moderator:** {1}",
//"dc_msg_wwrps_already_submitted": "You can't compete against yourself! Please wait until another player has submitted their RPS.",
//"dc_msg_wwrps_anon": "[Anonymous]",
@@ -67,7 +67,7 @@
//"dc_msg_wwrps_left_win": "P1 WINS",
//"dc_msg_wwrps_right_win": "P2 WINS",
//"dc_msg_wwrps_submitting": "Submitting your RPS... Please wait for another contestant to compete against you.",
"log_lang_load_success": "Successfully loaded the english language file!",
//"log_lang_load_success": "Successfully loaded the english language file!",
//"none": "None",
"py_re_response_suffix": "^(I am not an AI, I am just a bot. This action was performed automatically by the way. You can report bugs and view my source code [here](https://github.com/ByteDice/ByteDiceAssistant)!)",
"py_re_response_weekly_add": "Successfully added your post to the weekly art submissions! Thank you for participating!",
+5 -5
View File
@@ -5,7 +5,6 @@ use crate::messages::send_msg;
use crate::cmds::reddit::get::get_post_from_data;
use crate::{websocket::send_cmd_json, Context, Error};
use crate::cmds::reddit::generic_fns::{is_bk_mod_msg, send_embed_for_post, to_shorturl};
use crate::lang;
#[poise::command(
slash_command,
@@ -25,6 +24,7 @@ pub async fn cmd(
let shorturl_u = to_shorturl(&url);
let shorturl = &shorturl_u.unwrap_or(url.clone());
let short_s = shorturl.to_string();
let a = approve.unwrap_or(false);
let r = send_cmd_json("add_post_url", Some(json!([&shorturl, a, true])), true).await.unwrap();
@@ -47,12 +47,12 @@ pub async fn cmd(
if let Some(bk_week) = reddit_data.get(POSTS_KEY) {
if let Some(post) = bk_week.get(shorturl) {
if post["removed"]["removed"].as_bool().unwrap()
{ send_msg(ctx, lang!("dc_msg_re_post_unremove_success", &shorturl), true, true).await; }
else { send_msg(ctx, lang!("dc_msg_re_post_update_success", &shorturl), true, true).await; }
{ send_msg(ctx, ctx.data().lang.get("dc.re.remove.unremove", &[short_s]), true, true).await; }
else { send_msg(ctx, ctx.data().lang.get("dc.re.update_post", &[short_s]), true, true).await; }
}
else { send_msg(ctx, lang!("dc_msg_re_post_add_success", &shorturl), true, true).await; }
else { send_msg(ctx, ctx.data().lang.get("dc.re.add.success", &[short_s]), true, true).await; }
if a { send_msg(ctx, lang!("dc_msg_re_also_approved"), true, true).await; }
if a { send_msg(ctx, ctx.data().lang.get("dc.re.add.approved", &[]), true, true).await; }
}
if let Some(post) = get_post_from_data(ctx, &reddit_data, shorturl).await? {
+4 -7
View File
@@ -1,6 +1,6 @@
use serde_json::{json, Value};
use crate::{Context, Error, db::{reddit::POSTS_KEY}, lang, messages::send_msg, cmds::reddit::generic_fns::{is_bk_mod_msg, to_shorturl}, websocket};
use crate::{Context, Error, db::{reddit::POSTS_KEY}, messages::send_msg, cmds::reddit::generic_fns::{is_bk_mod_msg, to_shorturl}, websocket};
use super::generic_fns::send_embed_for_removed;
@@ -41,17 +41,14 @@ async fn approve_cmd(ctx: Context<'_>, url: &str, reddit_data: &Value, approve:
let r = websocket::send_cmd_json("set_approve_post", Some(json!([approve, &url])), true).await.unwrap();
if r["value"].as_bool().unwrap() {
if approve {
send_msg(ctx, lang!("dc_msg_re_post_approve_success"), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.re.approve.success", &[]), true, true).await;
}
else {
send_msg(ctx, lang!("dc_msg_re_post_disapprove_success"), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.re.approve.disapprove", &[]), true, true).await;
}
}
else {
send_msg(ctx, lang!("dc_msg_err_trace", "`re_cmds -> approve.rs -> cmd() -> unwrap websocket result error`"), true, true).await;
}
}
else {
send_msg(ctx, lang!("dc_msg_re_post_404"), false, false).await;
send_msg(ctx, ctx.data().lang.get("dc.re.post_404", &[]), false, false).await;
}
}
+5 -5
View File
@@ -2,7 +2,7 @@ use poise::serenity_prelude::{self as serenity, ChannelId, ComponentInteraction,
use regex::Regex;
use serde_json::Value;
use crate::{Context, Data, Error, lang, messages::{EmbedOptions, JSON_TEXT_END, JSON_TEXT_START, decode_and_decompress_json, embed_from_options, make_post_embed, make_removed_embed, send_embed, send_msg}};
use crate::{Context, Data, Error, messages::{EmbedOptions, JSON_TEXT_END, JSON_TEXT_START, decode_and_decompress_json, embed_from_options, make_post_embed, make_removed_embed, send_embed, send_msg}};
pub fn is_bk_mod(mod_list: Vec<u64>, uid: u64) -> bool {
return mod_list.contains(&uid);
@@ -13,7 +13,7 @@ pub async fn is_bk_mod_msg(ctx: Context<'_>) -> bool {
if is_bk_mod(ctx.data().env_vars.reddit_mod_discord_ids.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), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.re.not_mod", &[sr]), true, true).await;
return false
}
@@ -22,7 +22,7 @@ pub async fn is_bk_mod_serenity(ctx: &serenity::Context, data: &Data, author: &M
if is_bk_mod(data.env_vars.reddit_mod_discord_ids.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;
serenity_send_msg(ctx, component, data.lang.get("dc.re.not_mod", &[sr]), true).await;
return true
}
@@ -55,7 +55,7 @@ pub fn to_shorturl(url: &str) -> Result<String, &str> {
pub async fn send_embed_for_post(ctx: Context<'_>, post: Value, url: &str) -> Result<(), Error> {
send_embed(ctx, make_post_embed(&post, url, true), true).await;
send_embed(ctx, make_post_embed(&ctx.data().lang, &post, url, true), true).await;
return Ok(());
}
@@ -63,7 +63,7 @@ pub async fn send_embed_for_post(ctx: Context<'_>, post: Value, url: &str) -> Re
pub async fn send_embed_for_removed(ctx: Context<'_>, url: &str, post: &Value) {
send_embed(
ctx,
make_removed_embed(post, url, true),
make_removed_embed(&ctx.data().lang, post, url, true),
true
).await;
}
+3 -3
View File
@@ -1,6 +1,6 @@
use serde_json::Value;
use crate::{Context, Error, db::{reddit::{self, POSTS_KEY}}, lang, messages::send_msg, cmds::reddit::generic_fns::{send_embed_for_post, to_shorturl}, rs_println};
use crate::{Context, Error, db::{reddit::{self, POSTS_KEY}}, messages::send_msg, cmds::reddit::generic_fns::{send_embed_for_post, to_shorturl}, rs_println};
use super::generic_fns::send_embed_for_removed;
@@ -42,11 +42,11 @@ pub async fn get_post_from_data(ctx: Context<'_>, reddit_data: &Value, url: &str
return Ok(Some(post.clone()));
}
else {
send_msg(ctx, lang!("dc_msg_re_post_404", url), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.re.post_404", &[url.to_string()]), true, true).await;
}
}
else {
send_msg(ctx, lang!("dc_msg_re_data_corrupted", url), true, true).await;
send_msg(ctx, ctx.data().lang.get("cd.re.post_corrupted", &[url.to_string()]), true, true).await;
rs_println!("{}", serde_json::to_string_pretty(reddit_data)?);
}
return Ok(None);
+3 -3
View File
@@ -1,6 +1,6 @@
use serde_json::json;
use crate::{Context, Error, db::reddit, lang, messages::send_msg, cmds::reddit::{generic_fns::{is_bk_mod_msg, send_embed_for_removed, to_shorturl}, get::get_post_from_data}, websocket::send_cmd_json};
use crate::{Context, Error, db::reddit, messages::send_msg, cmds::reddit::{generic_fns::{is_bk_mod_msg, send_embed_for_removed, to_shorturl}, get::get_post_from_data}, websocket::send_cmd_json};
#[poise::command(
slash_command,
@@ -27,13 +27,13 @@ pub async fn cmd(
if r["value"].as_bool().unwrap() {
send_msg(
ctx,
lang!("dc_msg_re_post_remove_success", &shorturl),
ctx.data().lang.get("dc.re.remove.success", &[shorturl.to_string()]),
true,
true
).await;
}
else {
send_msg(ctx, lang!("dc_msg_re_post_404"), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.re.post_404", &[]), true, true).await;
}
reddit::update_data().await;
+3 -3
View File
@@ -1,4 +1,4 @@
use crate::{lang, messages::send_msg, cmds::reddit::generic_fns::to_shorturl, Context, Error};
use crate::{messages::send_msg, cmds::reddit::generic_fns::to_shorturl, Context, Error};
#[poise::command(
@@ -17,10 +17,10 @@ pub async fn cmd(
let shorturl = to_shorturl(&url);
if shorturl.is_ok() {
send_msg(ctx, lang!("dc_msg_shorturl", shorturl.unwrap()), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.re.shorturl", &[shorturl.unwrap()]), true, true).await;
}
else {
send_msg(ctx, lang!("dc_msg_failed_shorturl_conversion"), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.re.shorturl_fail", &[]), true, true).await;
}
return Ok(());
+23 -23
View File
@@ -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::{Context, Error, db::{discord::contains_server, keys::DC_POSTS_CHANNEL_KEY, reddit::{self, POSTS_KEY}}, lang, messages::{edit_reply, embed_from_options, make_post_embed, make_removed_embed, send_embed, send_msg, trim_post_json}, cmds::reddit::generic_fns::embed_to_json, rs_println, websocket::send_cmd_json};
use crate::{Context, Error, cmds::reddit::generic_fns::embed_to_json, db::{discord::contains_server, keys::DC_POSTS_CHANNEL_KEY, reddit::{self, POSTS_KEY}}, lang::Lang, messages::{edit_reply, embed_from_options, make_post_embed, make_removed_embed, send_embed, send_msg, trim_post_json}, rs_println, websocket::send_cmd_json};
#[poise::command(
slash_command,
@@ -34,7 +34,7 @@ pub async fn cmd(
let mut p_text = "`/re_updatediscord`:".to_string();
let progress = send_msg(ctx, p_text.clone(), true, true).await.unwrap();
p_text = update_progress(ctx, progress.clone(), p_text, lang!("dc_msg_update_fetch", "\n")).await;
p_text = update_progress(ctx, progress.clone(), p_text, ctx.data().lang.get("dc.re.update.fetch", &[])).await;
let max_age_u = max_age.unwrap_or(8);
let max_age_secs = max_age_u as u64 * (60 * 60 * 24);
@@ -49,55 +49,55 @@ pub async fn cmd(
let c_id_u = get_c_id(ctx).await;
if c_id_u.is_none() {
send_msg(ctx, lang!("dc_msg_re_posts_channel_404"), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.db.bk_404", &[]), true, true).await;
return Ok(());
}
let c_id = c_id_u.unwrap();
// Reading messages
p_text = update_progress(ctx, progress.clone(), p_text.clone(), lang!("dc_msg_update_read", "\n", c_id)).await;
p_text = update_progress(ctx, progress.clone(), p_text.clone(), ctx.data().lang.get("dc.re.update.read", &[c_id.to_string()])).await;
let msgs = read_msgs(http, ctx.framework().bot_id, c_id).await;
// Parsing messages to JSON
p_text = update_progress(ctx, progress.clone(), p_text.clone(), lang!("dc_msg_update_parse", "\n")).await;
p_text = update_progress(ctx, progress.clone(), p_text.clone(), ctx.data().lang.get("dc.re.update.parse", &[])).await;
let msgs_json = msgs_to_json(msgs, &r_data, max_age_secs).await;
if ctx.data().args.dev { rs_println!("Posts changelog: {}", msgs_json); }
// Adding new posts
p_text = update_progress(ctx, progress.clone(), p_text.clone(), lang!("dc_msg_update_add", "\n")).await;
p_text = update_progress(ctx, progress.clone(), p_text.clone(), ctx.data().lang.get("dc.re.update.add", &[])).await;
let weekly_art = r_data[POSTS_KEY].as_object().unwrap();
add_posts(ctx, weekly_art, &msgs_json, max_age_secs, max_results_final).await;
// Stop if only_add
if only_add.unwrap_or(false) {
send_msg(ctx, lang!("dc_msg_update_done", "`/bk_week_update`\n## "), true, true).await;
update_progress(ctx, progress.clone(), p_text, lang!("dc_msg_update_done", "\n## ")).await;
send_msg(ctx, ctx.data().lang.get("dc.re.update.done", &[]), true, true).await;
update_progress(ctx, progress.clone(), p_text, ctx.data().lang.get("dc.re.update.done", &[])).await;
return Ok(());
}
// Removing duplicate posts
p_text = update_progress(ctx, progress.clone(), p_text.clone(), lang!("dc_msg_update_removing_dupe", "\n")).await;
p_text = update_progress(ctx, progress.clone(), p_text.clone(), ctx.data().lang.get("dc.re.update.rm_dupe", &[])).await;
remove_dupes(http, c_id, &msgs_json).await;
// Removing removed posts
p_text = update_progress(ctx, progress.clone(), p_text.clone(), lang!("dc_msg_update_removing", "\n")).await;
remove_posts(http, c_id, weekly_art, &msgs_json).await;
p_text = update_progress(ctx, progress.clone(), p_text.clone(), ctx.data().lang.get("dc.re.update.rm", &[])).await;
remove_posts(http, &ctx.data().lang, c_id, weekly_art, &msgs_json).await;
// Removing old posts
if max_age_u > 0 {
p_text = update_progress(ctx, progress.clone(), p_text.clone(), lang!("dc_msg_update_removing_old", "\n", max_age_u)).await;
p_text = update_progress(ctx, progress.clone(), p_text.clone(), ctx.data().lang.get("dc.re.update.rm_old", &[max_age_u.to_string()])).await;
remove_old(http, c_id, &msgs_json).await;
send_cmd_json("remove_old_posts", Some(json!([max_age_secs])), true).await;
}
// Editing updated posts
p_text = update_progress(ctx, progress.clone(), p_text.clone(), lang!("dc_msg_update_editing", "\n")).await;
edit_posts(http, c_id, weekly_art, &msgs_json).await;
p_text = update_progress(ctx, progress.clone(), p_text.clone(), ctx.data().lang.get("dc.re.update.editing", &[])).await;
edit_posts(http, &ctx.data().lang, c_id, weekly_art, &msgs_json).await;
// Done
update_progress(ctx, progress.clone(), p_text, lang!("dc_msg_update_done", "\n## ")).await;
send_msg(ctx, lang!("dc_msg_update_done", "`/bk_week_update`\n## "), true, true).await;
update_progress(ctx, progress.clone(), p_text, ctx.data().lang.get("dc.re.update.done", &[])).await;
send_msg(ctx, ctx.data().lang.get("dc.re.update.parse", &[]), true, true).await;
return Ok(());
}
@@ -113,7 +113,7 @@ async fn update_progress(ctx: Context<'_>, p: ReplyHandle<'_>, t: String, added_
async fn get_c_id(ctx: Context<'_>) -> Option<ChannelId> {
if !contains_server(ctx.data(), ctx.guild_id().unwrap().into()).await {
send_msg(ctx, lang!("dc_msg_data_server_404"), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.db.server_404", &[]), true, true).await;
return None;
}
@@ -256,31 +256,31 @@ async fn add_posts(ctx: Context<'_>, r_data: &Map<String, Value>, msgs_json: &Va
if now - post_date > max_age && max_age > 0 { continue; }
if r_data[url]["removed"]["removed"].as_bool().unwrap() {
send_embed(ctx, make_removed_embed(&r_data[url], url, false), false).await;
send_embed(ctx, make_removed_embed(&ctx.data().lang, &r_data[url], url, false), false).await;
continue;
}
send_embed(ctx, make_post_embed(&r_data[url], url, false), false).await;
send_embed(ctx, make_post_embed(&ctx.data().lang, &r_data[url], url, false), false).await;
}
}
async fn edit_posts(http: &Http, c_id: ChannelId, r_data: &Map<String, Value>, msgs_json: &Value) {
async fn edit_posts(http: &Http, lang: &Lang, c_id: ChannelId, r_data: &Map<String, Value>, msgs_json: &Value) {
for (url, msg_id) in msgs_json["updated"].as_object().unwrap() {
let mut msg = http.get_message(c_id, MessageId::new(msg_id.as_u64().unwrap())).await.unwrap();
let r = EditMessage::new()
.embeds(vec![embed_from_options(make_post_embed(&r_data[url], url, false))]);
.embeds(vec![embed_from_options(make_post_embed(lang, &r_data[url], url, false))]);
let _ = msg.edit(http, r).await;
}
}
async fn remove_posts(http: &Http, c_id: ChannelId, r_data: &Map<String, Value>, msgs_json: &Value) {
async fn remove_posts(http: &Http, lang: &Lang, c_id: ChannelId, r_data: &Map<String, Value>, msgs_json: &Value) {
for (url, msg_id) in msgs_json["removed"].as_object().unwrap() {
let mut msg = http.get_message(c_id, MessageId::new(msg_id.as_u64().unwrap())).await.unwrap();
let r = EditMessage::new()
.embeds(vec![embed_from_options(make_removed_embed(&r_data[url], url, false))]);
.embeds(vec![embed_from_options(make_removed_embed(lang, &r_data[url], url, false))]);
let _ = msg.edit(http, r).await;
}
+8 -8
View File
@@ -1,6 +1,6 @@
use serde_json::json;
use crate::{Context, Error, db::reddit::{self, POSTS_KEY}, lang, messages::send_msg, cmds::reddit::generic_fns::{is_bk_mod, send_embed_for_removed, to_shorturl}, websocket::send_cmd_json};
use crate::{Context, Error, db::reddit::{self, POSTS_KEY}, messages::send_msg, cmds::reddit::generic_fns::{is_bk_mod, send_embed_for_removed, to_shorturl}, websocket::send_cmd_json};
#[poise::command(
slash_command,
@@ -26,7 +26,7 @@ pub async fn cmd(
let shorturl = &shorturl_u.unwrap_or(url.clone());
if post_data.get(shorturl).is_none() {
send_msg(ctx, lang!("dc_msg_re_post_404"), false, false).await;
send_msg(ctx, ctx.data().lang.get("dc.re.post_404", &[]), false, false).await;
return Ok(());
}
if post_data[&shorturl]["removed"]["removed"].as_bool().unwrap() {
@@ -42,11 +42,11 @@ pub async fn cmd(
let voters = if is_mod { mod_voters } else { voters_dc };
if voters.contains(&json!(uid)) && !unw_vote {
send_msg(ctx, lang!("dc_msg_re_already_voted"), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.re.vote.already", &[]), true, true).await;
return Ok(());
}
else if !voters.contains(&json!(uid)) && unw_vote {
send_msg(ctx, lang!("dc_msg_re_vote_remove_havent"), true, true).await;
send_msg(ctx, ctx.data().lang.get("dc.re.vote.remove_hasnt_voted", &[]), true, true).await;
return Ok(());
}
@@ -54,13 +54,13 @@ pub async fn cmd(
let unw_r = r["value"].as_bool().unwrap();
if unw_r && !unw_vote && is_mod
{ send_msg(ctx, lang!("dc_msg_re_vote_mod_success"), true, true).await; }
{ send_msg(ctx, ctx.data().lang.get("dc.re.vote.mod", &[]), true, true).await; }
else if unw_r && !unw_vote && !is_mod
{ send_msg(ctx, lang!("dc_msg_re_vote_success"), true, true).await; }
{ send_msg(ctx, ctx.data().lang.get("dc.re.vote.success", &[]), true, true).await; }
else if unw_r && unw_vote
{ send_msg(ctx, lang!("dc_msg_re_vote_remove_success"), true, true).await; }
{ send_msg(ctx, ctx.data().lang.get("dc.re.vote.remove", &[]), true, true).await; }
else
{ send_msg(ctx, lang!("dc_msg_re_vote_err"), true, true).await; }
{ send_msg(ctx, ctx.data().lang.get("dc.re.vote.error", &[]), true, true).await; }
return Ok(());
}
-5
View File
@@ -19,11 +19,6 @@ impl From<Value> for Lang {
impl Lang {
pub fn new() -> Self {
return Lang { data: Value::Null };
}
pub fn from_file(filepath: PathBuf) -> Result<Self, Error> {
if !filepath.exists() { return Err(Error::from("LANG filepath not found!")); }
+1 -1
View File
@@ -48,7 +48,7 @@ async fn main() {
rs_println!("Generating and/or fetching data and config...");
let data = gen_data(args, env_vars).await;
rs_println!("[IMPORTANT] The below message is a test message, it should be written in the language you've selected\nTest message: {}", data.lang.get("log_lang_load_success", &[]));
rs_println!("[IMPORTANT] The below message is a test message, it should be written in the language you've selected\nTest message: {}", data.lang.get("lang_load", &[]));
// We start this here cuz we have all the data that we need
if data.args.py && !data.args.rs {
+7 -11
View File
@@ -1,6 +1,5 @@
use std::io::{Read, Write};
use crate::db::bot_data::Data;
use crate::Context;
use crate::lang::Lang;
@@ -11,7 +10,7 @@ use flate2::write::ZlibEncoder;
use flate2::Compression;
use poise::serenity_prelude::json::Value;
use poise::{serenity_prelude::CreateMessage, CreateReply, ReplyHandle};
use poise::serenity_prelude::{ChannelId, Color, CreateActionRow, CreateButton, CreateEmbed, CreateEmbedAuthor, EditMessage, Http, Message, ReactionType, Timestamp, UserId};
use poise::serenity_prelude::{ChannelId, Color, CreateActionRow, CreateButton, CreateEmbed, CreateEmbedAuthor, Http, Message, ReactionType, Timestamp, UserId};
use serde_json::json;
@@ -88,7 +87,6 @@ pub async fn send_msg(
}
#[allow(dead_code)]
pub async fn http_send_msg(
http: &Http,
c_id: ChannelId,
@@ -136,8 +134,7 @@ pub async fn send_embed(
}
#[allow(dead_code)]
pub async fn http_send_embed(
/* pub async fn http_send_embed(
http: &Http,
c_id: ChannelId,
options: EmbedOptions
@@ -153,7 +150,7 @@ pub async fn http_send_embed(
let msg = c_id.send_message(http, r).await;
return msg.ok();
}
} */
pub fn embed_from_options(options: EmbedOptions) -> CreateEmbed {
@@ -190,17 +187,16 @@ pub async fn edit_reply(
}
#[allow(dead_code)]
pub async fn http_edit_msg(
/* pub async fn http_edit_msg(
http: &Http,
mut msg: Message,
new_msg: EditMessage
) {
let _ = msg.edit(http, new_msg).await;
}
} */
pub async fn send_dm(msg: String, data: &Data) {
/*pub async fn send_dm(msg: String, data: &Data) {
let http = Http::new(&data.env_vars.token);
let c_msg = CreateMessage::new().content(msg);
@@ -210,7 +206,7 @@ pub async fn send_dm(msg: String, data: &Data) {
let user = UserId::new(uid);
let _ = user.dm(http.as_ref(), c_msg.clone()).await;
}
}
}*/