aboutsummaryrefslogtreecommitdiff
path: root/src/audio
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/mod.rs37
-rw-r--r--src/audio/play_queue.rs17
2 files changed, 15 insertions, 39 deletions
diff --git a/src/audio/mod.rs b/src/audio/mod.rs
index 5044c49..3c3041f 100644
--- a/src/audio/mod.rs
+++ b/src/audio/mod.rs
@@ -5,18 +5,15 @@ use either::Either;
use serenity::{
client::bridge::voice::ClientVoiceManager,
model::{
- id::ChannelId,
+ id::{
+ ChannelId,
+ },
},
prelude::*,
voice::LockedAudio,
};
use typemap::Key;
-use crate::{
- must_env_lookup,
- Result,
-};
-
pub use self::play_queue::PlayQueue;
pub use self::timeutil::parse_times;
pub use self::ytdl::*;
@@ -25,32 +22,6 @@ mod timeutil;
mod ytdl;
mod play_queue;
-pub trait CtxExt {
- fn currently_playing(&self) -> bool;
- fn users_listening(&self) -> Result<bool>;
-}
-
-impl CtxExt for Context {
- fn currently_playing(&self) -> bool {
- let queue_lock = self.data.lock().get::<PlayQueue>().cloned().unwrap();
- let play_queue = queue_lock.read().unwrap();
- play_queue.playing.is_some()
- }
-
- fn users_listening(&self) -> Result<bool> {
- let channel_id = ChannelId(must_env_lookup::<u64>("VOICE_CHANNEL"));
- let channel = channel_id.to_channel()?;
- let res = channel.guild()
- .and_then(|ch| ch.read().guild())
- .map(|g| (&g.read().voice_states)
- .into_iter()
- .any(|(_, state)| state.channel_id == Some(channel_id)))
- .unwrap_or(false);
-
- Ok(res)
- }
-}
-
pub struct VoiceManager;
impl Key for VoiceManager {
@@ -59,7 +30,7 @@ impl Key for VoiceManager {
impl VoiceManager {
pub fn register(c: &mut Client) {
- let mut data = c.data.lock();
+ let mut data = c.data.write();
data.insert::<VoiceManager>(Arc::clone(&c.voice_manager));
}
}
diff --git a/src/audio/play_queue.rs b/src/audio/play_queue.rs
index aa2ccc5..1f80961 100644
--- a/src/audio/play_queue.rs
+++ b/src/audio/play_queue.rs
@@ -9,6 +9,7 @@ use std::{
use either::{Left, Right};
use serenity::{
+ CacheAndHttp,
client::bridge::voice::ClientVoiceManager,
prelude::*,
voice,
@@ -22,7 +23,6 @@ use crate::{
ytdl_url,
},
commands::{
- send,
sound_levels::DEFAULT_VOLUME,
},
must_env_lookup,
@@ -63,23 +63,28 @@ impl PlayQueue {
pub fn register(c: &mut Client) {
let voice_manager = Arc::clone(&c.voice_manager);
- let mut data = c.data.lock();
let queue = Arc::new(RwLock::new(PlayQueue::new()));
- data.insert::<PlayQueue>(Arc::clone(&queue));
+ {
+ let mut data = c.data.write();
+ data.insert::<PlayQueue>(Arc::clone(&queue));
+ }
+
+ let cache_http = c.cache_and_http.clone();
thread::spawn(move || {
loop {
- if let Err(e) = Self::update(&queue, &voice_manager) {
+ if let Err(e) = Self::update(cache_http, &queue, &voice_manager) {
error!("updating playqueue: {}", e);
}
thread::sleep(Duration::from_millis(250));
}
});
+
}
- fn update(queue_lck: &Arc<RwLock<Self>>, voice_manager: &Arc<Mutex<ClientVoiceManager>>) -> Result<()> {
+ fn update(cache_http: Arc<CacheAndHttp>, queue_lck: &Arc<RwLock<Self>>, voice_manager: &Arc<Mutex<ClientVoiceManager>>) -> Result<()> {
let (queue_is_empty, queue_has_playing) = {
let queue = queue_lck.read().unwrap();
@@ -236,7 +241,7 @@ impl PlayQueue {
},
None => {
error!("couldn't join channel");
- send(item.sender_channel, "something happened somewhere somehow.", false)?;
+ item.sender_channel.say(cache_http.http, "something happened somewhere somehow.")?;
}
}