2018-11-14 14:29:58 +00:00
|
|
|
use parking_lot;
|
|
|
|
|
|
|
|
use serenity;
|
|
|
|
use serenity::client::CACHE;
|
|
|
|
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> {
|
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn handler<'a>(
|
|
|
|
guild_id: GuildId,
|
|
|
|
manager: &'a mut parking_lot::MutexGuard<
|
|
|
|
'_,
|
|
|
|
serenity::client::bridge::voice::ClientVoiceManager,
|
|
|
|
>,
|
|
|
|
) -> 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 {
|
2018-11-23 13:57:57 +00:00
|
|
|
let (guild_id, voice_channel_id_bot) = {
|
|
|
|
let manager_lock = ctx.data.lock().get::<VoiceManager>().cloned().unwrap();
|
2018-11-23 12:18:07 +00:00
|
|
|
|
2018-11-23 13:57:57 +00:00
|
|
|
let mut manager = manager_lock.lock();
|
|
|
|
let guild_id = match guild_id(msg.channel_id) {
|
|
|
|
Some(guild_id) => guild_id,
|
2018-11-23 12:18:07 +00:00
|
|
|
None => {
|
2018-11-23 13:57:57 +00:00
|
|
|
println!("error getting guild_id");
|
2018-11-23 12:18:07 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2018-11-23 13:57:57 +00:00
|
|
|
let handler = match handler(guild_id, &mut manager) {
|
|
|
|
Some(handler) => handler,
|
2018-11-23 12:18:07 +00:00
|
|
|
None => {
|
2018-11-23 13:57:57 +00:00
|
|
|
println!("error getting handler");
|
|
|
|
return true;
|
2018-11-23 12:18:07 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2018-11-23 13:57:57 +00:00
|
|
|
(
|
|
|
|
guild_id,
|
|
|
|
match handler.channel_id {
|
|
|
|
Some(id) => id,
|
|
|
|
None => {
|
|
|
|
println!("error getting channel_id for bot");
|
2018-11-23 21:06:35 +00:00
|
|
|
return true;
|
2018-11-23 13:57:57 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
)
|
|
|
|
};
|
|
|
|
|
|
|
|
let author = &msg.author;
|
|
|
|
|
|
|
|
let guild = match guild_id.to_guild_cached() {
|
|
|
|
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
|
|
|
|
}
|