mirror of
https://github.com/JonasunderscoreJones/ZtereoMUSIC.git
synced 2025-10-25 13:39:19 +02: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.Command;
|
||||||
import codes.ztereohype.ztereomusic.command.commands.*;
|
import codes.ztereohype.ztereomusic.command.commands.*;
|
||||||
import codes.ztereohype.ztereomusic.database.Config;
|
import codes.ztereohype.ztereomusic.database.Config;
|
||||||
|
import codes.ztereohype.ztereomusic.listeners.AloneDisconnectListener;
|
||||||
import codes.ztereohype.ztereomusic.listeners.CommandListener;
|
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.AudioPlayerManager;
|
||||||
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
||||||
import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers;
|
import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers;
|
||||||
|
|
@ -25,9 +25,6 @@ import java.util.EnumSet;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
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
|
@Getter
|
||||||
@Setter(AccessLevel.PRIVATE)
|
@Setter(AccessLevel.PRIVATE)
|
||||||
public class ZtereoMUSIC {
|
public class ZtereoMUSIC {
|
||||||
|
|
@ -84,6 +81,12 @@ public class ZtereoMUSIC {
|
||||||
Disconnect disconnect = new Disconnect();
|
Disconnect disconnect = new Disconnect();
|
||||||
this.getCommandMap().put(disconnect.getMeta().getName(), 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();
|
Queue queue = new Queue();
|
||||||
this.getCommandMap().put(queue.getMeta().getName(), queue);
|
this.getCommandMap().put(queue.getMeta().getName(), queue);
|
||||||
|
|
||||||
|
|
@ -103,6 +106,6 @@ public class ZtereoMUSIC {
|
||||||
|
|
||||||
private void setListeners() {
|
private void setListeners() {
|
||||||
this.getJda().addEventListener(new CommandListener());
|
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