RMusicBot/src/player/player.rs

95 lines
2.6 KiB
Rust
Raw Normal View History

2019-07-12 08:39:03 +00:00
use parking_lot::MutexGuard;
2018-11-14 14:29:58 +00:00
use serenity;
use serenity::model::id::{ChannelId, GuildId};
use serenity::voice::Handler;
2018-11-23 12:18:07 +00:00
use super::prelude::*;
2018-11-14 14:29:58 +00:00
pub fn guild_id(channel_id: ChannelId) -> Option<GuildId> {
2019-07-12 08:39:03 +00:00
/*
2018-11-14 14:29:58 +00:00
match CACHE.read().guild_channel(channel_id) {
Some(channel) => Some(channel.read().guild_id),
None => {
print_error!(channel_id.say("Error finding channel info"));
None
}
}
2019-07-12 08:39:03 +00:00
*/
None
2018-11-14 14:29:58 +00:00
}
pub fn handler<'a>(
guild_id: GuildId,
2019-07-12 08:39:03 +00:00
manager: &'a mut MutexGuard<'_, serenity::client::bridge::voice::ClientVoiceManager>,
2018-11-14 14:29:58 +00:00
) -> Option<&'a mut Handler> {
manager.get_mut(guild_id)
}
2018-11-23 12:18:07 +00:00
pub fn channel_contains_author(
ctx: &mut serenity::client::Context,
msg: &serenity::model::channel::Message,
) -> bool {
let (guild_id, voice_channel_id_bot) = {
2019-07-12 08:39:03 +00:00
match ctx.data.read().get::<VoiceManager>().cloned() {
2019-04-28 12:13:36 +00:00
Some(manager_lock) => {
let mut manager = manager_lock.lock();
let guild_id = match guild_id(msg.channel_id) {
Some(guild_id) => guild_id,
None => {
println!("error getting guild_id");
return true;
}
};
2018-11-23 12:18:07 +00:00
2019-04-28 12:13:36 +00:00
let handler = match handler(guild_id, &mut manager) {
Some(handler) => handler,
None => {
println!("error getting handler");
return true;
}
};
2018-11-23 12:18:07 +00:00
2019-04-28 12:13:36 +00:00
(
guild_id,
match handler.channel_id {
Some(id) => id,
None => {
println!("error getting channel_id for bot");
return true;
}
},
)
2018-11-23 12:18:07 +00:00
}
2019-04-28 12:13:36 +00:00
None => return false,
}
};
let author = &msg.author;
2019-07-12 08:39:03 +00:00
let guild = match guild_id.to_guild_cached(&ctx) {
Some(guild) => guild,
None => {
println!("error getting guild from cache");
return true;
}
};
let guild_lock = guild.read();
let voice_state = match guild_lock.voice_states.get(&author.id) {
Some(state) => state,
None => {
println!("error getting voice state from user {}", author.name);
return false;
}
};
if let Some(voice_channel_id_user) = voice_state.channel_id {
if voice_channel_id_bot != voice_channel_id_user {
return false;
2018-11-23 12:18:07 +00:00
}
}
true
}