|
|
@ -34,7 +34,9 @@ import java.nio.file.Path;
|
|
|
|
import java.time.OffsetDateTime;
|
|
|
|
import java.time.OffsetDateTime;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Date;
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Random;
|
|
|
|
import java.util.Random;
|
|
|
|
import java.util.Set;
|
|
|
|
import java.util.Set;
|
|
|
|
import java.util.UUID;
|
|
|
|
import java.util.UUID;
|
|
|
@ -42,7 +44,6 @@ import java.util.concurrent.TimeUnit;
|
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
|
|
|
|
|
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
|
|
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
|
|
@ -50,8 +51,8 @@ import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
|
|
|
import net.dv8tion.jda.api.EmbedBuilder;
|
|
|
|
import net.dv8tion.jda.api.EmbedBuilder;
|
|
|
|
import net.dv8tion.jda.api.Permission;
|
|
|
|
import net.dv8tion.jda.api.Permission;
|
|
|
|
import net.dv8tion.jda.api.entities.ChannelType;
|
|
|
|
import net.dv8tion.jda.api.entities.ChannelType;
|
|
|
|
import net.dv8tion.jda.api.entities.Guild;
|
|
|
|
|
|
|
|
import net.dv8tion.jda.api.entities.GuildChannel;
|
|
|
|
import net.dv8tion.jda.api.entities.GuildChannel;
|
|
|
|
|
|
|
|
import net.dv8tion.jda.api.entities.Member;
|
|
|
|
import net.dv8tion.jda.api.entities.Message;
|
|
|
|
import net.dv8tion.jda.api.entities.Message;
|
|
|
|
import net.dv8tion.jda.api.entities.Message.Attachment;
|
|
|
|
import net.dv8tion.jda.api.entities.Message.Attachment;
|
|
|
|
import net.dv8tion.jda.api.entities.MessageEmbed;
|
|
|
|
import net.dv8tion.jda.api.entities.MessageEmbed;
|
|
|
@ -342,15 +343,23 @@ public class GuildMusicHandler {
|
|
|
|
if (gs.getSong().getArtist().length() > longestArtist) longestArtist = gs.getSong().getArtist().length();
|
|
|
|
if (gs.getSong().getArtist().length() > longestArtist) longestArtist = gs.getSong().getArtist().length();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String fmt = "%6s | %-" + longestSong +"s | %-" + longestArtist +"s | %s%n";
|
|
|
|
event.getChannel().sendMessage(String.format("**Currently available songs for %s**\n\n", event.getGuild().getName())).complete();
|
|
|
|
|
|
|
|
|
|
|
|
int count = 0;
|
|
|
|
int count = 0;
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
String fmt = "%6s | %-" + longestSong +"s | %-" + longestArtist +"s | %s%n";
|
|
|
|
sb.append("**" + "Currently available songs for " + event.getGuild().getName() + "**\n\n```");
|
|
|
|
StringBuilder sb = new StringBuilder("```");
|
|
|
|
sb.append(String.format(fmt, "Track", "Title", "Artist", "id"));
|
|
|
|
sb.append(String.format(fmt, "Track", "Title", "Artist", "id"));
|
|
|
|
sb.append(StringUtils.repeat("-", 27 + longestSong + longestArtist)).append("\n");
|
|
|
|
sb.append(StringUtils.repeat("-", 27 + longestSong + longestArtist)).append("\n");
|
|
|
|
|
|
|
|
|
|
|
|
for(GuildSong gs : gsList) {
|
|
|
|
for(GuildSong gs : gsList) {
|
|
|
|
sb.append(String.format(fmt, ++count, gs.getSong().getTitle(), gs.getSong().getArtist(), gs.getUuid()));
|
|
|
|
String msg = String.format(fmt, ++count, gs.getSong().getTitle(), gs.getSong().getArtist(), gs.getUuid());
|
|
|
|
|
|
|
|
if (sb.length() + msg.length() > 2000) {
|
|
|
|
|
|
|
|
sb.append("```");
|
|
|
|
|
|
|
|
event.getChannel().sendMessage(sb.toString()).complete();
|
|
|
|
|
|
|
|
sb = new StringBuilder("```");
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
sb.append(msg);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sb.append("```");
|
|
|
|
sb.append("```");
|
|
|
|
event.getChannel().sendMessage(sb.toString()).queue();
|
|
|
|
event.getChannel().sendMessage(sb.toString()).queue();
|
|
|
@ -365,9 +374,10 @@ public class GuildMusicHandler {
|
|
|
|
case "list":
|
|
|
|
case "list":
|
|
|
|
listAllPlaylists(event);
|
|
|
|
listAllPlaylists(event);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
case "delete":
|
|
|
|
|
|
|
|
deleteUserPlayList(event, commands);
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void delete(GuildMessageReceivedEvent event, List<String> commands) {
|
|
|
|
public void delete(GuildMessageReceivedEvent event, List<String> commands) {
|
|
|
@ -554,7 +564,7 @@ public class GuildMusicHandler {
|
|
|
|
|
|
|
|
|
|
|
|
String playlist = commands.remove(0);
|
|
|
|
String playlist = commands.remove(0);
|
|
|
|
|
|
|
|
|
|
|
|
GuildPlaylist gpl = guildSongRepoService.getGuildPlaylistRepo().findGuildUserPlaylistFetchSongs(event.getGuild().getIdLong(), event.getMember().getIdLong(), playlist);
|
|
|
|
GuildPlaylist gpl = guildSongRepoService.getGuildPlaylistRepo().findByGuildUserPlaylistFetchSongs(event.getGuild().getIdLong(), event.getMember().getIdLong(), playlist);
|
|
|
|
if (gpl == null) {
|
|
|
|
if (gpl == null) {
|
|
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + " you have no defined playlists on this server by the name of " + playlist).queue();
|
|
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + " you have no defined playlists on this server by the name of " + playlist).queue();
|
|
|
|
return;
|
|
|
|
return;
|
|
|
@ -631,19 +641,27 @@ public class GuildMusicHandler {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
int longestPlaylist = 10;
|
|
|
|
int longestPlaylist = 10;
|
|
|
|
|
|
|
|
int longestUserName = 10;
|
|
|
|
|
|
|
|
Map<Long, String> userMap = new HashMap<>();
|
|
|
|
for(GuildPlaylist gpl : userPlaylist) {
|
|
|
|
for(GuildPlaylist gpl : userPlaylist) {
|
|
|
|
if (gpl.getPlaylist().length() > longestPlaylist) longestPlaylist = gpl.getPlaylist().length();
|
|
|
|
if (gpl.getPlaylist().length() > longestPlaylist) longestPlaylist = gpl.getPlaylist().length();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Member m = event.getGuild().getMemberById(gpl.getUserId());
|
|
|
|
|
|
|
|
if (m == null) continue;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (m.getUser().getAsTag().length() > longestUserName) longestUserName = m.getUser().getAsTag().length();
|
|
|
|
|
|
|
|
userMap.put(gpl.getUserId(), m.getUser().getAsTag());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String fmt = "%6s | %-" + longestPlaylist +"s | %s%n";
|
|
|
|
String fmt = "%6s | %-" + longestPlaylist +"s | %-" + longestUserName + "s | %s%n";
|
|
|
|
|
|
|
|
|
|
|
|
StringBuilder sb = new StringBuilder("```");
|
|
|
|
StringBuilder sb = new StringBuilder("```");
|
|
|
|
sb.append(String.format(fmt, "", "Playlist", "Song Count"));
|
|
|
|
sb.append(String.format(fmt, "", "Playlist", "User", "Song Count"));
|
|
|
|
sb.append(StringUtils.repeat("-", 24 + longestPlaylist)).append("\n");
|
|
|
|
sb.append(StringUtils.repeat("-", 24 + longestPlaylist + longestUserName)).append("\n");
|
|
|
|
|
|
|
|
|
|
|
|
int count = 0;
|
|
|
|
int count = 0;
|
|
|
|
for(GuildPlaylist gpl : userPlaylist) {
|
|
|
|
for(GuildPlaylist gpl : userPlaylist) {
|
|
|
|
sb.append(String.format(fmt, ++count, gpl.getPlaylist(), gpl.getGuildPlaylistSongList().size()));
|
|
|
|
sb.append(String.format(fmt, ++count, gpl.getPlaylist(), userMap.get(gpl.getUserId()), gpl.getGuildPlaylistSongList().size()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sb.append("```");
|
|
|
|
sb.append("```");
|
|
|
|
event.getChannel().sendMessage("**Playlists for " + event.getGuild().getName() + "**").queue((succcess)->
|
|
|
|
event.getChannel().sendMessage("**Playlists for " + event.getGuild().getName() + "**").queue((succcess)->
|
|
|
@ -651,7 +669,44 @@ public class GuildMusicHandler {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void deleteUserPlayList(GuildMessageReceivedEvent event, List<String> commands) {
|
|
|
|
private void deleteUserPlayList(GuildMessageReceivedEvent event, List<String> commands) {
|
|
|
|
Guild guild = event.getGuild();
|
|
|
|
if (!checkCommands(event, commands, 2, "Must provide playlist and user's tag (in that order)")) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String playlist = commands.remove(0);
|
|
|
|
|
|
|
|
String userTag = commands.remove(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Member m = event.getGuild().getMemberByTag(userTag);
|
|
|
|
|
|
|
|
if (m == null) {
|
|
|
|
|
|
|
|
sendMessage(event, String.format("Unable to find user with tag %s", userTag));
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GuildPlaylist gpl = guildSongRepoService.getGuildPlaylistRepo().findByGuildAndUserIdAndPlaylist(event.getGuild().getIdLong(), m.getIdLong(), playlist);
|
|
|
|
|
|
|
|
if (gpl == null) {
|
|
|
|
|
|
|
|
sendMessage(event, String.format("Unable to find play list %s for user %s", playlist, userTag));
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
long userId = event.getMember().getIdLong();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MessageEmbed embed = new EmbedBuilder()
|
|
|
|
|
|
|
|
.setColor(Color.RED)
|
|
|
|
|
|
|
|
.setTitle("Delete Playlist " + playlist)
|
|
|
|
|
|
|
|
.setDescription("Are you sure you want to delete the playlist " + playlist)
|
|
|
|
|
|
|
|
.setTimestamp(OffsetDateTime.now())
|
|
|
|
|
|
|
|
.setFooter(event.getGuild().getSelfMember().getEffectiveName(), event.getGuild().getSelfMember().getUser().getAvatarUrl())
|
|
|
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
event.getChannel().sendMessage(embed).queue((msg) -> {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ReactionListener<String> handler = new ReactionListener<>(userId, msg.getId());
|
|
|
|
|
|
|
|
handler.setExpiresIn(TimeUnit.MINUTES, 1);
|
|
|
|
|
|
|
|
handler.registerReaction(Reactions.CHECK_MARK_BUTTON, (ret) -> deletePlayListConfirm(gpl, event.getMember().getAsMention(), msg));
|
|
|
|
|
|
|
|
handler.registerReaction(Reactions.CROSS_MARK_BUTTON, (ret) -> deleteMessage(msg));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reactionHandler.addReactionListener(guildId, msg, handler);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -878,13 +933,21 @@ public class GuildMusicHandler {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private boolean checkCommands(GuildMessageReceivedEvent event, List<String> commands, String msg) {
|
|
|
|
private boolean checkCommands(GuildMessageReceivedEvent event, List<String> commands, String msg) {
|
|
|
|
if (commands == null || commands.isEmpty()) {
|
|
|
|
return checkCommands(event, commands, 0, msg);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private boolean checkCommands(GuildMessageReceivedEvent event, List<String> commands, int minParams, String msg) {
|
|
|
|
|
|
|
|
if (commands == null || commands.isEmpty() || commands.size() < minParams) {
|
|
|
|
event.getChannel().sendMessage(msg).queue();
|
|
|
|
event.getChannel().sendMessage(msg).queue();
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void sendMessage(GuildMessageReceivedEvent event, String msg) {
|
|
|
|
|
|
|
|
event.getChannel().sendMessage(msg).queue();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void deleteMessage(Message msg) {
|
|
|
|
private void deleteMessage(Message msg) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
msg.delete().complete();
|
|
|
|
msg.delete().complete();
|
|
|
|