mirror of
				https://github.com/JonasunderscoreJones/ZtereoMUSIC.git
				synced 2025-10-26 12:59:19 +01:00 
			
		
		
		
	new: check for alone and disconnect
This commit is contained in:
		
							parent
							
								
									fee15771ad
								
							
						
					
					
						commit
						39efb6b4ee
					
				
					 3 changed files with 82 additions and 13 deletions
				
			
		|  | @ -4,8 +4,8 @@ import codes.ztereohype.ztereomusic.audio.TrackManager; | |||
| import codes.ztereohype.ztereomusic.command.Command; | ||||
| import codes.ztereohype.ztereomusic.command.commands.*; | ||||
| import codes.ztereohype.ztereomusic.database.Config; | ||||
| import codes.ztereohype.ztereomusic.listeners.AloneDisconnectListener; | ||||
| import codes.ztereohype.ztereomusic.listeners.CommandListener; | ||||
| import codes.ztereohype.ztereomusic.listeners.vcLeaveListener; | ||||
| import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; | ||||
| import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager; | ||||
| import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers; | ||||
|  | @ -25,9 +25,6 @@ import java.util.EnumSet; | |||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| import static net.dv8tion.jda.api.requests.GatewayIntent.GUILD_MESSAGES; | ||||
| import static net.dv8tion.jda.api.requests.GatewayIntent.GUILD_VOICE_STATES; | ||||
| 
 | ||||
| @Getter | ||||
| @Setter(AccessLevel.PRIVATE) | ||||
| public class ZtereoMUSIC { | ||||
|  | @ -84,6 +81,12 @@ public class ZtereoMUSIC { | |||
|         Disconnect disconnect = new Disconnect(); | ||||
|         this.getCommandMap().put(disconnect.getMeta().getName(), disconnect); | ||||
| 
 | ||||
|         Clear clear = new Clear(); | ||||
|         this.getCommandMap().put(clear.getMeta().getName(), clear); | ||||
| 
 | ||||
|         Remove remove = new Remove(); | ||||
|         this.getCommandMap().put(remove.getMeta().getName(), remove); | ||||
| 
 | ||||
|         Queue queue = new Queue(); | ||||
|         this.getCommandMap().put(queue.getMeta().getName(), queue); | ||||
| 
 | ||||
|  | @ -103,6 +106,6 @@ public class ZtereoMUSIC { | |||
| 
 | ||||
|     private void setListeners() { | ||||
|         this.getJda().addEventListener(new CommandListener()); | ||||
|         this.getJda().addEventListener(new vcLeaveListener()); | ||||
|         this.getJda().addEventListener(new AloneDisconnectListener()); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,74 @@ | |||
| package codes.ztereohype.ztereomusic.listeners; | ||||
| 
 | ||||
| import codes.ztereohype.ztereomusic.ZtereoMUSIC; | ||||
| import codes.ztereohype.ztereomusic.audio.TrackManagers; | ||||
| import net.dv8tion.jda.api.entities.Guild; | ||||
| import net.dv8tion.jda.api.entities.Member; | ||||
| import net.dv8tion.jda.api.events.guild.voice.GuildVoiceJoinEvent; | ||||
| import net.dv8tion.jda.api.events.guild.voice.GuildVoiceLeaveEvent; | ||||
| import net.dv8tion.jda.api.hooks.ListenerAdapter; | ||||
| 
 | ||||
| import javax.annotation.Nonnull; | ||||
| import java.util.*; | ||||
| 
 | ||||
| public class AloneDisconnectListener extends ListenerAdapter { | ||||
|     //sorry reperak, i tried using a list of pairs but iterating over it to find it in onGuildVoiceLeave is too much effort | ||||
|     private final Map<Guild, Long> aloneGuilds = new HashMap<>(); | ||||
| 
 | ||||
|     public AloneDisconnectListener() { | ||||
|         Timer timer = new Timer(); | ||||
|         timer.scheduleAtFixedRate(new TimerTask() { | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 checkIfAloneAfterThreshold(); | ||||
|             } | ||||
|         }, 5000, 5000); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onGuildVoiceLeave(@Nonnull GuildVoiceLeaveEvent event) { | ||||
|         Guild guild = event.getGuild(); | ||||
|         Member leavingMember = event.getMember(); | ||||
|         Member ztereoBotMember = event.getGuild().getMember(ZtereoMUSIC.getInstance().getJda().getSelfUser()); | ||||
| 
 | ||||
|         if (guild.getAudioManager().getConnectedChannel() == null) return; // if we're not connected ignore | ||||
| 
 | ||||
|         // If the bot gets disconnected, delete the trackManager for that guild and don't be alone | ||||
|         if (leavingMember.equals(ztereoBotMember)) { | ||||
|             TrackManagers.removeGuildTrackManager(guild); | ||||
|             aloneGuilds.remove(guild); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         // if there's only one member (and i'm still in), be alone and start a 5m timer | ||||
|         if (guild.getAudioManager().getConnectedChannel().getMembers().size() == 1) { | ||||
|             System.out.println("i'm alone"); | ||||
|             aloneGuilds.put(guild, System.currentTimeMillis()); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onGuildVoiceJoin(@Nonnull GuildVoiceJoinEvent event) { | ||||
|         Guild guild = event.getGuild(); | ||||
| 
 | ||||
|         if (guild.getAudioManager().getConnectedChannel() == null) return; // if we're not connected ignore | ||||
| 
 | ||||
| 
 | ||||
|         // if there's no longer only one member don't be alone (i wrote this at 4am please tell me it works) | ||||
|         if (guild.getAudioManager().getConnectedChannel().getMembers().size() > 1) { | ||||
|             aloneGuilds.remove(guild); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void checkIfAloneAfterThreshold() { | ||||
|         long time = System.currentTimeMillis(); | ||||
|         for (Map.Entry<Guild, Long> entry : aloneGuilds.entrySet()) { | ||||
|             if ((time - entry.getValue()) > (long) 5 * 60 * 1000) { | ||||
|                 TrackManagers.removeGuildTrackManager(entry.getKey()); | ||||
|                 aloneGuilds.remove(entry.getKey()); | ||||
|             }; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     //Note: no need to check for moves as the bot currently never moves, only leaves and joins | ||||
| } | ||||
|  | @ -1,8 +0,0 @@ | |||
| //package codes.ztereohype.ztereomusic.listeners; | ||||
| // | ||||
| //import net.dv8tion.jda.api.hooks.ListenerAdapter; | ||||
| // | ||||
| //public class AloneInVcListener extends ListenerAdapter { | ||||
| //    @Override | ||||
| //    public void on | ||||
| //} | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue