From d510fee85487712606b1ab7684a1c3c2823e9a4f Mon Sep 17 00:00:00 2001 From: jel <25802745+jelni@users.noreply.github.com> Date: Mon, 30 Dec 2024 19:10:56 +0100 Subject: [PATCH] support alternative Twitter embed services --- src/commands/cobalt_download.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/commands/cobalt_download.rs b/src/commands/cobalt_download.rs index 3c8bf6b..5df7bb4 100644 --- a/src/commands/cobalt_download.rs +++ b/src/commands/cobalt_download.rs @@ -1,3 +1,4 @@ +use std::borrow::Cow; use std::env; use std::path::Path; @@ -18,6 +19,9 @@ use crate::utilities::file_download::NetworkFile; use crate::utilities::message_entities::{self, ToEntity}; use crate::utilities::telegram_utils; +const TWITTER_REPLACEMENTS: [&str; 5] = + ["fxtwitter.com", "fixupx.com", "twittpr.com", "vxtwitter.com", "fixvx.com"]; + #[derive(Deserialize)] struct CobaltInstance<'a> { name: &'a str, @@ -86,18 +90,22 @@ async fn get_result( url: &str, audio_only: bool, ) -> Result<(String, Response), cobalt::Error> { + let url = TWITTER_REPLACEMENTS + .into_iter() + .find_map(|replacement| url.strip_prefix(&format!("https://{replacement}/"))) + .map(|path| Cow::Owned(format!("https://twitter.com/{path}"))) + .unwrap_or(Cow::Borrowed(url)); + let instances = env::var("COBALT_INSTANCES").unwrap(); let instances = serde_json::from_str::>(&instances).unwrap(); let mut error = None; for instance in instances { - match cobalt::query(http_client, instance.url, instance.api_key, url, audio_only).await { + match cobalt::query(http_client, instance.url, instance.api_key, &url, audio_only).await { Ok(result) => return Ok((instance.name.into(), result)), Err(err) => { - if error.is_none() { - error = Some(err); - } + error = Some(err); } } }