aboutsummaryrefslogtreecommitdiff
path: root/src/modules/commands
diff options
context:
space:
mode:
authorFuwn <[email protected]>2020-11-01 00:24:43 -0700
committerFuwn <[email protected]>2020-11-01 00:24:43 -0700
commit85e486db6237870b585f07cfd4ea26af4a65bf85 (patch)
treee09d4ba0a498cdca612cc5e7ccf7fd2379fefb53 /src/modules/commands
parentfeat (desc) (diff)
downloaddep-core-next-85e486db6237870b585f07cfd4ea26af4a65bf85.tar.xz
dep-core-next-85e486db6237870b585f07cfd4ea26af4a65bf85.zip
feat (desc)
feat: - implement somewhat ok but not done version of lavalink - new macros - plugin system - random hi plugin
Diffstat (limited to 'src/modules/commands')
-rw-r--r--src/modules/commands/general/voice.rs76
1 files changed, 47 insertions, 29 deletions
diff --git a/src/modules/commands/general/voice.rs b/src/modules/commands/general/voice.rs
index 1849f78..48f4df2 100644
--- a/src/modules/commands/general/voice.rs
+++ b/src/modules/commands/general/voice.rs
@@ -10,6 +10,7 @@ use serenity::framework::standard::{
use serenity::model::channel::Message;
use serenity::prelude::Context;
use std::sync::Arc;
+use songbird::SerenityInit;
pub struct Join;
impl Command for Join {
@@ -27,7 +28,10 @@ impl Command for Join {
}
fn execute(&self, ctx: &mut Context, message: &Message, _args: Args) -> Result<(), CommandError> {
- // if not deafened, ask to please deeafen
+ // let guild_id = message.guild().unwrap().read().id;
+ let guild = message.guild().unwrap();
+ let guild_id = guild.read().id;
+
let channel_id = message.guild().unwrap().read()
.voice_states.get(&message.author.id)
.and_then(|voice_state| voice_state.channel_id);
@@ -35,25 +39,45 @@ impl Command for Join {
let connect_to = match channel_id {
Some(channel) => channel,
None => {
- message.channel_id.say("You aren't in a voice channel...")?;
+ message.channel_id.say("You aren't in a voice channel... Only the people within a given voice channel can make me join.")?;
return Ok(())
}
};
+ let manager = songbird::get(ctx).unwrap().clone();
+ // let (_, handler) = manager.join_gateway(guild_id, connect_to);
+
let manager_lock = ctx.data.lock().get::<VoiceManager>().cloned()
- .expect("Expected VoiceManager in ShareMap."); // mut
+ .expect("Expected VoiceManager in TypeMap.");
let mut manager = manager_lock.lock();
- let has_handler = manager.get(message.guild().unwrap().read().id).is_some();
+ let has_joined = manager.join(guild_id, connect_to).is_some();
- if has_handler {
- message.channel_id.say(format!("Sorry, but I'm already in <#{}>.", connect_to))?;
- } else {
- if manager.join(message.guild().unwrap().read().id, connect_to).is_some() {
- message.channel_id.say(format!("I'm now in <#{}>.", connect_to))?;
- } else {
- message.channel_id.say("I've encountered an error while trying to join your voice channel.")?;
+ if has_joined {
+ drop(manager);
+
+ loop {
+ let vgu_lock = ctx.data.lock().get::<VoiceGuildUpdate>().unwrap();
+ let mut vgu = vgu_lock.write();
+ if vgu.contains(&guild_id) {
+ vgu.remove(&guild_id);
+ break;
+ }
}
+
+ let manager_lock = ctx.data.lock().get::<VoiceManager>().cloned()
+ .expect("Expected VoiceManager in TypeMap.");
+ let manager = manager_lock.lock();
+
+ let mut data = ctx.data.lock();
+ let lava_client_lock = data.get_mut::<Lavalink>()
+ .expect("Expected LavalinkClient in TypeMap.");
+ let handler = manager.get(guild_id).unwrap();
+ lava_client_lock.lock().create_session(guild_id, &handler);
+
+ message.channel_id.say(format!("Joined {:?}", connect_to.name()))?;
+ } else {
+ message.channel_id.say("Error joining channel...")?;
}
Ok(())
@@ -76,31 +100,25 @@ impl Command for Leave {
}
fn execute(&self, ctx: &mut Context, message: &Message, _args: Args) -> Result<(), CommandError> {
- let channel_id = message.guild().unwrap().read()
- .voice_states.get(&message.author.id)
- .and_then(|voice_state| voice_state.channel_id);
-
- let connect_to = match channel_id {
- Some(channel) => channel,
- None => {
- message.channel_id.say("You aren't in a voice channel... Only the people within a given voice channel can make me leave.")?;
-
- return Ok(())
- }
- };
+ let guild = message.guild().unwrap();
+ let guild_id = guild.read().id;
let manager_lock = ctx.data.lock().get::<VoiceManager>().cloned()
- .expect("Expected VoiceManager in ShareMap."); // mut
+ .expect("Expected VoiceManager in TypeMap.");
let mut manager = manager_lock.lock();
- let has_handler = manager.get(message.guild().unwrap().read().id).is_some();
+ let has_handler = manager.get(guild_id).is_some();
if has_handler {
- manager.remove(message.guild().unwrap().read().id);
+ manager.remove(guild_id);
+
+ let mut data = ctx.data.lock();
+ let lava_client_lock = data.get_mut::<Lavalink>()
+ .expect("Expected LavalinkClient in TypeMap.");
+ lava_client_lock.lock().destroy(guild_id);
- message.channel_id.say(format!("I've left <#{:?}>.",
- manager.get(message.guild().unwrap().read().id)))?;
+ message.channel_id.say(format!("Left voice channel"))?;
} else {
- message.channel_id.say("Sorry, but I'm not in a voice channel right now.")?;
+ message.channel_id.say("Error joining channel...")?;
}
Ok(())