Play api request

This commit is contained in:
2024-12-19 21:46:52 -05:00
parent a97505ea5e
commit 9a144bab4d
19 changed files with 172 additions and 103 deletions

38
src/api/audio/mod.rs Normal file
View File

@@ -0,0 +1,38 @@
use std::sync::Arc;
use axum::extract::{Path, State};
use axum::middleware::from_extractor;
use axum::{Extension, Json, Router};
use axum::routing::post;
use serde::Deserialize;
use crate::api::auth::{AuthorizationMiddleware, Session};
use crate::AppState;
use crate::bot::commands::audio::join_voice_channel;
use crate::bot::commands::audio::play::enqueue_track;
use crate::bot::handler::get_songbird;
use crate::error::SirenResult;
pub fn get_routes() -> Router<Arc<AppState>> {
Router::new()
.route("/play", post(play_audio))
.route_layer(from_extractor::<AuthorizationMiddleware>())
}
#[derive(Deserialize)]
struct TrackRequest {
url: String,
guild_id: u64,
}
async fn play_audio(
Extension(session): Extension<Session>,
State(state): State<Arc<AppState>>,
Json(payload): Json<TrackRequest>,
) -> SirenResult<()> {
log::debug!("Playing audio in guild: {}", payload.guild_id);
let manager = get_songbird();
let user_id = state.cache.user(session.user_id).unwrap().id;
let guild_id = state.cache.guild(payload.guild_id).unwrap().id;
let _channel_id = join_voice_channel(&state.cache, &manager, &guild_id, &user_id).await?;
enqueue_track(manager, guild_id.to_owned(), &payload.url).await?;
Ok(())
}