diff --git a/bk_week_help_re.md b/bk_week_help_re.md index 48f4fbf..e3062ca 100644 --- a/bk_week_help_re.md +++ b/bk_week_help_re.md @@ -6,7 +6,7 @@ Adds the post to the list of posts. - **Only moderators of a subreddit or the OP (Original Poster) can use this command.** ## `bk_week_vote` Adds a vote to the post. (see `/bk_week_vote` in the Discord help). -- **Anyone can use this command.** +- **Anyone can use this command. If a moderator uses it the vote will be flagged as a moderator vote.** ### **Examples** ``` "u/ByteDiceAssistant bk_week_add" diff --git a/src/messages.rs b/src/messages.rs index dfd3a18..25efde8 100644 --- a/src/messages.rs +++ b/src/messages.rs @@ -1,8 +1,10 @@ -use crate::Context; +use std::env; + +use crate::{Args, Context}; use poise::serenity_prelude::json::Value; use poise::{serenity_prelude::CreateMessage, CreateReply, ReplyHandle}; -use poise::serenity_prelude::{Color, CreateEmbed, CreateEmbedAuthor, Timestamp}; +use poise::serenity_prelude::{Color, CreateEmbed, CreateEmbedAuthor, Http, Timestamp, UserId}; use serde_json::json; @@ -135,6 +137,26 @@ pub async fn edit_msg( } +pub async fn send_dm(msg: String, args: Args) { + let uid = env::var("ASSISTANT_DM_USER").expect("Missing ASSISTANT_DM_USER env var!").parse::().unwrap(); + let user = UserId::new(uid); + + let token: String; + if !args.test { + token = std::env::var("ASSISTANT_TOKEN").expect("Missing ASSISTANT_TOKEN env var!"); + } + else { + token = std::env::var("ASSISTANT_TOKEN_TEST").expect("Missing ASSISTANT_TOKEN_TEST env var!"); + }; + + let http = Http::new(&token); + + let c_msg = CreateMessage::new().content(msg); + + let _ = user.dm(http, c_msg).await; +} + + pub fn embed_post(post_data: &Value, url: &str, empheral: bool) -> EmbedOptions { let media_type = &post_data["post_data"]["media_type"]; let re_votes = &post_data["votes"]["voters_re"].as_array().unwrap().len(); diff --git a/src/python/py_websocket.py b/src/python/py_websocket.py index d40d855..adc5500 100644 --- a/src/python/py_websocket.py +++ b/src/python/py_websocket.py @@ -16,6 +16,12 @@ async def send_message(message: str): await ws_global.send(message) +async def send_internal_error(e: Exception): + global ws_global + if ws_global: + await ws_global.send(f"json:{{\"error\":\"Internal Python error: {e}\"}}") + + async def websocket_client(bot: botPy.Bot): global ws_global, is_connected port = bot.args["port"] diff --git a/src/websocket.rs b/src/websocket.rs index 5a9b5a1..4356c70 100644 --- a/src/websocket.rs +++ b/src/websocket.rs @@ -8,6 +8,7 @@ use futures::StreamExt; use std::sync::Arc; use serde_json::Value; +use crate::messages::send_dm; use crate::rs_println; use crate::Args; @@ -125,6 +126,13 @@ async fn handle_message(msg: tungstenite::protocol::Message, args: Args) { tungstenite::Message::Text(text) => { rs_println!("Received from Python: {}", text); + if text.starts_with("json:") { + let t_json: Value = serde_json::from_str(&text[5..]).unwrap(); + if t_json.get("error").is_some() { + send_dm("Internal Python error!".to_string(), args).await; + } + } + unsafe { if !REPLY_HELLO { send_msg("[Connection test] Hello from Rust!").await;