use serenity::all::{ChannelId, Context, Guild, GuildId, UserId}; /// Get a guild by id pub fn get_guild(ctx: &Context, guild_id: &GuildId) -> Option { let guild = match ctx.cache.guild(guild_id) { Some(guild) => guild, None => { println!("Cannot get guild!"); return None } }; // TODO This is always None for some reason println!("Got guild: {:?}", guild.name); Some(guild.clone()) } /// Get the current channel id of the bot pub fn get_vc_id(ctx: &Context, guild_id: &GuildId, user_id: &UserId) -> Option { let guild = match get_guild(&ctx, guild_id){ Some(guild) => guild, None => { println!("Cannot get guild while getting channel id!"); return None } }; let channel_id = guild .voice_states .get(user_id) .and_then(|voice_state| voice_state.channel_id)?; println!("Got vc with id: {:?}", channel_id); Some(channel_id) } /// Check if the bot is connected to a voice channel pub fn is_self_connected_to_vc(ctx: &Context, guild_id: &GuildId) -> bool { let channel_id = get_self_vc_id(ctx, guild_id); !channel_id.is_none() } /// Get the current channel id of the bot pub fn get_self_vc_id(ctx: &Context, guild_id: &GuildId) -> Option { let channel_id = get_vc_id(ctx, guild_id, &ctx.cache.current_user().id)?; Some(channel_id) }