diff --git a/src/main/java/net/locusworks/discord/eighttrack/database/config/EightTrackBeanConfiguration.java b/src/main/java/net/locusworks/discord/eighttrack/database/config/EightTrackBeanConfiguration.java index cca6994..093320d 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/database/config/EightTrackBeanConfiguration.java +++ b/src/main/java/net/locusworks/discord/eighttrack/database/config/EightTrackBeanConfiguration.java @@ -69,9 +69,6 @@ public class EightTrackBeanConfiguration { static { hibernateProperties = new Properties(); 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.connection.charSet", "utf8"); hibernateProperties.setProperty("hibernate.connection.characterEncoding", "utf8"); diff --git a/src/main/java/net/locusworks/discord/eighttrack/database/repos/GuildPlaylistRepository.java b/src/main/java/net/locusworks/discord/eighttrack/database/repos/GuildPlaylistRepository.java index 8a93dff..a263f56 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/database/repos/GuildPlaylistRepository.java +++ b/src/main/java/net/locusworks/discord/eighttrack/database/repos/GuildPlaylistRepository.java @@ -56,6 +56,6 @@ public interface GuildPlaylistRepository extends CrudRepository 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") - GuildPlaylist findGuildUserPlaylistFetchSongs(Long guild, Long userId, String playlist); + GuildPlaylist findByGuildUserPlaylistFetchSongs(Long guild, Long userId, String playlist); } diff --git a/src/main/java/net/locusworks/discord/eighttrack/handlers/DiscordEventHandler.java b/src/main/java/net/locusworks/discord/eighttrack/handlers/DiscordEventHandler.java index 4930330..8a9e215 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/handlers/DiscordEventHandler.java +++ b/src/main/java/net/locusworks/discord/eighttrack/handlers/DiscordEventHandler.java @@ -157,7 +157,6 @@ public class DiscordEventHandler extends ListenerAdapter { GuildMusicHandler gmh = GuildMusicService.getMap().get(event.getGuild().getIdLong()); gmh.accept((id) -> GuildMusicService.getMap().remove(id)); - List commands = new ArrayList(Arrays.asList(event.getMessage().getContentRaw().trim().toLowerCase().split(" "))); String command = commands.remove(0); diff --git a/src/main/java/net/locusworks/discord/eighttrack/handlers/GuildMusicHandler.java b/src/main/java/net/locusworks/discord/eighttrack/handlers/GuildMusicHandler.java index 27586ab..b9c11e3 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/handlers/GuildMusicHandler.java +++ b/src/main/java/net/locusworks/discord/eighttrack/handlers/GuildMusicHandler.java @@ -34,7 +34,9 @@ import java.nio.file.Path; import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Random; import java.util.Set; import java.util.UUID; @@ -42,7 +44,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.stream.Collectors; - import org.apache.commons.lang3.StringUtils; 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.Permission; 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.Member; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.Message.Attachment; import net.dv8tion.jda.api.entities.MessageEmbed; @@ -92,7 +93,7 @@ public class GuildMusicHandler { private long guildId; private GuildPlaylist currentPlaylist; - + private TrackManager trackManager; public GuildMusicHandler(Path musicDir, long guildId, Mp3UploadHandler uploadHandler, ReactionHandler reactionHandler, RepositoryService guildSongRepoService) throws IOException { @@ -341,16 +342,24 @@ public class GuildMusicHandler { if (gs.getSong().getTitle().length() > longestSong) longestSong = gs.getSong().getTitle().length(); if (gs.getSong().getArtist().length() > longestArtist) longestArtist = gs.getSong().getArtist().length(); } + + event.getChannel().sendMessage(String.format("**Currently available songs for %s**\n\n", event.getGuild().getName())).complete(); - String fmt = "%6s | %-" + longestSong +"s | %-" + longestArtist +"s | %s%n"; int count = 0; - StringBuilder sb = new StringBuilder(); - sb.append("**" + "Currently available songs for " + event.getGuild().getName() + "**\n\n```"); + String fmt = "%6s | %-" + longestSong +"s | %-" + longestArtist +"s | %s%n"; + StringBuilder sb = new StringBuilder("```"); sb.append(String.format(fmt, "Track", "Title", "Artist", "id")); sb.append(StringUtils.repeat("-", 27 + longestSong + longestArtist)).append("\n"); 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("```"); event.getChannel().sendMessage(sb.toString()).queue(); @@ -359,15 +368,16 @@ public class GuildMusicHandler { public void adminPlaylist(GuildMessageReceivedEvent event, List commands) throws IOException { if(!isAdmin(event)) return; if (!checkCommands(event, commands, event.getMember().getAsMention() + ", valid commands are +playst list, play, delete")) return; - + String command = commands.remove(0); switch (command) { case "list": listAllPlaylists(event); return; + case "delete": + deleteUserPlayList(event, commands); + return; } - - } public void delete(GuildMessageReceivedEvent event, List commands) { @@ -515,7 +525,7 @@ public class GuildMusicHandler { builder.addField("ID", gs.getUuid(), true); MessageEmbed embed = builder.build(); - + try { guildSongRepoService.logEntry(event.getGuild().getIdLong(), "%s uploaded", result); } catch (Exception ex) {} @@ -554,7 +564,7 @@ public class GuildMusicHandler { 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) { event.getChannel().sendMessage(event.getMember().getAsMention() + " you have no defined playlists on this server by the name of " + playlist).queue(); return; @@ -623,7 +633,7 @@ public class GuildMusicHandler { }); } - + private void listAllPlaylists(GuildMessageReceivedEvent event) throws IOException { List userPlaylist = guildSongRepoService.getGuildPlaylistRepo().findByGuildFetchSongs(event.getGuild().getIdLong()); if (userPlaylist == null || userPlaylist.isEmpty()) { @@ -631,19 +641,27 @@ public class GuildMusicHandler { return; } int longestPlaylist = 10; + int longestUserName = 10; + Map userMap = new HashMap<>(); for(GuildPlaylist gpl : userPlaylist) { 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("```"); - sb.append(String.format(fmt, "", "Playlist", "Song Count")); - sb.append(StringUtils.repeat("-", 24 + longestPlaylist)).append("\n"); + sb.append(String.format(fmt, "", "Playlist", "User", "Song Count")); + sb.append(StringUtils.repeat("-", 24 + longestPlaylist + longestUserName)).append("\n"); int count = 0; 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("```"); event.getChannel().sendMessage("**Playlists for " + event.getGuild().getName() + "**").queue((succcess)-> @@ -651,9 +669,46 @@ public class GuildMusicHandler { } private void deleteUserPlayList(GuildMessageReceivedEvent event, List 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 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; + + } private void deleteGuildSongsConfirm(List songs, String user, Message msg) { @@ -878,13 +933,21 @@ public class GuildMusicHandler { } private boolean checkCommands(GuildMessageReceivedEvent event, List commands, String msg) { - if (commands == null || commands.isEmpty()) { + return checkCommands(event, commands, 0, msg); + } + + private boolean checkCommands(GuildMessageReceivedEvent event, List commands, int minParams, String msg) { + if (commands == null || commands.isEmpty() || commands.size() < minParams) { event.getChannel().sendMessage(msg).queue(); return false; } return true; } + private void sendMessage(GuildMessageReceivedEvent event, String msg) { + event.getChannel().sendMessage(msg).queue(); + } + private void deleteMessage(Message msg) { try { msg.delete().complete();