Fixed issue with displaying song list

This commit is contained in:
Isaac Parenteau
2019-12-30 23:59:30 -06:00
parent 6ec37452f9
commit 52c8253aa0
4 changed files with 83 additions and 24 deletions

View File

@ -69,9 +69,6 @@ public class EightTrackBeanConfiguration {
static { static {
hibernateProperties = new Properties(); hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.connection.zeroDateTimeBehavior", "convertToNull"); hibernateProperties.setProperty("hibernate.connection.zeroDateTimeBehavior", "convertToNull");
hibernateProperties.setProperty("hibernate.dbcp.maxActive", "50");
hibernateProperties.setProperty("hibernate.dbcp.maxIdle", "10");
hibernateProperties.setProperty("hibernate.dbcp.maxWait", "5000");
hibernateProperties.setProperty("hibernate.jdbc.batch_size property", "50"); hibernateProperties.setProperty("hibernate.jdbc.batch_size property", "50");
hibernateProperties.setProperty("hibernate.connection.charSet", "utf8"); hibernateProperties.setProperty("hibernate.connection.charSet", "utf8");
hibernateProperties.setProperty("hibernate.connection.characterEncoding", "utf8"); hibernateProperties.setProperty("hibernate.connection.characterEncoding", "utf8");

View File

@ -56,6 +56,6 @@ public interface GuildPlaylistRepository extends CrudRepository<GuildPlaylist, L
List<GuildPlaylist> findByGuildAndUserIdFetchSongs(Long guild, Long userId); List<GuildPlaylist> findByGuildAndUserIdFetchSongs(Long guild, Long userId);
@Query("SELECT DISTINCT gpl FROM GuildPlaylist gpl LEFT JOIN FETCH gpl.guildPlaylistSongList WHERE gpl.guild.guildId = ?1 AND gpl.userId = ?2 AND gpl.playlist = ?3") @Query("SELECT DISTINCT gpl FROM GuildPlaylist gpl LEFT JOIN FETCH gpl.guildPlaylistSongList WHERE gpl.guild.guildId = ?1 AND gpl.userId = ?2 AND gpl.playlist = ?3")
GuildPlaylist findGuildUserPlaylistFetchSongs(Long guild, Long userId, String playlist); GuildPlaylist findByGuildUserPlaylistFetchSongs(Long guild, Long userId, String playlist);
} }

View File

@ -157,7 +157,6 @@ public class DiscordEventHandler extends ListenerAdapter {
GuildMusicHandler gmh = GuildMusicService.getMap().get(event.getGuild().getIdLong()); GuildMusicHandler gmh = GuildMusicService.getMap().get(event.getGuild().getIdLong());
gmh.accept((id) -> GuildMusicService.getMap().remove(id)); gmh.accept((id) -> GuildMusicService.getMap().remove(id));
List<String> commands = new ArrayList<String>(Arrays.asList(event.getMessage().getContentRaw().trim().toLowerCase().split(" "))); List<String> commands = new ArrayList<String>(Arrays.asList(event.getMessage().getContentRaw().trim().toLowerCase().split(" ")));
String command = commands.remove(0); String command = commands.remove(0);

View File

@ -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();