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
|
||||
*/
|
||||
|
||||
import me.bobert.netneutrality.core.AsyncMessage;
|
||||
import me.bobert.netneutrality.core.context.CommandContext;
|
||||
import me.bobert.netneutrality.utils.Settings;
|
||||
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.utils.messages.MessageCreateData;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@@ -77,14 +77,14 @@ public class MessageCommandContext extends CommandContext {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void defer(Consumer<AsyncMessage> consumer) {
|
||||
public void defer(boolean ephemeral, Consumer<AsyncContext> consumer) {
|
||||
reply("Bot is thinking...", consumer);
|
||||
}
|
||||
|
||||
@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()) {
|
||||
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
|
||||
public void replyEphemeral(MessageCreateData message) {
|
||||
sendMessageInPrivate(message);
|
||||
public void replyEphemeral(MessageCreateData messageCreateData) {
|
||||
sendMessageInPrivate(messageCreateData);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,17 +5,13 @@ package me.bobert.netneutrality.context;
|
||||
* https://discord.gg/qUa6zNFZsd
|
||||
*/
|
||||
|
||||
import me.bobert.netneutrality.core.AsyncMessage;
|
||||
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.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 java.util.function.Consumer;
|
||||
|
||||
public class SlashCommandContext extends CommandContext {
|
||||
public class SlashCommandContext extends CommandContext implements InteractionContext {
|
||||
private final SlashCommandInteractionEvent event;
|
||||
|
||||
public SlashCommandContext(SlashCommandInteractionEvent event) {
|
||||
@@ -28,16 +24,6 @@ public class SlashCommandContext extends CommandContext {
|
||||
return event;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAcknowledged() {
|
||||
return event.isAcknowledged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFromGuild() {
|
||||
return event.isFromGuild();
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionHook getInteractionHook() {
|
||||
if (!event.isAcknowledged())
|
||||
@@ -51,36 +37,11 @@ public class SlashCommandContext extends CommandContext {
|
||||
// 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
|
||||
public void reply(Modal modal) {
|
||||
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
|
||||
public String parseCommandName() {
|
||||
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();
|
||||
|
||||
if (MusicUtils.connect(context)) {
|
||||
for (AudioTrack track : tracks) {
|
||||
manager.getQueueManager().queue(track, member);
|
||||
}
|
||||
manager.getQueueManager().queue(tracks, member);
|
||||
|
||||
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