lot of refactor
This commit is contained in:
@@ -24,7 +24,9 @@ impl EventHandler for Handler {
|
||||
async fn ready(&self, ctx: Context, ready: Ready) {
|
||||
println!("{} is connected!", ready.user.name);
|
||||
|
||||
let voice_manager = songbird::get(&ctx).await;
|
||||
let voice_manager = songbird::get(&ctx)
|
||||
.await
|
||||
.expect("Cannot init voice manager");
|
||||
|
||||
let mut subscriber = self
|
||||
.nats_client
|
||||
@@ -65,9 +67,9 @@ impl EventHandler for Handler {
|
||||
|
||||
let response = match result {
|
||||
Ok(response) => response,
|
||||
Err(err) => JobResponse {
|
||||
Err(why) => JobResponse {
|
||||
content: None,
|
||||
error: Some(err),
|
||||
error: Some(why),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -115,6 +117,6 @@ async fn main() {
|
||||
.expect("Error creating discord client");
|
||||
|
||||
if let Err(why) = discord_client.start().await {
|
||||
println!("Client error: {why:?}");
|
||||
println!("Client start error: {why:?}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
use types::jobs::{DownloadJob, DownloadResponse, JobResponse};
|
||||
use types::{
|
||||
error::{CorroError, CorroErrorType},
|
||||
jobs::{DownloadJob, DownloadResponse, JobResponse},
|
||||
};
|
||||
use yt_dlp::{
|
||||
Downloader,
|
||||
model::{AudioCodecPreference, AudioQuality},
|
||||
@@ -7,12 +10,15 @@ use yt_dlp::{
|
||||
pub async fn download(
|
||||
downloader: &Downloader,
|
||||
job: DownloadJob,
|
||||
) -> Result<JobResponse<DownloadResponse>, String> {
|
||||
println!("job: {:?}", job);
|
||||
|
||||
) -> Result<JobResponse<DownloadResponse>, CorroError> {
|
||||
let video = match downloader.fetch_video_infos(job.url).await {
|
||||
Ok(video) => video,
|
||||
Err(err) => return Err(err.to_string()),
|
||||
Err(why) => {
|
||||
return Err(CorroError {
|
||||
error_type: CorroErrorType::YtdlpError,
|
||||
message: why.to_string(),
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
let audio_path = match downloader
|
||||
@@ -25,11 +31,14 @@ pub async fn download(
|
||||
.await
|
||||
{
|
||||
Ok(path) => path,
|
||||
Err(err) => return Err(err.to_string()),
|
||||
Err(why) => {
|
||||
return Err(CorroError {
|
||||
error_type: CorroErrorType::YtdlpError,
|
||||
message: why.to_string(),
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
println!("audio_path: {:?}", &audio_path);
|
||||
|
||||
Ok(JobResponse {
|
||||
content: Some(DownloadResponse {
|
||||
path: audio_path.clone(),
|
||||
|
||||
@@ -6,46 +6,41 @@ use songbird::{
|
||||
events::{Event, EventContext, EventHandler as VoiceEventHandler, TrackEvent},
|
||||
input::File,
|
||||
};
|
||||
use types::jobs::{JobResponse, PlayJob, PlayResponse};
|
||||
use types::{
|
||||
error::CorroError,
|
||||
jobs::{JobResponse, PlayJob, PlayResponse},
|
||||
};
|
||||
|
||||
pub async fn play(
|
||||
voice_manager: &Option<Arc<Songbird>>,
|
||||
voice_manager: &Arc<Songbird>,
|
||||
job: PlayJob,
|
||||
) -> Result<JobResponse<PlayResponse>, String> {
|
||||
println!("job: {:?}", job);
|
||||
|
||||
if let Some(voice_manager) = voice_manager {
|
||||
if let Ok(handler_lock) = voice_manager.join(job.guild_id, job.channel_id).await {
|
||||
// Attach an event handler to see notifications of all track errors.
|
||||
let mut handler = handler_lock.lock().await;
|
||||
handler.add_global_event(TrackEvent::Error.into(), TrackErrorNotifier);
|
||||
}
|
||||
|
||||
let handler_lock = match voice_manager.get(job.guild_id) {
|
||||
Some(handler) => handler,
|
||||
None => {
|
||||
return Ok(JobResponse {
|
||||
content: Some(PlayResponse {}),
|
||||
error: None,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
) -> Result<JobResponse<PlayResponse>, CorroError> {
|
||||
if let Ok(handler_lock) = voice_manager.join(job.guild_id, job.channel_id).await {
|
||||
// Attach an event handler to see notifications of all track errors.
|
||||
let mut handler = handler_lock.lock().await;
|
||||
|
||||
let src = File::new(job.path).clone();
|
||||
|
||||
let track_handle = handler.play_input(src.into());
|
||||
|
||||
println!("{:?}", track_handle.get_info().await);
|
||||
|
||||
Ok(JobResponse {
|
||||
content: Some(PlayResponse {}),
|
||||
error: None,
|
||||
})
|
||||
} else {
|
||||
Err("No voice_manager defined".to_string())
|
||||
handler.add_global_event(TrackEvent::Error.into(), TrackErrorNotifier);
|
||||
}
|
||||
|
||||
let handler_lock = match voice_manager.get(job.guild_id) {
|
||||
Some(handler) => handler,
|
||||
None => {
|
||||
return Ok(JobResponse {
|
||||
content: Some(PlayResponse {}),
|
||||
error: None,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
let mut handler = handler_lock.lock().await;
|
||||
|
||||
let src = File::new(job.path).clone();
|
||||
|
||||
let _ = handler.play_input(src.into());
|
||||
|
||||
Ok(JobResponse {
|
||||
content: Some(PlayResponse {}),
|
||||
error: None,
|
||||
})
|
||||
}
|
||||
|
||||
struct TrackErrorNotifier;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use types::{
|
||||
error::{CorroError, CorroErrorType},
|
||||
jobs::{JobResponse, SearchJob, SearchResponse},
|
||||
misc::parse_url_or_default,
|
||||
queue::YoutubeSong,
|
||||
@@ -8,9 +9,7 @@ use yt_dlp::Downloader;
|
||||
pub async fn search(
|
||||
downloader: &Downloader,
|
||||
job: SearchJob,
|
||||
) -> Result<JobResponse<SearchResponse>, String> {
|
||||
println!("job: {:?}", job);
|
||||
|
||||
) -> Result<JobResponse<SearchResponse>, CorroError> {
|
||||
let result = match downloader
|
||||
.youtube_extractor()
|
||||
.search_first(&job.query)
|
||||
@@ -32,16 +31,20 @@ pub async fn search(
|
||||
},
|
||||
None => JobResponse {
|
||||
content: None,
|
||||
error: Some("url is not defined".to_string()),
|
||||
error: Some(CorroError {
|
||||
error_type: CorroErrorType::JobError,
|
||||
message: "webpage_url is not defined".to_string(),
|
||||
}),
|
||||
},
|
||||
},
|
||||
Err(why) => JobResponse {
|
||||
content: None,
|
||||
error: Some(format!("{why}")),
|
||||
error: Some(CorroError {
|
||||
error_type: CorroErrorType::JobError,
|
||||
message: why.to_string(),
|
||||
}),
|
||||
},
|
||||
};
|
||||
|
||||
println!("reply: {:?}", result.content);
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user