Improve cleanup for music player, fix resume logic, check if player is connected before checking url, refactor context
This commit is contained in:
1 parent
ddd7d119bb
commit
81e15a5394
5 files changed
+48
-152
No files matched your search
@@ -5,7 +5,6 @@ package me.bobert.netneutrality.context;
|
|||||||
* https://discord.gg/qUa6zNFZsd
|
* https://discord.gg/qUa6zNFZsd
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import me.bobert.netneutrality.core.AsyncMessage;
|
|
||||||
import me.bobert.netneutrality.core.context.CommandContext;
|
import me.bobert.netneutrality.core.context.CommandContext;
|
||||||
import me.bobert.netneutrality.utils.Settings;
|
import me.bobert.netneutrality.utils.Settings;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
@@ -15,6 +14,7 @@ import net.dv8tion.jda.api.interactions.components.LayoutComponent;
|
|||||||
import net.dv8tion.jda.api.interactions.modals.Modal;
|
import net.dv8tion.jda.api.interactions.modals.Modal;
|
||||||
import net.dv8tion.jda.api.utils.messages.MessageCreateData;
|
import net.dv8tion.jda.api.utils.messages.MessageCreateData;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
@@ -77,14 +77,14 @@ public class MessageCommandContext extends CommandContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void defer(Consumer<AsyncMessage> consumer) {
|
public void defer(boolean ephemeral, Consumer<AsyncContext> consumer) {
|
||||||
reply("Bot is thinking...", consumer);
|
reply("Bot is thinking...", consumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reply(MessageCreateData messageCreateData, boolean ephemeral, Consumer<AsyncMessage> consumer, LayoutComponent... components) {
|
public void reply(MessageCreateData messageCreateData, boolean ephemeral, List<LayoutComponent> components, Consumer<AsyncContext> consumer) {
|
||||||
if (getChannel() != null && getChannel().canTalk()) {
|
if (getChannel() != null && getChannel().canTalk()) {
|
||||||
message.reply(messageCreateData).setComponents(components).queue(message1 -> consumer.accept(new AsyncMessage(message1)));
|
message.reply(messageCreateData).setComponents(components).queue(message -> consumer.accept(new AsyncContext(message)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,8 +94,8 @@ public class MessageCommandContext extends CommandContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void replyEphemeral(MessageCreateData message) {
|
public void replyEphemeral(MessageCreateData messageCreateData) {
|
||||||
sendMessageInPrivate(message);
|
sendMessageInPrivate(messageCreateData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -5,17 +5,13 @@ package me.bobert.netneutrality.context;
|
|||||||
* https://discord.gg/qUa6zNFZsd
|
* https://discord.gg/qUa6zNFZsd
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import me.bobert.netneutrality.core.AsyncMessage;
|
|
||||||
import me.bobert.netneutrality.core.context.CommandContext;
|
import me.bobert.netneutrality.core.context.CommandContext;
|
||||||
|
import me.bobert.netneutrality.core.context.InteractionContext;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
import net.dv8tion.jda.api.interactions.InteractionHook;
|
import net.dv8tion.jda.api.interactions.InteractionHook;
|
||||||
import net.dv8tion.jda.api.interactions.components.LayoutComponent;
|
|
||||||
import net.dv8tion.jda.api.interactions.modals.Modal;
|
import net.dv8tion.jda.api.interactions.modals.Modal;
|
||||||
import net.dv8tion.jda.api.utils.messages.MessageCreateData;
|
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
public class SlashCommandContext extends CommandContext implements InteractionContext {
|
||||||
|
|
||||||
public class SlashCommandContext extends CommandContext {
|
|
||||||
private final SlashCommandInteractionEvent event;
|
private final SlashCommandInteractionEvent event;
|
||||||
|
|
||||||
public SlashCommandContext(SlashCommandInteractionEvent event) {
|
public SlashCommandContext(SlashCommandInteractionEvent event) {
|
||||||
@@ -28,16 +24,6 @@ public class SlashCommandContext extends CommandContext {
|
|||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAcknowledged() {
|
|
||||||
return event.isAcknowledged();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isFromGuild() {
|
|
||||||
return event.isFromGuild();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractionHook getInteractionHook() {
|
public InteractionHook getInteractionHook() {
|
||||||
if (!event.isAcknowledged())
|
if (!event.isAcknowledged())
|
||||||
@@ -51,36 +37,11 @@ public class SlashCommandContext extends CommandContext {
|
|||||||
// not implemented
|
// not implemented
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void defer(Consumer<AsyncMessage> consumer) {
|
|
||||||
event.deferReply().queue(hook -> consumer.accept(new AsyncMessage(hook)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void reply(MessageCreateData message, boolean ephemeral, Consumer<AsyncMessage> consumer, LayoutComponent... components) {
|
|
||||||
if (isAcknowledged()) {
|
|
||||||
getInteractionHook().sendMessage(message).setEphemeral(ephemeral).setComponents(components)
|
|
||||||
.queue(message1 -> consumer.accept(new AsyncMessage(message1)));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
event.reply(message).setEphemeral(ephemeral).setComponents(components)
|
|
||||||
.queue(message1 -> consumer.accept(new AsyncMessage(message1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reply(Modal modal) {
|
public void reply(Modal modal) {
|
||||||
event.replyModal(modal).queue();
|
event.replyModal(modal).queue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void ack(boolean ephemeral) {
|
|
||||||
if (event.isAcknowledged())
|
|
||||||
throw new RuntimeException("Interaction is already acknowledged, please use getInteractionHook() instead.");
|
|
||||||
|
|
||||||
event.deferReply(ephemeral).queue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String parseCommandName() {
|
public String parseCommandName() {
|
||||||
return event.getName();
|
return event.getName();
|
||||||
|
|||||||
@@ -1,102 +0,0 @@
|
|||||||
package me.bobert.netneutrality.core;
|
|
||||||
/*
|
|
||||||
* Copyright (c) anthorob
|
|
||||||
*
|
|
||||||
* https://discord.gg/qUa6zNFZsd
|
|
||||||
*/
|
|
||||||
|
|
||||||
import me.bobert.netneutrality.core.context.AbstractContext;
|
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
|
||||||
import net.dv8tion.jda.api.events.Event;
|
|
||||||
import net.dv8tion.jda.api.interactions.InteractionHook;
|
|
||||||
import net.dv8tion.jda.api.interactions.components.LayoutComponent;
|
|
||||||
import net.dv8tion.jda.api.interactions.modals.Modal;
|
|
||||||
import net.dv8tion.jda.api.utils.messages.MessageCreateData;
|
|
||||||
import net.dv8tion.jda.api.utils.messages.MessageEditData;
|
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
public class AsyncMessage extends AbstractContext {
|
|
||||||
private final InteractionHook hook;
|
|
||||||
private final Message message;
|
|
||||||
|
|
||||||
public AsyncMessage(InteractionHook hook) {
|
|
||||||
super(hook.getJDA(), hook.getInteraction().getGuild(), hook.getInteraction().getMessageChannel(), hook.getInteraction().getMember(), hook.getInteraction().getUser());
|
|
||||||
this.hook = hook;
|
|
||||||
this.message = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AsyncMessage(Message message) {
|
|
||||||
super(message.getJDA(), message.getGuild(), message.getChannel(), message.getMember(), message.getAuthor());
|
|
||||||
this.hook = null;
|
|
||||||
this.message = message;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Event getEvent() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InteractionHook getInteractionHook() {
|
|
||||||
return hook;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAcknowledged() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isFromGuild() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteMessage() {
|
|
||||||
if (hook != null) {
|
|
||||||
hook.deleteOriginal().queue();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message != null) {
|
|
||||||
message.delete().queue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void reply(Modal modal) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void reply(MessageCreateData messageCreateData, boolean ephemeral, Consumer<AsyncMessage> consumer, LayoutComponent... components) {
|
|
||||||
if (hook != null) {
|
|
||||||
hook.sendMessage(messageCreateData).queue();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message != null) {
|
|
||||||
message.reply(messageCreateData).queue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void defer(Consumer<AsyncMessage> consumer) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void ack(boolean ephemeral) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void edit(MessageEditData messageEditData, boolean ephemeral, Consumer<AsyncMessage> consumer, LayoutComponent... components) {
|
|
||||||
if (hook != null) {
|
|
||||||
hook.editOriginal(messageEditData).queue();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message != null) {
|
|
||||||
message.editMessage(messageEditData).queue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -44,9 +44,7 @@ public class AddAllTracksTask extends ButtonTask implements WithParent<LoadPlayl
|
|||||||
Member member = context.getGuildUser();
|
Member member = context.getGuildUser();
|
||||||
|
|
||||||
if (MusicUtils.connect(context)) {
|
if (MusicUtils.connect(context)) {
|
||||||
for (AudioTrack track : tracks) {
|
manager.getQueueManager().queue(tracks, member);
|
||||||
manager.getQueueManager().queue(track, member);
|
|
||||||
}
|
|
||||||
|
|
||||||
context.reply(MessageFunction.buildAddingPlaylistMessage(tracks, parentTask.getPlaylist().getName(), member, SourceFinder.AudioSourceType.Youtube));
|
context.reply(MessageFunction.buildAddingPlaylistMessage(tracks, parentTask.getPlaylist().getName(), member, SourceFinder.AudioSourceType.Youtube));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package me.bobert.netneutrality.thread;
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* https://discord.gg/qUa6zNFZsd
|
||||||
|
*/
|
||||||
|
|
||||||
|
import me.bobert.netneutrality.music.MusicManager;
|
||||||
|
import me.bobert.netneutrality.music.TrackScheduler;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
public class MusicManagerCleanupThread implements Runnable {
|
||||||
|
private static final Logger logger = LogManager.getLogger(MusicManagerCleanupThread.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
for (MusicManager manager : MusicManager.getManagers()) {
|
||||||
|
processManager(manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
logger.error("Interrupted while running MusicManagerCleanupThread", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processManager(MusicManager manager) throws InterruptedException {
|
||||||
|
TrackScheduler scheduler = manager.getScheduler();
|
||||||
|
|
||||||
|
// Context is still attached after bot is disconnected, the bot might have been kicked from the channel
|
||||||
|
if (scheduler.getContext() != null && !manager.isConnected()) {
|
||||||
|
manager.disconnect();
|
||||||
|
manager.getQueueManager().clearQueue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user