Added handling of extra infortmation on what users requested what tracks.
This commit is contained in:
41
src/main/java/dev/logal/logalbot/audio/RequestedTrack.java
Normal file
41
src/main/java/dev/logal/logalbot/audio/RequestedTrack.java
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package dev.logal.logalbot.audio;
|
||||||
|
|
||||||
|
// Copyright 2019 Logan Fick
|
||||||
|
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
|
||||||
|
// https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
|
import net.dv8tion.jda.core.utils.Checks;
|
||||||
|
|
||||||
|
public final class RequestedTrack {
|
||||||
|
private final AudioTrack track;
|
||||||
|
private final Member requester;
|
||||||
|
|
||||||
|
public RequestedTrack(final AudioTrack track, final Member requester) {
|
||||||
|
Checks.notNull(track, "Track");
|
||||||
|
Checks.notNull(requester, "Requester");
|
||||||
|
|
||||||
|
this.track = track;
|
||||||
|
this.requester = requester;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final AudioTrack getTrack() {
|
||||||
|
return this.track;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final Member getRequester() {
|
||||||
|
return this.requester;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ package dev.logal.logalbot.audio;
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.LinkedList;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
|
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
|
||||||
@@ -82,10 +82,11 @@ public final class TrackLoadHandler implements AudioLoadResultHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
scheduler.addToQueue(track, requester);
|
final RequestedTrack requestedTrack = new RequestedTrack(track, requester);
|
||||||
|
scheduler.addToQueue(requestedTrack);
|
||||||
response = new CommandResponse("notes",
|
response = new CommandResponse("notes",
|
||||||
this.requester.getAsMention() + " added the following track to the queue:");
|
this.requester.getAsMention() + " added the following track to the queue:");
|
||||||
response.attachEmbed(TrackUtil.trackInfoEmbed(track));
|
response.attachEmbed(TrackUtil.trackInfoEmbed(requestedTrack));
|
||||||
response.sendResponse(this.channel);
|
response.sendResponse(this.channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,11 +98,13 @@ public final class TrackLoadHandler implements AudioLoadResultHandler {
|
|||||||
final TrackScheduler scheduler = AudioUtil.getTrackScheduler(this.channel.getGuild());
|
final TrackScheduler scheduler = AudioUtil.getTrackScheduler(this.channel.getGuild());
|
||||||
|
|
||||||
final AudioTrack selectedTrack = playlist.getSelectedTrack();
|
final AudioTrack selectedTrack = playlist.getSelectedTrack();
|
||||||
AudioTrack track = null;
|
final AudioTrack track;
|
||||||
if (!playlist.isSearchResult() && selectedTrack != null) {
|
if (!playlist.isSearchResult() && selectedTrack != null) {
|
||||||
track = selectedTrack;
|
track = selectedTrack;
|
||||||
} else if (playlist.isSearchResult()) {
|
} else if (playlist.isSearchResult()) {
|
||||||
track = playlist.getTracks().get(0);
|
track = playlist.getTracks().get(0);
|
||||||
|
} else {
|
||||||
|
track = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (track != null) {
|
if (track != null) {
|
||||||
@@ -123,10 +126,11 @@ public final class TrackLoadHandler implements AudioLoadResultHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((info.length >= 60000 && info.length <= 900000) || PermissionManager.isWhitelisted(this.requester)) {
|
if ((info.length >= 60000 && info.length <= 900000) || PermissionManager.isWhitelisted(this.requester)) {
|
||||||
scheduler.addToQueue(track, this.requester);
|
final RequestedTrack requestedTrack = new RequestedTrack(track, requester);
|
||||||
|
scheduler.addToQueue(requestedTrack);
|
||||||
response = new CommandResponse("notes",
|
response = new CommandResponse("notes",
|
||||||
this.requester.getAsMention() + " added the following track to the queue:");
|
this.requester.getAsMention() + " added the following track to the queue:");
|
||||||
response.attachEmbed(TrackUtil.trackInfoEmbed(track));
|
response.attachEmbed(TrackUtil.trackInfoEmbed(requestedTrack));
|
||||||
response.sendResponse(this.channel);
|
response.sendResponse(this.channel);
|
||||||
} else {
|
} else {
|
||||||
response = new CommandResponse("no_entry_sign", "Sorry " + this.requester.getAsMention()
|
response = new CommandResponse("no_entry_sign", "Sorry " + this.requester.getAsMention()
|
||||||
@@ -136,12 +140,13 @@ public final class TrackLoadHandler implements AudioLoadResultHandler {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (PermissionManager.isWhitelisted(this.requester)) {
|
if (PermissionManager.isWhitelisted(this.requester)) {
|
||||||
final ArrayList<AudioTrack> addedTracks = new ArrayList<>();
|
final LinkedList<RequestedTrack> addedTracks = new LinkedList<>();
|
||||||
for (final AudioTrack playlistTrack : playlist.getTracks()) {
|
for (final AudioTrack playlistTrack : playlist.getTracks()) {
|
||||||
if (!scheduler.isQueueFull()) {
|
if (!scheduler.isQueueFull()) {
|
||||||
if (!scheduler.isQueued(playlistTrack) && !playlistTrack.getInfo().isStream) {
|
if (!scheduler.isQueued(playlistTrack) && !playlistTrack.getInfo().isStream) {
|
||||||
scheduler.addToQueue(playlistTrack, this.requester);
|
final RequestedTrack requestedTrack = new RequestedTrack(track, requester);
|
||||||
addedTracks.add(playlistTrack);
|
scheduler.addToQueue(requestedTrack);
|
||||||
|
addedTracks.add(requestedTrack);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ package dev.logal.logalbot.audio;
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ public final class TrackScheduler extends AudioEventAdapter {
|
|||||||
private static final Logger logger = LoggerFactory.getLogger(TrackScheduler.class);
|
private static final Logger logger = LoggerFactory.getLogger(TrackScheduler.class);
|
||||||
|
|
||||||
private final Guild guild;
|
private final Guild guild;
|
||||||
private final ArrayList<AudioTrack> queue = new ArrayList<>(250);
|
private final LinkedList<RequestedTrack> queue = new LinkedList<>();
|
||||||
private boolean queueLocked = false;
|
private boolean queueLocked = false;
|
||||||
private ScheduledFuture<?> idleLogoutTask;
|
private ScheduledFuture<?> idleLogoutTask;
|
||||||
|
|
||||||
@@ -54,10 +54,10 @@ public final class TrackScheduler extends AudioEventAdapter {
|
|||||||
this.guild = guild;
|
this.guild = guild;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void addToQueue(final AudioTrack track, final Member requester) {
|
public final void addToQueue(final RequestedTrack requestedTrack) {
|
||||||
Checks.notNull(track, "Track");
|
Checks.notNull(requestedTrack, "Requested Track");
|
||||||
Checks.notNull(requester, "Requester");
|
|
||||||
|
|
||||||
|
final Member requester = requestedTrack.getRequester();
|
||||||
if (this.queueLocked && !PermissionManager.isWhitelisted(requester)) {
|
if (this.queueLocked && !PermissionManager.isWhitelisted(requester)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -67,27 +67,30 @@ public final class TrackScheduler extends AudioEventAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final User user = requester.getUser();
|
final User user = requester.getUser();
|
||||||
|
final AudioTrack track = requestedTrack.getTrack();
|
||||||
logger.info(user.getName() + " (" + user.getId() + ") added '" + track.getInfo().title + "' to the queue in "
|
logger.info(user.getName() + " (" + user.getId() + ") added '" + track.getInfo().title + "' to the queue in "
|
||||||
+ this.guild.getName() + " (" + this.guild.getId() + ").");
|
+ this.guild.getName() + " (" + this.guild.getId() + ").");
|
||||||
this.queue.add(track);
|
|
||||||
if (!AudioUtil.isTrackLoaded(this.guild)) {
|
if (!AudioUtil.isTrackLoaded(this.guild)) {
|
||||||
AudioUtil.openAudioConnection(VoiceChannelUtil.getVoiceChannelMemberIsConnectedTo(requester));
|
AudioUtil.openAudioConnection(VoiceChannelUtil.getVoiceChannelMemberIsConnectedTo(requester));
|
||||||
AudioUtil.playTrack(this.guild, this.queue.remove(0));
|
AudioUtil.playTrack(this.guild, requestedTrack);
|
||||||
|
} else {
|
||||||
|
this.queue.add(requestedTrack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void removeFromQueue(final int index) {
|
public final void removeFromQueue(final int index) {
|
||||||
Checks.notNull(index, "Index");
|
Checks.notNull(index, "Index");
|
||||||
|
|
||||||
logger.info("Track '" + queue.remove(index).getInfo().title + "' has been removed from the queue in "
|
logger.info("Track '" + queue.remove(index).getTrack().getInfo().title + "' has been removed from the queue in "
|
||||||
+ this.guild.getName() + " (" + this.guild.getId() + ").");
|
+ this.guild.getName() + " (" + this.guild.getId() + ").");
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean isQueued(final AudioTrack track) {
|
public final boolean isQueued(final AudioTrack track) {
|
||||||
Checks.notNull(track, "Track");
|
Checks.notNull(track, "Track");
|
||||||
|
|
||||||
for (final AudioTrack queuedTrack : queue) {
|
for (final RequestedTrack queuedTrack : queue) {
|
||||||
if (track.getInfo().identifier.equals(queuedTrack.getInfo().identifier)) {
|
if (track.getInfo().identifier.equals(queuedTrack.getTrack().getInfo().identifier)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,13 +123,13 @@ public final class TrackScheduler extends AudioEventAdapter {
|
|||||||
Collections.shuffle(this.queue);
|
Collections.shuffle(this.queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final ArrayList<AudioTrack> getQueue() {
|
public final LinkedList<RequestedTrack> getQueue() {
|
||||||
return this.queue;
|
return this.queue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void skipCurrentTrack() {
|
public final void skipCurrentTrack() {
|
||||||
if (AudioUtil.isTrackLoaded(this.guild)) {
|
if (AudioUtil.isTrackLoaded(this.guild)) {
|
||||||
logger.info("Track '" + AudioUtil.getLoadedTrack(this.guild).getInfo().title + "' in "
|
logger.info("Track '" + AudioUtil.getLoadedTrack(this.guild).getTrack().getInfo().title + "' in "
|
||||||
+ this.guild.getName() + " (" + this.guild.getId() + ") been skipped.");
|
+ this.guild.getName() + " (" + this.guild.getId() + ") been skipped.");
|
||||||
AudioUtil.stopTrack(this.guild);
|
AudioUtil.stopTrack(this.guild);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,7 @@ package dev.logal.logalbot.commands.audio;
|
|||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
import dev.logal.logalbot.audio.RequestedTrack;
|
||||||
|
|
||||||
import dev.logal.logalbot.commands.Command;
|
import dev.logal.logalbot.commands.Command;
|
||||||
import dev.logal.logalbot.commands.CommandResponse;
|
import dev.logal.logalbot.commands.CommandResponse;
|
||||||
import dev.logal.logalbot.utils.AudioUtil;
|
import dev.logal.logalbot.utils.AudioUtil;
|
||||||
@@ -45,7 +44,7 @@ public final class ForceSkip implements Command {
|
|||||||
+ "` in order to force skip tracks.").setDeletionDelay(10, TimeUnit.SECONDS);
|
+ "` in order to force skip tracks.").setDeletionDelay(10, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
final AudioTrack skippedTrack = AudioUtil.getLoadedTrack(guild);
|
final RequestedTrack skippedTrack = AudioUtil.getLoadedTrack(guild);
|
||||||
|
|
||||||
AudioUtil.getTrackScheduler(guild).skipCurrentTrack();
|
AudioUtil.getTrackScheduler(guild).skipCurrentTrack();
|
||||||
final CommandResponse response = new CommandResponse("gun",
|
final CommandResponse response = new CommandResponse("gun",
|
||||||
|
|||||||
@@ -17,8 +17,7 @@ package dev.logal.logalbot.commands.audio;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
import dev.logal.logalbot.audio.RequestedTrack;
|
||||||
|
|
||||||
import dev.logal.logalbot.commands.Command;
|
import dev.logal.logalbot.commands.Command;
|
||||||
import dev.logal.logalbot.commands.CommandResponse;
|
import dev.logal.logalbot.commands.CommandResponse;
|
||||||
import dev.logal.logalbot.utils.AudioUtil;
|
import dev.logal.logalbot.utils.AudioUtil;
|
||||||
@@ -53,7 +52,7 @@ public final class Queue implements Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<AudioTrack> queue = AudioUtil.getTrackScheduler(guild).getQueue();
|
final List<RequestedTrack> queue = AudioUtil.getTrackScheduler(guild).getQueue();
|
||||||
if (page != 1) {
|
if (page != 1) {
|
||||||
response.addReactionCallback("arrow_left", (reactor, message) -> {
|
response.addReactionCallback("arrow_left", (reactor, message) -> {
|
||||||
ReactionCallbackManager.unregisterMessage(message, true);
|
ReactionCallbackManager.unregisterMessage(message, true);
|
||||||
@@ -69,7 +68,7 @@ public final class Queue implements Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
response.setReactionCallbackTarget(executor);
|
response.setReactionCallbackTarget(executor);
|
||||||
response.setReactionCallbackExpireDelay(3, TimeUnit.SECONDS);
|
response.setReactionCallbackExpireDelay(15, TimeUnit.SECONDS);
|
||||||
response.attachEmbed(TrackUtil.pagedTrackListInfoEmbed(queue, page));
|
response.attachEmbed(TrackUtil.pagedTrackListInfoEmbed(queue, page));
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,7 @@ package dev.logal.logalbot.commands.audio;
|
|||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
import dev.logal.logalbot.audio.RequestedTrack;
|
||||||
|
|
||||||
import dev.logal.logalbot.audio.TrackScheduler;
|
import dev.logal.logalbot.audio.TrackScheduler;
|
||||||
import dev.logal.logalbot.commands.Command;
|
import dev.logal.logalbot.commands.Command;
|
||||||
import dev.logal.logalbot.commands.CommandResponse;
|
import dev.logal.logalbot.commands.CommandResponse;
|
||||||
@@ -89,7 +88,7 @@ public final class Remove implements Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final AudioTrack removedTrack = scheduler.getQueue().get(index - 1);
|
final RequestedTrack removedTrack = scheduler.getQueue().get(index - 1);
|
||||||
|
|
||||||
scheduler.removeFromQueue(index - 1);
|
scheduler.removeFromQueue(index - 1);
|
||||||
final CommandResponse response = new CommandResponse("scissors",
|
final CommandResponse response = new CommandResponse("scissors",
|
||||||
|
|||||||
@@ -16,8 +16,7 @@ package dev.logal.logalbot.commands.audio;
|
|||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
import dev.logal.logalbot.audio.RequestedTrack;
|
||||||
|
|
||||||
import dev.logal.logalbot.commands.Command;
|
import dev.logal.logalbot.commands.Command;
|
||||||
import dev.logal.logalbot.commands.CommandResponse;
|
import dev.logal.logalbot.commands.CommandResponse;
|
||||||
import dev.logal.logalbot.utils.AudioUtil;
|
import dev.logal.logalbot.utils.AudioUtil;
|
||||||
@@ -54,7 +53,7 @@ public final class Skip implements Command {
|
|||||||
|
|
||||||
SkipTracker.registerVote(executor);
|
SkipTracker.registerVote(executor);
|
||||||
if (SkipTracker.shouldSkip(guild)) {
|
if (SkipTracker.shouldSkip(guild)) {
|
||||||
final AudioTrack skippedTrack = AudioUtil.getLoadedTrack(guild);
|
final RequestedTrack skippedTrack = AudioUtil.getLoadedTrack(guild);
|
||||||
AudioUtil.getTrackScheduler(guild).skipCurrentTrack();
|
AudioUtil.getTrackScheduler(guild).skipCurrentTrack();
|
||||||
final CommandResponse response = new CommandResponse("gun",
|
final CommandResponse response = new CommandResponse("gun",
|
||||||
executor.getAsMention() + " was the last required vote. The following track has been skipped:");
|
executor.getAsMention() + " was the last required vote. The following track has been skipped:");
|
||||||
|
|||||||
@@ -20,12 +20,12 @@ import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
|
|||||||
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;
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import dev.logal.logalbot.audio.AudioPlayerSendHandler;
|
import dev.logal.logalbot.audio.AudioPlayerSendHandler;
|
||||||
|
import dev.logal.logalbot.audio.RequestedTrack;
|
||||||
import dev.logal.logalbot.audio.TrackLoadHandler;
|
import dev.logal.logalbot.audio.TrackLoadHandler;
|
||||||
import dev.logal.logalbot.audio.TrackScheduler;
|
import dev.logal.logalbot.audio.TrackScheduler;
|
||||||
import net.dv8tion.jda.core.entities.Guild;
|
import net.dv8tion.jda.core.entities.Guild;
|
||||||
@@ -39,8 +39,9 @@ public final class AudioUtil {
|
|||||||
private static final Logger logger = LoggerFactory.getLogger(AudioUtil.class);
|
private static final Logger logger = LoggerFactory.getLogger(AudioUtil.class);
|
||||||
|
|
||||||
private static final AudioPlayerManager playerManager = new DefaultAudioPlayerManager();
|
private static final AudioPlayerManager playerManager = new DefaultAudioPlayerManager();
|
||||||
private static final HashMap<String, AudioPlayer> players = new HashMap<>();
|
private static final HashMap<Long, AudioPlayer> players = new HashMap<>();
|
||||||
private static final HashMap<String, TrackScheduler> schedulers = new HashMap<>();
|
private static final HashMap<Long, TrackScheduler> schedulers = new HashMap<>();
|
||||||
|
private static final HashMap<Long, RequestedTrack> loadedTracks = new HashMap<>();
|
||||||
|
|
||||||
private AudioUtil() {
|
private AudioUtil() {
|
||||||
// Static access only.
|
// Static access only.
|
||||||
@@ -53,9 +54,9 @@ public final class AudioUtil {
|
|||||||
public static final void initialize(final Guild guild) {
|
public static final void initialize(final Guild guild) {
|
||||||
Checks.notNull(guild, "Guild");
|
Checks.notNull(guild, "Guild");
|
||||||
|
|
||||||
players.put(guild.getId(), playerManager.createPlayer());
|
players.put(guild.getIdLong(), playerManager.createPlayer());
|
||||||
schedulers.put(guild.getId(), new TrackScheduler(guild));
|
schedulers.put(guild.getIdLong(), new TrackScheduler(guild));
|
||||||
players.get(guild.getId()).addListener(schedulers.get(guild.getId()));
|
players.get(guild.getIdLong()).addListener(schedulers.get(guild.getIdLong()));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
setVolume(guild, Integer.parseInt(DataManager.getGuildValue(guild, "defaultVolume")));
|
setVolume(guild, Integer.parseInt(DataManager.getGuildValue(guild, "defaultVolume")));
|
||||||
@@ -75,7 +76,7 @@ public final class AudioUtil {
|
|||||||
final Guild guild = channel.getGuild();
|
final Guild guild = channel.getGuild();
|
||||||
final AudioManager audioManager = guild.getAudioManager();
|
final AudioManager audioManager = guild.getAudioManager();
|
||||||
|
|
||||||
audioManager.setSendingHandler(new AudioPlayerSendHandler(players.get(guild.getId())));
|
audioManager.setSendingHandler(new AudioPlayerSendHandler(players.get(guild.getIdLong())));
|
||||||
audioManager.openAudioConnection(channel);
|
audioManager.openAudioConnection(channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,17 +98,19 @@ public final class AudioUtil {
|
|||||||
return guild.getAudioManager().isConnected();
|
return guild.getAudioManager().isConnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void playTrack(final Guild guild, final AudioTrack track) {
|
public static final void playTrack(final Guild guild, final RequestedTrack track) {
|
||||||
Checks.notNull(guild, "Guild");
|
Checks.notNull(guild, "Guild");
|
||||||
Checks.notNull(track, "Track");
|
Checks.notNull(track, "Requested Track");
|
||||||
|
|
||||||
players.get(guild.getId()).playTrack(track);
|
players.get(guild.getIdLong()).playTrack(track.getTrack());
|
||||||
|
loadedTracks.put(guild.getIdLong(), track);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void stopTrack(final Guild guild) {
|
public static final void stopTrack(final Guild guild) {
|
||||||
Checks.notNull(guild, "Guild");
|
Checks.notNull(guild, "Guild");
|
||||||
|
|
||||||
players.get(guild.getId()).stopTrack();
|
players.get(guild.getIdLong()).stopTrack();
|
||||||
|
loadedTracks.remove(guild.getIdLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final boolean isTrackLoaded(final Guild guild) {
|
public static final boolean isTrackLoaded(final Guild guild) {
|
||||||
@@ -116,10 +119,10 @@ public final class AudioUtil {
|
|||||||
return !(getLoadedTrack(guild) == null);
|
return !(getLoadedTrack(guild) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final AudioTrack getLoadedTrack(final Guild guild) {
|
public static final RequestedTrack getLoadedTrack(final Guild guild) {
|
||||||
Checks.notNull(guild, "Guild");
|
Checks.notNull(guild, "Guild");
|
||||||
|
|
||||||
return players.get(guild.getId()).getPlayingTrack();
|
return loadedTracks.get(guild.getIdLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void setPausedState(final Guild guild, final boolean pausedState) {
|
public static final void setPausedState(final Guild guild, final boolean pausedState) {
|
||||||
@@ -127,7 +130,7 @@ public final class AudioUtil {
|
|||||||
Checks.notNull(pausedState, "Paused state");
|
Checks.notNull(pausedState, "Paused state");
|
||||||
|
|
||||||
guild.getAudioManager().setSelfMuted(pausedState);
|
guild.getAudioManager().setSelfMuted(pausedState);
|
||||||
players.get(guild.getId()).setPaused(pausedState);
|
players.get(guild.getIdLong()).setPaused(pausedState);
|
||||||
|
|
||||||
if (pausedState) {
|
if (pausedState) {
|
||||||
logger.info("The audio player was paused in " + guild.getName() + " (" + guild.getId() + ").");
|
logger.info("The audio player was paused in " + guild.getName() + " (" + guild.getId() + ").");
|
||||||
@@ -139,14 +142,14 @@ public final class AudioUtil {
|
|||||||
public static final boolean isPlayerPaused(final Guild guild) {
|
public static final boolean isPlayerPaused(final Guild guild) {
|
||||||
Checks.notNull(guild, "Guild");
|
Checks.notNull(guild, "Guild");
|
||||||
|
|
||||||
return players.get(guild.getId()).isPaused();
|
return players.get(guild.getIdLong()).isPaused();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void setVolume(final Guild guild, final int volume) {
|
public static final void setVolume(final Guild guild, final int volume) {
|
||||||
Checks.notNull(guild, "Guild");
|
Checks.notNull(guild, "Guild");
|
||||||
Checks.positive(volume, "Volume");
|
Checks.positive(volume, "Volume");
|
||||||
|
|
||||||
players.get(guild.getId()).setVolume(volume);
|
players.get(guild.getIdLong()).setVolume(volume);
|
||||||
logger.info("The audio player's volume was set to " + getVolume(guild) + "% in " + guild.getName() + " ("
|
logger.info("The audio player's volume was set to " + getVolume(guild) + "% in " + guild.getName() + " ("
|
||||||
+ guild.getId() + ").");
|
+ guild.getId() + ").");
|
||||||
}
|
}
|
||||||
@@ -154,7 +157,7 @@ public final class AudioUtil {
|
|||||||
public static final int getVolume(final Guild guild) {
|
public static final int getVolume(final Guild guild) {
|
||||||
Checks.notNull(guild, "Guild");
|
Checks.notNull(guild, "Guild");
|
||||||
|
|
||||||
return players.get(guild.getId()).getVolume();
|
return players.get(guild.getIdLong()).getVolume();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void findTrack(final String query, final Member requester, final TextChannel channel) {
|
public static final void findTrack(final String query, final Member requester, final TextChannel channel) {
|
||||||
@@ -168,6 +171,6 @@ public final class AudioUtil {
|
|||||||
public static final TrackScheduler getTrackScheduler(final Guild guild) {
|
public static final TrackScheduler getTrackScheduler(final Guild guild) {
|
||||||
Checks.notNull(guild, "Guild");
|
Checks.notNull(guild, "Guild");
|
||||||
|
|
||||||
return schedulers.get(guild.getId());
|
return schedulers.get(guild.getIdLong());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -19,9 +19,11 @@ import java.util.List;
|
|||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
|
||||||
|
|
||||||
|
import dev.logal.logalbot.audio.RequestedTrack;
|
||||||
import net.dv8tion.jda.core.EmbedBuilder;
|
import net.dv8tion.jda.core.EmbedBuilder;
|
||||||
import net.dv8tion.jda.core.entities.Guild;
|
import net.dv8tion.jda.core.entities.Guild;
|
||||||
import net.dv8tion.jda.core.entities.MessageEmbed;
|
import net.dv8tion.jda.core.entities.MessageEmbed;
|
||||||
|
import net.dv8tion.jda.core.entities.User;
|
||||||
import net.dv8tion.jda.core.utils.Checks;
|
import net.dv8tion.jda.core.utils.Checks;
|
||||||
|
|
||||||
public final class TrackUtil {
|
public final class TrackUtil {
|
||||||
@@ -29,13 +31,18 @@ public final class TrackUtil {
|
|||||||
// Static access only.
|
// Static access only.
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final MessageEmbed trackInfoEmbed(final AudioTrack track) {
|
public static final MessageEmbed trackInfoEmbed(final RequestedTrack queuedTrack) {
|
||||||
Checks.notNull(track, "Track");
|
Checks.notNull(queuedTrack, "Track");
|
||||||
|
|
||||||
|
final AudioTrack track = queuedTrack.getTrack();
|
||||||
final EmbedBuilder builder = new EmbedBuilder();
|
final EmbedBuilder builder = new EmbedBuilder();
|
||||||
final AudioTrackInfo info = track.getInfo();
|
final AudioTrackInfo info = track.getInfo();
|
||||||
|
final User requester = queuedTrack.getRequester().getUser();
|
||||||
builder.addField(StringUtil.sanitize(info.title), StringUtil.sanitize(info.author) + " - "
|
builder.addField(StringUtil.sanitize(info.title), StringUtil.sanitize(info.author) + " - "
|
||||||
+ StringUtil.formatTime(track.getDuration()) + " - [View](" + info.uri + ")", false).build();
|
+ StringUtil.formatTime(track.getDuration()) + " - [View](" + info.uri + ")", false).build();
|
||||||
|
builder.setFooter(
|
||||||
|
"Requested by " + StringUtil.sanitize(requester.getName()) + "#" + requester.getDiscriminator(),
|
||||||
|
requester.getAvatarUrl());
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,16 +50,20 @@ public final class TrackUtil {
|
|||||||
Checks.notNull(guild, "Guild");
|
Checks.notNull(guild, "Guild");
|
||||||
|
|
||||||
final EmbedBuilder builder = new EmbedBuilder();
|
final EmbedBuilder builder = new EmbedBuilder();
|
||||||
final AudioTrack track = AudioUtil.getLoadedTrack(guild);
|
final AudioTrack track = AudioUtil.getLoadedTrack(guild).getTrack();
|
||||||
final AudioTrackInfo info = track.getInfo();
|
final AudioTrackInfo info = track.getInfo();
|
||||||
|
final User requester = AudioUtil.getLoadedTrack(guild).getRequester().getUser();
|
||||||
builder.addField(StringUtil.sanitize(info.title),
|
builder.addField(StringUtil.sanitize(info.title),
|
||||||
StringUtil.sanitize(info.author) + " - " + StringUtil.formatTime(track.getPosition()) + "/"
|
StringUtil.sanitize(info.author) + " - " + StringUtil.formatTime(track.getPosition()) + "/"
|
||||||
+ StringUtil.formatTime(track.getDuration()) + " - [View](" + info.uri + ")",
|
+ StringUtil.formatTime(track.getDuration()) + " - [View](" + info.uri + ")",
|
||||||
false).build();
|
false).build();
|
||||||
|
builder.setFooter(
|
||||||
|
"Requested by " + StringUtil.sanitize(requester.getName()) + "#" + requester.getDiscriminator(),
|
||||||
|
requester.getAvatarUrl());
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final MessageEmbed trackListInfoEmbed(final List<AudioTrack> tracks, final boolean numbered) {
|
public static final MessageEmbed trackListInfoEmbed(final List<RequestedTrack> tracks, final boolean numbered) {
|
||||||
Checks.notNull(tracks, "Tracks");
|
Checks.notNull(tracks, "Tracks");
|
||||||
Checks.notNull(numbered, "Numbered");
|
Checks.notNull(numbered, "Numbered");
|
||||||
|
|
||||||
@@ -62,7 +73,7 @@ public final class TrackUtil {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
final AudioTrack track = tracks.get(i);
|
final AudioTrack track = tracks.get(i).getTrack();
|
||||||
final AudioTrackInfo info = track.getInfo();
|
final AudioTrackInfo info = track.getInfo();
|
||||||
if (numbered) {
|
if (numbered) {
|
||||||
builder.addField(
|
builder.addField(
|
||||||
@@ -81,7 +92,7 @@ public final class TrackUtil {
|
|||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final MessageEmbed pagedTrackListInfoEmbed(final List<AudioTrack> tracks, int page) {
|
public static final MessageEmbed pagedTrackListInfoEmbed(final List<RequestedTrack> tracks, int page) {
|
||||||
Checks.notNull(tracks, "Tracks");
|
Checks.notNull(tracks, "Tracks");
|
||||||
Checks.notNull(page, "Page");
|
Checks.notNull(page, "Page");
|
||||||
|
|
||||||
@@ -101,7 +112,7 @@ public final class TrackUtil {
|
|||||||
final int end = start + 10;
|
final int end = start + 10;
|
||||||
|
|
||||||
for (int i = start; i < end && i < tracks.size(); i++) {
|
for (int i = start; i < end && i < tracks.size(); i++) {
|
||||||
final AudioTrack track = tracks.get(i);
|
final AudioTrack track = tracks.get(i).getTrack();
|
||||||
final AudioTrackInfo info = track.getInfo();
|
final AudioTrackInfo info = track.getInfo();
|
||||||
builder.addField("**" + (i + 1) + ":** " + StringUtil.sanitize(info.title), StringUtil.sanitize(info.author)
|
builder.addField("**" + (i + 1) + ":** " + StringUtil.sanitize(info.title), StringUtil.sanitize(info.author)
|
||||||
+ " - " + StringUtil.formatTime(track.getDuration()) + " - [View](" + info.uri + ")", false);
|
+ " - " + StringUtil.formatTime(track.getDuration()) + " - [View](" + info.uri + ")", false);
|
||||||
@@ -111,7 +122,7 @@ public final class TrackUtil {
|
|||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final boolean doesGreaterPageExist(final List<AudioTrack> tracks, int page) {
|
public static final boolean doesGreaterPageExist(final List<RequestedTrack> tracks, int page) {
|
||||||
Checks.notNull(tracks, "Tracks");
|
Checks.notNull(tracks, "Tracks");
|
||||||
Checks.notNull(page, "Page");
|
Checks.notNull(page, "Page");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user