made clippy happy. Hopefully didnt break anything as well
This commit is contained in:
+22
-25
@@ -175,13 +175,13 @@ pub async fn bk_week_add(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let shorturl_u = cmds::to_shorturl(&url);
|
let shorturl_u = cmds::to_shorturl(&url);
|
||||||
let shorturl = if shorturl_u.is_ok() { shorturl_u.unwrap() } else { url };
|
let shorturl = &shorturl_u.unwrap_or(url.clone());
|
||||||
|
|
||||||
data::update_re_data(ctx.data()).await;
|
data::update_re_data(ctx.data()).await;
|
||||||
let reddit_data = get_mutex_data(&ctx.data().reddit_data).await?;
|
let reddit_data = get_mutex_data(&ctx.data().reddit_data).await?;
|
||||||
|
|
||||||
if let Some(bk_week) = reddit_data.get(BK_WEEK) {
|
if let Some(bk_week) = reddit_data.get(BK_WEEK) {
|
||||||
let a = approve.unwrap_or_else(|| false);
|
let a = approve.unwrap_or(false);
|
||||||
let r = websocket::send_cmd_json("add_post_url", Some(json!([&shorturl, a, true]))).await.unwrap();
|
let r = websocket::send_cmd_json("add_post_url", Some(json!([&shorturl, a, true]))).await.unwrap();
|
||||||
|
|
||||||
if !r["value"].as_bool().unwrap() {
|
if !r["value"].as_bool().unwrap() {
|
||||||
@@ -196,12 +196,12 @@ pub async fn bk_week_add(
|
|||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(post) = bk_week.get(&shorturl) {
|
if let Some(post) = bk_week.get(shorturl) {
|
||||||
if post.get("removed").is_some() {
|
if post.get("removed").is_some() {
|
||||||
send_unremove_msg(ctx, &shorturl).await;
|
send_unremove_msg(ctx, shorturl).await;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
send_updated_msg(ctx, &shorturl).await;
|
send_updated_msg(ctx, shorturl).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -287,16 +287,16 @@ pub async fn bk_week_approve(
|
|||||||
data::update_re_data(ctx.data()).await;
|
data::update_re_data(ctx.data()).await;
|
||||||
let reddit_data = get_mutex_data(&ctx.data().reddit_data).await?;
|
let reddit_data = get_mutex_data(&ctx.data().reddit_data).await?;
|
||||||
|
|
||||||
approve_cmd(ctx, &url, &reddit_data, !disapprove.unwrap_or_else(|| false)).await;
|
approve_cmd(ctx, &url, &reddit_data, !disapprove.unwrap_or(false)).await;
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async fn approve_cmd(ctx: Context<'_>, url: &str, reddit_data: &Value, approve: bool) {
|
async fn approve_cmd(ctx: Context<'_>, url: &str, reddit_data: &Value, approve: bool) {
|
||||||
if let Some(post) = reddit_data.get(BK_WEEK).unwrap().get(&url) {
|
if let Some(post) = reddit_data.get(BK_WEEK).unwrap().get(url) {
|
||||||
if post.get("removed").is_some() {
|
if post.get("removed").is_some() {
|
||||||
send_post_removed_message(ctx, &url, post).await;
|
send_post_removed_message(ctx, url, post).await;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -310,11 +310,11 @@ async fn approve_cmd(ctx: Context<'_>, url: &str, reddit_data: &Value, approve:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
send_msg(ctx, format!("Unknown error!\nError trace: `bk_week_cmds.rs -> bk_week_approve() -> unwrap websocket result error`."), true, true).await;
|
send_msg(ctx, "Unknown error!\nError trace: `bk_week_cmds.rs -> bk_week_approve() -> unwrap websocket result error`.".to_string(), true, true).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
send_post_not_found_message(ctx, &url).await;
|
send_post_not_found_message(ctx, url).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -379,7 +379,7 @@ pub async fn bk_week_update(
|
|||||||
let progress = send_msg(ctx, p_text.clone(), true, true).await.unwrap();
|
let progress = send_msg(ctx, p_text.clone(), true, true).await.unwrap();
|
||||||
p_text = update_progress(ctx, progress.clone(), p_text, "\nFetching new posts & updating data file...".to_string()).await;
|
p_text = update_progress(ctx, progress.clone(), p_text, "\nFetching new posts & updating data file...".to_string()).await;
|
||||||
|
|
||||||
let max_age_u = max_age.unwrap_or_else(|| 8);
|
let max_age_u = max_age.unwrap_or(8);
|
||||||
let max_age_secs = max_age_u as u64 * (60 * 60 * 24);
|
let max_age_secs = max_age_u as u64 * (60 * 60 * 24);
|
||||||
|
|
||||||
send_cmd_json("add_new_posts", Some(json!([max_age_secs]))).await;
|
send_cmd_json("add_new_posts", Some(json!([max_age_secs]))).await;
|
||||||
@@ -409,7 +409,7 @@ pub async fn bk_week_update(
|
|||||||
add_posts(http, c_id, weekly_art, &msgs_json, max_age_secs).await;
|
add_posts(http, c_id, weekly_art, &msgs_json, max_age_secs).await;
|
||||||
|
|
||||||
// Stop if only_add
|
// Stop if only_add
|
||||||
if only_add.unwrap_or_else(|| false) {
|
if only_add.unwrap_or(false) {
|
||||||
send_msg(ctx, "`/bk_week_update`\n## Done!".to_string(), true, true).await;
|
send_msg(ctx, "`/bk_week_update`\n## Done!".to_string(), true, true).await;
|
||||||
update_progress(ctx, progress.clone(), p_text, "✅\n## Done!".to_string()).await;
|
update_progress(ctx, progress.clone(), p_text, "✅\n## Done!".to_string()).await;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
@@ -471,7 +471,7 @@ async fn get_c_id(ctx: Context<'_>) -> Option<ChannelId> {
|
|||||||
async fn read_msgs(http: &Http, bot_id: UserId, c_id: ChannelId) -> Vec<Message> {
|
async fn read_msgs(http: &Http, bot_id: UserId, c_id: ChannelId) -> Vec<Message> {
|
||||||
let b = GetMessages::new().limit(100);
|
let b = GetMessages::new().limit(100);
|
||||||
let mut msgs = c_id.messages(http, b).await.unwrap();
|
let mut msgs = c_id.messages(http, b).await.unwrap();
|
||||||
msgs = msgs.into_iter().filter(|item| item.author.id == bot_id).collect();
|
msgs.retain(|item| item.author.id == bot_id);
|
||||||
|
|
||||||
let mut last_msg: Option<Message> = msgs.last().cloned();
|
let mut last_msg: Option<Message> = msgs.last().cloned();
|
||||||
|
|
||||||
@@ -497,15 +497,15 @@ async fn read_msgs(http: &Http, bot_id: UserId, c_id: ChannelId) -> Vec<Message>
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async fn msgs_to_json<'a>(msgs: Vec<Message>, reddit_data: &'a Value, max_age: u64) -> Value {
|
async fn msgs_to_json(msgs: Vec<Message>, reddit_data: &Value, max_age: u64) -> Value {
|
||||||
let mut msgs_json: Value = json!({"no_change": {}, "updated": {}, "removed": {}, "duplicates": {}, "old": {}});
|
let mut msgs_json: Value = json!({"no_change": {}, "updated": {}, "removed": {}, "duplicates": {}, "old": {}});
|
||||||
let now = SystemTime::now()
|
let now = SystemTime::now()
|
||||||
.duration_since(UNIX_EPOCH)
|
.duration_since(UNIX_EPOCH)
|
||||||
.expect("Time went backwards")
|
.expect("Time went backwards")
|
||||||
.as_secs() as u64;
|
.as_secs();
|
||||||
|
|
||||||
for msg in msgs {
|
for msg in msgs {
|
||||||
if msg.embeds.len() == 0 { continue; }
|
if msg.embeds.is_empty() { continue; }
|
||||||
if msg.embeds[0].url.is_none() { continue; }
|
if msg.embeds[0].url.is_none() { continue; }
|
||||||
|
|
||||||
let url = msg.embeds[0].url.clone().unwrap();
|
let url = msg.embeds[0].url.clone().unwrap();
|
||||||
@@ -536,7 +536,7 @@ async fn msgs_to_json<'a>(msgs: Vec<Message>, reddit_data: &'a Value, max_age: u
|
|||||||
let mut u_json: Value = msg_json.unwrap();
|
let mut u_json: Value = msg_json.unwrap();
|
||||||
let re_url = &reddit_data[BK_WEEK][&url];
|
let re_url = &reddit_data[BK_WEEK][&url];
|
||||||
|
|
||||||
let post_date = re_url["post_data"]["date_unix"].as_u64().unwrap_or_else(|| 0);
|
let post_date = re_url["post_data"]["date_unix"].as_u64().unwrap_or(0);
|
||||||
|
|
||||||
// old
|
// old
|
||||||
if now - post_date > max_age {
|
if now - post_date > max_age {
|
||||||
@@ -591,7 +591,7 @@ async fn add_posts(http: &Http, c_id: ChannelId, r_data: &Map<String, Value>, ms
|
|||||||
let now = SystemTime::now()
|
let now = SystemTime::now()
|
||||||
.duration_since(UNIX_EPOCH)
|
.duration_since(UNIX_EPOCH)
|
||||||
.expect("Time went backwards")
|
.expect("Time went backwards")
|
||||||
.as_secs() as u64;
|
.as_secs();
|
||||||
|
|
||||||
for url in r_data.keys() {
|
for url in r_data.keys() {
|
||||||
if ["no_change", "updated", "removed", "old", "duplicates"]
|
if ["no_change", "updated", "removed", "old", "duplicates"]
|
||||||
@@ -668,7 +668,7 @@ pub async fn bk_week_vote(
|
|||||||
let uid = ctx.author().id.get();
|
let uid = ctx.author().id.get();
|
||||||
let re_data = get_mutex_data(&ctx.data().reddit_data).await?;
|
let re_data = get_mutex_data(&ctx.data().reddit_data).await?;
|
||||||
let post_data = re_data[BK_WEEK].clone();
|
let post_data = re_data[BK_WEEK].clone();
|
||||||
let unw_vote = un_vote.unwrap_or_else(|| false);
|
let unw_vote = un_vote.unwrap_or(false);
|
||||||
|
|
||||||
if post_data.get(&url).is_none() {
|
if post_data.get(&url).is_none() {
|
||||||
send_post_not_found_message(ctx, &url).await;
|
send_post_not_found_message(ctx, &url).await;
|
||||||
@@ -749,11 +749,8 @@ pub async fn bk_week_top(
|
|||||||
all.insert(url, val);
|
all.insert(url, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
let amount_u = amount.unwrap_or_else(|| 3);
|
let amount_u = amount.unwrap_or(3);
|
||||||
let amount_clamped =
|
let amount_clamped = amount_u.clamp(1, 10);
|
||||||
if amount_u > 10 { 10 }
|
|
||||||
else if amount_u < 1 { 1 }
|
|
||||||
else { amount_u };
|
|
||||||
|
|
||||||
let top =
|
let top =
|
||||||
if category != TopCategory::Oldest
|
if category != TopCategory::Oldest
|
||||||
@@ -762,7 +759,7 @@ pub async fn bk_week_top(
|
|||||||
|
|
||||||
for post in top {
|
for post in top {
|
||||||
let url = post.0;
|
let url = post.0;
|
||||||
let _ = send_embed_for_post(ctx, posts_u[url].clone(), &url).await;
|
let _ = send_embed_for_post(ctx, posts_u[url].clone(), url).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
|||||||
+9
-10
@@ -41,7 +41,7 @@ pub async fn stop(
|
|||||||
) -> Result<(), Error>
|
) -> Result<(), Error>
|
||||||
{
|
{
|
||||||
let should_stop = ctx.data().args.dev
|
let should_stop = ctx.data().args.dev
|
||||||
|| confirmation.unwrap_or_else(|| "".to_string()).to_lowercase() == "i want to stop the bot now";
|
|| confirmation.unwrap_or_default().to_lowercase() == "i want to stop the bot now";
|
||||||
|
|
||||||
if should_stop {
|
if should_stop {
|
||||||
let msg = send_msg(ctx, "Saving data...".to_string(), true, true).await.unwrap();
|
let msg = send_msg(ctx, "Saving data...".to_string(), true, true).await.unwrap();
|
||||||
@@ -63,6 +63,7 @@ pub async fn stop(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
#[poise::command(
|
#[poise::command(
|
||||||
slash_command,
|
slash_command,
|
||||||
prefix_command,
|
prefix_command,
|
||||||
@@ -84,20 +85,20 @@ pub async fn embed(
|
|||||||
#[description = "Sets yourself as the author."] author: Option<bool>
|
#[description = "Sets yourself as the author."] author: Option<bool>
|
||||||
) -> Result<(), Error>
|
) -> Result<(), Error>
|
||||||
{
|
{
|
||||||
let reply_unwrap = reply.unwrap_or_else(|| false);
|
let reply_unwrap = reply.unwrap_or(false);
|
||||||
|
|
||||||
send_embed(
|
send_embed(
|
||||||
ctx,
|
ctx,
|
||||||
EmbedOptions {
|
EmbedOptions {
|
||||||
desc: description.replace("\\n", "\n"),
|
desc: description.replace("\\n", "\n"),
|
||||||
title: if title.is_some() { Some(title.unwrap().replace("\\n", "\n")) } else { None },
|
title: title.map(|t| t.replace("\\n", "\n")),
|
||||||
col: color,
|
col: color,
|
||||||
url,
|
url,
|
||||||
ts: timestamp,
|
ts: timestamp,
|
||||||
ephemeral: ephemeral.unwrap_or_else(|| false),
|
ephemeral: ephemeral.unwrap_or(false),
|
||||||
message,
|
message,
|
||||||
thumbnail,
|
thumbnail,
|
||||||
author: if author.unwrap_or_else(|| false) { Some(Author { name: ctx.author().name.clone(), url: "".to_string(), icon_url: ctx.author().avatar_url().unwrap() }) } else { None }
|
author: if author.unwrap_or(false) { Some(Author { name: ctx.author().name.clone(), url: "".to_string(), icon_url: ctx.author().avatar_url().unwrap() }) } else { None }
|
||||||
},
|
},
|
||||||
reply_unwrap
|
reply_unwrap
|
||||||
).await;
|
).await;
|
||||||
@@ -235,11 +236,9 @@ pub async fn reload_cfg(
|
|||||||
let d_str = serde_json::to_string(&d)?;
|
let d_str = serde_json::to_string(&d)?;
|
||||||
let r = send_cmd_json("update_cfg", Some(json!([d_str]))).await; // TODO: THIS
|
let r = send_cmd_json("update_cfg", Some(json!([d_str]))).await; // TODO: THIS
|
||||||
|
|
||||||
if r.is_some() {
|
if r.is_some() && r.unwrap()["value"].as_bool().unwrap() {
|
||||||
if r.unwrap()["value"].as_bool().unwrap() {
|
send_msg(ctx, "Successfully reloaded the configs!".to_string(), true, true).await;
|
||||||
send_msg(ctx, "Successfully reloaded the configs!".to_string(), true, true).await;
|
return Ok(());
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
send_msg(ctx, "Failed to reload configs: Failed-type response from Python.".to_string(), true, true).await;
|
send_msg(ctx, "Failed to reload configs: Failed-type response from Python.".to_string(), true, true).await;
|
||||||
|
|||||||
+1
-2
@@ -184,8 +184,7 @@ pub async fn dc_contains_server(data: &Data, server_id: u64) -> bool {
|
|||||||
let mut clone = dc_data.clone();
|
let mut clone = dc_data.clone();
|
||||||
let servers = clone["servers"].as_object_mut().unwrap();
|
let servers = clone["servers"].as_object_mut().unwrap();
|
||||||
|
|
||||||
if servers.contains_key(&server_id.to_string()) { return true; }
|
return servers.contains_key(&server_id.to_string())
|
||||||
else { return false; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+8
-12
@@ -27,7 +27,6 @@ use serde::Serialize;
|
|||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use tokio::runtime::Runtime;
|
use tokio::runtime::Runtime;
|
||||||
use tokio::sync::Mutex;
|
use tokio::sync::Mutex;
|
||||||
use serde_json;
|
|
||||||
use tokio::task::JoinHandle;
|
use tokio::task::JoinHandle;
|
||||||
use tokio::time;
|
use tokio::time;
|
||||||
use websocket::send_cmd_json;
|
use websocket::send_cmd_json;
|
||||||
@@ -56,6 +55,7 @@ struct Args {
|
|||||||
|
|
||||||
type Error = Box<dyn std::error::Error + Send + Sync>;
|
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>;
|
||||||
|
type Schedule = (Duration, fn() -> Pin<Box<dyn Future<Output = ()> + Send>>);
|
||||||
|
|
||||||
|
|
||||||
struct Data {
|
struct Data {
|
||||||
@@ -81,7 +81,7 @@ async fn main() {
|
|||||||
let own_vec_str: Vec<String> = own_env.split(",").map(String::from).collect();
|
let own_vec_str: Vec<String> = own_env.split(",").map(String::from).collect();
|
||||||
let own_vec_u64: Vec<u64> = own_vec_str
|
let own_vec_u64: Vec<u64> = own_vec_str
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|s| Some(s.parse::<u64>().expect("Failed to parse ASSISTANT_OWNERS. Invalid syntax.")))
|
.map(|s| s.parse::<u64>().expect("Failed to parse ASSISTANT_OWNERS. Invalid syntax."))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
if args.test { println!("----- USING TEST BOT -----"); }
|
if args.test { println!("----- USING TEST BOT -----"); }
|
||||||
@@ -123,7 +123,7 @@ async fn main() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if !args.nosched {
|
if !args.nosched {
|
||||||
let schedules: Vec<(Duration, fn() -> Pin<Box<dyn Future<Output = ()> + Send>>)> = vec![
|
let schedules: Vec<Schedule> = vec![
|
||||||
(Duration::from_secs(2 * 60), || Box::pin(read_reddit_inbox()))
|
(Duration::from_secs(2 * 60), || Box::pin(read_reddit_inbox()))
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@ async fn gen_data(args: Args, owners: Vec<u64>) -> Data {
|
|||||||
let mods_vec_str: Vec<String> = mods_env.split(",").map(String::from).collect();
|
let mods_vec_str: Vec<String> = mods_env.split(",").map(String::from).collect();
|
||||||
let mods_vec_u64: Vec<u64> = mods_vec_str
|
let mods_vec_u64: Vec<u64> = mods_vec_str
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|s| Some(s.parse::<u64>().expect("Failed to parse ASSISTANT_BK_MODS. Invalid syntax.")))
|
.map(|s| s.parse::<u64>().expect("Failed to parse ASSISTANT_BK_MODS. Invalid syntax."))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let data = Data {
|
let data = Data {
|
||||||
@@ -177,13 +177,9 @@ async fn gen_data(args: Args, owners: Vec<u64>) -> Data {
|
|||||||
|
|
||||||
|
|
||||||
async fn gen_bot(data: Data, args: Args) -> Client {
|
async fn gen_bot(data: Data, args: Args) -> Client {
|
||||||
let token;
|
let token =
|
||||||
if !args.test {
|
if !args.test { std::env::var("ASSISTANT_TOKEN").expect("Missing ASSISTANT_TOKEN env var!") }
|
||||||
token = std::env::var("ASSISTANT_TOKEN").expect("Missing ASSISTANT_TOKEN env var!");
|
else { std::env::var("ASSISTANT_TOKEN_TEST").expect("Missing ASSISTANT_TOKEN_TEST env var!") };
|
||||||
}
|
|
||||||
else {
|
|
||||||
token = std::env::var("ASSISTANT_TOKEN_TEST").expect("Missing ASSISTANT_TOKEN_TEST env var!");
|
|
||||||
}
|
|
||||||
|
|
||||||
let intents = serenity::GatewayIntents::all();
|
let intents = serenity::GatewayIntents::all();
|
||||||
|
|
||||||
@@ -246,7 +242,7 @@ async fn run_schedule<F: Fn() -> Pin<Box<dyn Future<Output = ()> + Send>>>(d: Du
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async fn run_schedules(schedules: Vec<(Duration, fn() -> Pin<Box<dyn Future<Output = ()> + Send>>)>) {
|
async fn run_schedules(schedules: Vec<Schedule>) {
|
||||||
let mut handles: Vec<JoinHandle<()>> = vec![];
|
let mut handles: Vec<JoinHandle<()>> = vec![];
|
||||||
|
|
||||||
rs_println!("Starting schedules...");
|
rs_println!("Starting schedules...");
|
||||||
|
|||||||
+4
-4
@@ -49,7 +49,7 @@ pub static MANDATORY_MSG: &str = "Mandatory response, please ignore.";
|
|||||||
|
|
||||||
|
|
||||||
fn none_to_empty(string: Option<String>) -> String {
|
fn none_to_empty(string: Option<String>) -> String {
|
||||||
return string.unwrap_or_else(|| "".to_string());
|
return string.unwrap_or_default();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -143,7 +143,7 @@ pub fn embed_from_options(options: EmbedOptions) -> CreateEmbed {
|
|||||||
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)
|
||||||
.colour (Color::new(options.col.unwrap_or_else(|| DEFAULT_DC_COL)))
|
.colour (Color::new(options.col.unwrap_or(DEFAULT_DC_COL)))
|
||||||
.url (none_to_empty(options.url));
|
.url (none_to_empty(options.url));
|
||||||
|
|
||||||
if let Some(a) = author { embed = embed.author(a); }
|
if let Some(a) = author { embed = embed.author(a); }
|
||||||
@@ -240,9 +240,9 @@ pub fn embed_post(post_data: &Value, url: &str, ephemeral: bool) -> EmbedOptions
|
|||||||
url: Some(url.to_string()),
|
url: Some(url.to_string()),
|
||||||
ts: Some(Timestamp::from_unix_timestamp(post_data["post_data"]["date_unix"].as_i64().unwrap()).unwrap()),
|
ts: Some(Timestamp::from_unix_timestamp(post_data["post_data"]["date_unix"].as_i64().unwrap()).unwrap()),
|
||||||
ephemeral,
|
ephemeral,
|
||||||
thumbnail: media_urls.get(0)
|
thumbnail: media_urls.first()
|
||||||
.and_then(|url| url.as_str().map(|s| s.to_string()))
|
.and_then(|url| url.as_str().map(|s| s.to_string()))
|
||||||
.or_else(|| None),
|
.or(None),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ pub fn start(args: String) -> PyResult<()> {
|
|||||||
rs_println!("Running Python program...");
|
rs_println!("Running Python program...");
|
||||||
|
|
||||||
let slash = if cfg!(windows) { "\\" } else if cfg!(unix) { "/" } else { "" };
|
let slash = if cfg!(windows) { "\\" } else if cfg!(unix) { "/" } else { "" };
|
||||||
if slash == "" { errln!("Man what kinda OS do you have? Neither unix or windows, what the hell!? I can't process this anymore, you're too weird!"); }
|
if slash.is_empty() { errln!("Man what kinda OS do you have? Neither unix or windows, what the hell!? I can't process this anymore, you're too weird!"); }
|
||||||
|
|
||||||
let path = format!("{0}{1}src{1}python", env!("CARGO_MANIFEST_DIR"), slash);
|
let path = format!("{0}{1}src{1}python", env!("CARGO_MANIFEST_DIR"), slash);
|
||||||
|
|
||||||
@@ -39,6 +39,6 @@ pub fn start(args: String) -> PyResult<()> {
|
|||||||
|
|
||||||
fn get_code(path: &str) -> String {
|
fn get_code(path: &str) -> String {
|
||||||
return fs::read_to_string(path)
|
return fs::read_to_string(path)
|
||||||
.expect(&format!("Failed to read Python file.\nPath: {}", path))
|
.unwrap_or_else(|_| panic!("Failed to read Python file.\nPath: {}", path))
|
||||||
.to_string();
|
.to_string();
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-7
@@ -51,9 +51,9 @@ pub async fn send_cmd_json(func_name: &str, func_args: Option<Value>) -> Option<
|
|||||||
unsafe {
|
unsafe {
|
||||||
let Some(sender) = &GLOBAL_SENDER else { return None };
|
let Some(sender) = &GLOBAL_SENDER else { return None };
|
||||||
let mut sender = sender.lock().await;
|
let mut sender = sender.lock().await;
|
||||||
let Some(s) = sender.as_mut() else { return None };
|
let s = sender.as_mut()?;
|
||||||
|
|
||||||
let unw_args = if func_args.is_some() { func_args.unwrap() } else { json!([]) };
|
let unw_args = func_args.unwrap_or(json!([]));
|
||||||
|
|
||||||
let json_str = format!(
|
let json_str = format!(
|
||||||
"json:{{\"type\": \"function\", \"value\":\"{}\", \"args\": {}}}",
|
"json:{{\"type\": \"function\", \"value\":\"{}\", \"args\": {}}}",
|
||||||
@@ -83,13 +83,13 @@ async fn receive_response() -> Option<Value> {
|
|||||||
unsafe {
|
unsafe {
|
||||||
let Some(receiver) = &GLOBAL_RECEIVER else { return None };
|
let Some(receiver) = &GLOBAL_RECEIVER else { return None };
|
||||||
let mut receiver = receiver.lock().await;
|
let mut receiver = receiver.lock().await;
|
||||||
let Some(r) = receiver.as_mut() else { return None };
|
let r = receiver.as_mut()?;
|
||||||
|
|
||||||
let Some(Ok(msg)) = r.next().await else { return None };
|
let Some(Ok(msg)) = r.next().await else { return None };
|
||||||
let tungstenite::Message::Text(response) = msg else { return None };
|
let tungstenite::Message::Text(response) = msg else { return None };
|
||||||
|
|
||||||
if response.starts_with("json:") {
|
if let Some(stripped) = response.strip_prefix("json:") {
|
||||||
return serde_json::from_str(&response[5..]).ok();
|
return serde_json::from_str(stripped).ok();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return serde_json::from_str(&response).ok();
|
return serde_json::from_str(&response).ok();
|
||||||
@@ -131,8 +131,8 @@ async fn handle_message(msg: tungstenite::protocol::Message, args: Args, owners:
|
|||||||
tungstenite::Message::Text(text) => {
|
tungstenite::Message::Text(text) => {
|
||||||
rs_println!("Received from Python: {}", text);
|
rs_println!("Received from Python: {}", text);
|
||||||
|
|
||||||
if text.starts_with("json:") {
|
if let Some(stripped) = text.strip_prefix("json:") {
|
||||||
let t_json: Value = serde_json::from_str(&text[5..]).unwrap();
|
let t_json: Value = serde_json::from_str(stripped).unwrap();
|
||||||
if t_json.get("error").is_some() {
|
if t_json.get("error").is_some() {
|
||||||
send_dm("Unknown internal Python error occurred!".to_string(), args, owners).await;
|
send_dm("Unknown internal Python error occurred!".to_string(), args, owners).await;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user