|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
use serenity::async_trait;
|
|
|
|
|
use serenity::client::Context;
|
|
|
|
|
use serenity::model::channel::Reaction;
|
|
|
|
|
use serenity::model::channel::{GuildChannel, Reaction};
|
|
|
|
|
use serenity::model::event::ResumedEvent;
|
|
|
|
|
use serenity::model::gateway::{Activity, Ready};
|
|
|
|
|
use serenity::model::guild::Member;
|
|
|
|
@ -9,6 +9,7 @@ use serenity::model::voice::VoiceState;
|
|
|
|
|
use serenity::prelude::*;
|
|
|
|
|
|
|
|
|
|
use crate::commands::music::get_music_player_for_guild;
|
|
|
|
|
use crate::utils::context_data::MusicPlayers;
|
|
|
|
|
use crate::utils::delete_messages_from_database;
|
|
|
|
|
use bot_serenityutils::menu::{
|
|
|
|
|
handle_message_delete, handle_message_delete_bulk, handle_reaction_add, handle_reaction_remove,
|
|
|
|
@ -109,12 +110,12 @@ impl EventHandler for Handler {
|
|
|
|
|
return;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if let Some(old_id) = old_state.and_then(|c| c.channel_id) {
|
|
|
|
|
member_count = get_own_channel_member_count(&ctx, &old_id).await;
|
|
|
|
|
if let Some(old_id) = old_state.clone().and_then(|c| c.channel_id) {
|
|
|
|
|
member_count = get_own_channel_member_count(&ctx, old_id).await;
|
|
|
|
|
}
|
|
|
|
|
if member_count.is_none() {
|
|
|
|
|
if let Some(new_id) = new_state.channel_id {
|
|
|
|
|
member_count = get_own_channel_member_count(&ctx, &new_id).await;
|
|
|
|
|
member_count = get_own_channel_member_count(&ctx, new_id).await;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -126,14 +127,28 @@ impl EventHandler for Handler {
|
|
|
|
|
player.set_leave_flag(count == 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if let (Some(state), None) = (old_state, new_state.channel_id) {
|
|
|
|
|
let current_user = ctx.cache.current_user().await;
|
|
|
|
|
|
|
|
|
|
if state.user_id == current_user.id {
|
|
|
|
|
let mut data = ctx.data.write().await;
|
|
|
|
|
let players = data.get_mut::<MusicPlayers>().unwrap();
|
|
|
|
|
|
|
|
|
|
if let Some(player) = players.remove(&guild_id.0) {
|
|
|
|
|
let mut player = player.lock().await;
|
|
|
|
|
let _ = player.delete_now_playing().await;
|
|
|
|
|
let _ = player.stop().await;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Returns the number of members in the channel if it's the bots voice channel
|
|
|
|
|
async fn get_own_channel_member_count(ctx: &Context, channel_id: &ChannelId) -> Option<usize> {
|
|
|
|
|
let channel = ctx.http.get_channel(channel_id.0).await.ok()?;
|
|
|
|
|
let guild_channel = channel.guild()?;
|
|
|
|
|
let current_user = ctx.http.get_current_user().await.ok()?;
|
|
|
|
|
async fn get_own_channel_member_count(ctx: &Context, channel_id: ChannelId) -> Option<usize> {
|
|
|
|
|
let guild_channel = get_guild_channel(ctx, channel_id).await?;
|
|
|
|
|
|
|
|
|
|
let current_user = ctx.cache.current_user().await;
|
|
|
|
|
|
|
|
|
|
let members = guild_channel.members(&ctx).await.ok()?;
|
|
|
|
|
let own_channel = members
|
|
|
|
@ -148,3 +163,12 @@ async fn get_own_channel_member_count(ctx: &Context, channel_id: &ChannelId) ->
|
|
|
|
|
|
|
|
|
|
Some(members.len())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Returns the guild channel for a guild ID
|
|
|
|
|
async fn get_guild_channel(ctx: &Context, channel_id: ChannelId) -> Option<GuildChannel> {
|
|
|
|
|
if let Some(channel) = ctx.cache.channel(channel_id).await {
|
|
|
|
|
return channel.guild();
|
|
|
|
|
}
|
|
|
|
|
let channel = ctx.http.get_channel(channel_id.0).await.ok()?;
|
|
|
|
|
channel.guild()
|
|
|
|
|
}
|
|
|
|
|