Play api request
This commit is contained in:
38
src/api/audio/mod.rs
Normal file
38
src/api/audio/mod.rs
Normal 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(())
|
||||
}
|
||||
Reference in New Issue
Block a user